#include <stdio.h> #define MAXN 10 struct student{ int num; char name[20]; int score; char grade; }; int set_grade( struct student *p, int n ); int main() { struct student stu[MAXN], *ptr; int n, i, count; ptr = stu; scanf("%d\n", &n); for(i = 0; i < n; i++){ scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score); } count = set_grade(ptr, n); printf("The count for failed (<60): %d\n", count); printf("The grades:\n"); for(i = 0; i < n; i++) printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade); return 0; } /* 你的代码将被嵌在这里 */ int set_grade(struct student *p, int n) { int i, count = 0; for (i = 0; i < n; i++) { int score = p[i].score; switch (score / 10) { case 10:case 9: p[i].grade = 'A'; break; case 8: p[i].grade = 'B'; break; case 7: p[i].grade = 'C'; break; default: { p[i].grade = 'D'; count++; break; } } if(score>=85) p[i].grade = 'A'; } return count;} 程序改错等级设置:85-100为A,70-84为B,60-69为C,0-59为D。
时间: 2024-01-24 21:02:51 浏览: 30
这段代码是一个 C 语言程序,它定义了一个结构体 `student`,包含学生的学号、姓名、分数和等级。然后定义了一个函数 `set_grade`,用于根据学生的分数设置等级,并返回分数不及格的学生数量。在 `main` 函数中读入学生的信息,调用 `set_grade` 函数设置等级,最后输出每个学生的学号、姓名和等级,以及不及格的学生数量。
这段代码的问题在于,当学生的分数大于等于 85 分时,虽然根据题目要求应该将等级设置为 A,但是却被后面的语句覆盖设置为了 D,因为 `if(score>=85)` 在 `switch` 语句之后。要解决这个问题,只需要将 `if(score>=85)` 的位置调整到 `switch` 语句之前即可。以下是修改后的代码:
```
int set_grade(struct student *p, int n) {
int i, count = 0;
for (i = 0; i < n; i++) {
int score = p[i].score;
if (score >= 85) {
p[i].grade = 'A';
} else {
switch (score / 10) {
case 10:
case 9:
p[i].grade = 'A';
break;
case 8:
p[i].grade = 'B';
break;
case 7:
p[i].grade = 'C';
break;
default:
p[i].grade = 'D';
count++;
break;
}
}
}
return count;
}
```