C语言有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的数据,要求打印出3门课的平均成绩,以及平均成绩最高的学生的数据(包括学号、姓名、3门课成绩、平均分数)。
时间: 2023-12-15 14:22:05 浏览: 74
下面是一个简单的 C 语言程序实现:
```
#include <stdio.h>
#include <string.h>
#define N 10 // 学生数
#define M 3 // 课程数
struct Student {
int id;
char name[20];
float score[M];
float avg_score;
};
int main() {
struct Student students[N];
float avg_scores[M] = {0}; // 每门课的平均分数
float max_avg_score = 0; // 最高平均分数
int max_avg_score_index; // 最高平均分数学生的下标
// 输入学生数据
for (int i = 0; i < N; i++) {
printf("请输入第%d个学生的数据:\n", i + 1);
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
for (int j = 0; j < M; j++) {
printf("第%d门课的成绩:", j + 1);
scanf("%f", &students[i].score[j]);
avg_scores[j] += students[i].score[j]; // 计算每门课的总分
}
students[i].avg_score = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / M; // 计算平均分数
printf("\n");
}
// 计算每门课的平均分数
for (int j = 0; j < M; j++) {
avg_scores[j] /= N;
printf("第%d门课的平均分数为:%.2f\n", j + 1, avg_scores[j]);
}
// 查找平均分数最高的学生
for (int i = 0; i < N; i++) {
if (students[i].avg_score > max_avg_score) {
max_avg_score = students[i].avg_score;
max_avg_score_index = i;
}
}
// 输出平均分数最高的学生的数据
printf("平均分数最高的学生为:\n");
printf("学号:%d\n", students[max_avg_score_index].id);
printf("姓名:%s\n", students[max_avg_score_index].name);
printf("成绩:%.2f %.2f %.2f\n", students[max_avg_score_index].score[0], students[max_avg_score_index].score[1], students[max_avg_score_index].score[2]);
printf("平均分数:%.2f\n", students[max_avg_score_index].avg_score);
return 0;
}
```
程序先定义了一个结构体 `Student`,包含学号、姓名、3门课的成绩和平均分数。接着定义了一个数组 `students`,用来存放输入的学生数据。定义了两个数组 `avg_scores` 和 `max_avg_score`,分别用来存放每门课的平均分数和最高平均分数。
程序先通过循环输入10个学生的数据,包括学号、姓名和成绩。在输入过程中,同时计算每门课的总分数和平均分数。输入完成后,程序计算每门课的平均分数,并输出。接着程序查找平均分数最高的学生,输出其学号、姓名、成绩和平均分数。
需要注意的是,程序中使用了 `scanf` 函数来从键盘输入数据,这里假设输入的数据都是合法的,没有进行输入合法性检查。实际开发中,应该对用户输入进行检查,避免程序崩溃或者得到错误的结果。
阅读全文