检查以下代码 找出可能出错的地方#include<stdio.h> struct student{ int num; char name; double score1,score2,score3; double average; }; int main(void) { int i,j,k; int n; struct student stu[50],temp; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&stu[i].num); scanf("%s",&stu[i].name); scanf("%lf%lf%lf",&stu[i].score1,&stu[i].score2,&stu[i].score3); stu[i].average = (stu[i].score1+stu[i].score2+stu[i].score3)/3.0; } int index; for(i=0;i<n-1;i++){ index = i; for(j=i+1;j<n;j++){ if(stu[i].average>stu[index].average){ index = i; } } temp = stu[i]; stu[i] = stu[index]; stu[index] = temp; } for(i=0;i<n;i++){ printf("%d,%.2f\n",stu[i].num,stu[i].average); }
时间: 2024-01-22 17:04:17 浏览: 28
在代码中可能出错的地方是:
1. 在结构体中,name应该是一个字符串类型,而不是字符类型,应该定义为char name[20]或者char *name。
2. 在第21行的if语句中,应该比较stu[j].average和stu[index].average,而不是stu[i].average和stu[index].average。
正确的代码如下:
```c
#include<stdio.h>
struct student{
int num;
char name[20]; // name应该是一个字符串类型
double score1,score2,score3;
double average;
};
int main(void) {
int i,j,k;
int n;
struct student stu[50],temp;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&stu[i].num);
scanf("%s",stu[i].name);
scanf("%lf%lf%lf",&stu[i].score1,&stu[i].score2,&stu[i].score3);
stu[i].average = (stu[i].score1+stu[i].score2+stu[i].score3)/3.0;
}
int index;
for(i=0;i<n-1;i++){
index = i;
for(j=i+1;j<n;j++){ // 比较stu[j].average和stu[index].average
if(stu[j].average>stu[index].average){
index = j;
}
}
temp = stu[i];
stu[i] = stu[index];
stu[index] = temp;
}
for(i=0;i<n;i++){
printf("%d,%.2f\n",stu[i].num,stu[i].average);
}
return 0;
}
```