有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求: 1.打印出3门课的总平均成绩(结果保留两位小数) 2.打印平均分最高分学生的数据(包括学号、姓名、3门课成绩)c语言
时间: 2023-12-15 20:22:18 浏览: 380
以下是一个C语言的示例代码,实现了你提出的要求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
struct Student {
int id;
char name[20];
float scores[3];
};
int main() {
int n;
struct Student students[MAX_STUDENTS];
float avg_scores[3] = {0};
// 输入学生数据
printf("请输入学生人数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("三门课的成绩(用空格分隔):");
scanf("%f %f %f", &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
// 计算总平均成绩
for (int j = 0; j < 3; j++) {
avg_scores[j] += students[i].scores[j] / n;
}
}
// 打印总平均成绩
printf("三门课的总平均成绩为:%.2f %.2f %.2f\n", avg_scores[0], avg_scores[1], avg_scores[2]);
// 打印平均分最高分学生的数据
float max_avg_score = 0;
int max_avg_score_index = 0;
for (int i = 0; i < n; i++) {
float avg_score = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / 3;
if (avg_score > max_avg_score) {
max_avg_score = avg_score;
max_avg_score_index = i;
}
}
printf("平均分最高的学生是:%s(学号:%d),三门课成绩为:%.2f %.2f %.2f\n",
students[max_avg_score_index].name, students[max_avg_score_index].id,
students[max_avg_score_index].scores[0], students[max_avg_score_index].scores[1], students[max_avg_score_index].scores[2]);
return 0;
}
```
其中,我们定义了一个 `Student` 结构体,用于存储每个学生的数据。在主函数中,我们先输入学生数据,并计算出三门课的总平均成绩;然后遍历所有学生,找到平均分最高的学生,并打印出其详细数据。
阅读全文