建立一个有 n(3<n≤10)个学生成绩的结构记录,包括学号、姓名和 3 门成绩,输出总分最高学生的姓名和总分。(输入输出示例同书上示例)
时间: 2024-02-18 07:59:13 浏览: 29
好的,我可以帮你解决这个问题。以下是一份示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 10
struct student {
char id[10];
char name[20];
int score[3];
int total_score;
};
int main() {
int n;
struct student stu[MAXN];
printf("请输入学生人数(3-%d):", MAXN);
scanf("%d", &n);
getchar(); // 消耗掉换行符
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
fgets(stu[i].id, 10, stdin);
stu[i].id[strlen(stu[i].id) - 1] = '\0'; // 去掉末尾的换行符
printf("姓名:");
fgets(stu[i].name, 20, stdin);
stu[i].name[strlen(stu[i].name) - 1] = '\0'; // 去掉末尾的换行符
printf("成绩1:");
scanf("%d", &stu[i].score[0]);
printf("成绩2:");
scanf("%d", &stu[i].score[1]);
printf("成绩3:");
scanf("%d", &stu[i].score[2]);
stu[i].total_score = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
getchar(); // 消耗掉换行符
}
int max_score = 0;
int max_score_index;
for (int i = 0; i < n; i++) {
if (stu[i].total_score > max_score) {
max_score = stu[i].total_score;
max_score_index = i;
}
}
printf("总分最高的学生是%s,总分为%d。\n", stu[max_score_index].name, max_score);
return 0;
}
```
这个程序定义了一个 `student` 结构体类型,包含学号、姓名、3门成绩和总分。程序首先会让用户输入学生人数(要求在3-10之间),然后依次输入每个学生的信息。输入完成后,程序会遍历所有学生,求出总分最高的学生,最后输出该学生的姓名和总分。
注意,由于输入学号、姓名等信息时可能会输入多余的换行符,我们需要用 `fgets()` 函数读入字符串,并手动去掉末尾的换行符。同时,在每次输入成绩后,也需要消耗掉输入缓冲区中的换行符,否则可能会导致下一次输入失效。