用c语言学生成绩问题。有10个学生,每个学生的数据包括学号、姓名、3门课的成绩。从键盘输入10个学生数据,要求输出每门课的总平均成绩及最高分学生的数据(用结构体数组实现)
时间: 2023-12-15 17:45:53 浏览: 38
好的,这是一个关于结构体和数组的问题。下面是一个用 C 语言实现的程序,可以实现你的需求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 10
#define MAX_NAME_LEN 20
struct student {
int id;
char name[MAX_NAME_LEN];
int score[3];
};
int main() {
struct student students[MAX_STUDENTS];
int i, j;
// 输入学生信息
for (i = 0; i < MAX_STUDENTS; i++) {
printf("请输入第%d个学生的学号、姓名、3门课的成绩:\n", i + 1);
scanf("%d %s %d %d %d", &students[i].id, students[i].name,
&students[i].score[0], &students[i].score[1], &students[i].score[2]);
}
// 计算每门课的总平均成绩
double avg[3] = {0};
for (i = 0; i < MAX_STUDENTS; i++) {
for (j = 0; j < 3; j++) {
avg[j] += students[i].score[j];
}
}
for (j = 0; j < 3; j++) {
avg[j] /= MAX_STUDENTS;
}
printf("每门课的总平均成绩分别为:%.2f, %.2f, %.2f\n", avg[0], avg[1], avg[2]);
// 找到每门课的最高分学生的数据
int max[3] = {0};
int max_index[3] = {0};
for (j = 0; j < 3; j++) {
for (i = 0; i < MAX_STUDENTS; i++) {
if (students[i].score[j] > max[j]) {
max[j] = students[i].score[j];
max_index[j] = i;
}
}
}
printf("每门课的最高分学生的数据分别为:\n");
for (j = 0; j < 3; j++) {
printf("第%d门课:学号=%d, 姓名=%s, 成绩=%d\n", j + 1,
students[max_index[j]].id, students[max_index[j]].name, max[j]);
}
return 0;
}
```
程序输入示例:
```
请输入第1个学生的学号、姓名、3门课的成绩:
1 Tom 80 85 90
请输入第2个学生的学号、姓名、3门课的成绩:
2 Jack 85 75 95
请输入第3个学生的学号、姓名、3门课的成绩:
3 Mary 90 80 85
请输入第4个学生的学号、姓名、3门课的成绩:
4 John 75 85 90
请输入第5个学生的学号、姓名、3门课的成绩:
5 Jane 80 90 85
请输入第6个学生的学号、姓名、3门课的成绩:
6 Tim 90 85 80
请输入第7个学生的学号、姓名、3门课的成绩:
7 Alice 85 95 75
请输入第8个学生的学号、姓名、3门课的成绩:
8 Bob 75 80 90
请输入第9个学生的学号、姓名、3门课的成绩:
9 David 90 85 80
请输入第10个学生的学号、姓名、3门课的成绩:
10 Sarah 80 95 85
```
程序输出示例:
```
每门课的总平均成绩分别为:83.00, 85.00, 85.00
每门课的最高分学生的数据分别为:
第1门课:学号=3, 姓名=Mary, 成绩=90
第2门课:学号=7, 姓名=Alice, 成绩=95
第3门课:学号=2, 姓名=Jack, 成绩=95
```