题目要求找出总分最高的学生:建立一个有 n (3< n ≤10)个学生成绩的结构记录,包括学号、姓名和3门成绩,输出总分最高学生的姓名和总分,找出这段C语言代码的错误并写出正确的代码#include <stdio.h>struct students{ int number; char name[20]; int score[3]; int sum;}; int main (void){ int i, index, j, n, max=0; struct students e[i]; printf("n="); scanf("%d", &n); for (i = 0; i < n; i++){ scanf("%d%s", &e[i].number, &e[i].name); for(j = 0; j < 3; j++){ scanf("%d", &e[i].score[j]); e[i].sum += e[i].score[j]; } index = 0; max = e[0].sum; for(i = 1; i < n; i++){ if(max < e[i].sum) { index = i; } }} printf("%s, %d\n",e[index].name,e[index].sum); return 0;}
时间: 2023-07-16 22:17:03 浏览: 327
有两个明显的错误:
1. 在定义结构体数组 e 时,使用了变量 i,但此时 i 的值还未确定。应该先确定 n 的值,再定义 e 数组。
2. 在找出总分最高的学生时,没有更新 max 的值,导致无法正确找出最高分数。
以下是修改后的代码:
```c
#include <stdio.h>
struct students{
int number;
char name[20];
int score[3];
int sum;
};
int main (void){
int i, index, j, n, max=0;
printf("n=");
scanf("%d", &n);
struct students e[n];
for (i = 0; i < n; i++){
scanf("%d%s", &e[i].number, e[i].name);
for(j = 0; j < 3; j++){
scanf("%d", &e[i].score[j]);
e[i].sum += e[i].score[j];
}
if(max < e[i].sum) {
index = i;
max = e[i].sum;
}
}
printf("%s, %d\n",e[index].name,e[index].sum);
return 0;
}
```
阅读全文