有五个学生,每个学生数据包括学号,姓名,和三门课成绩,从键盘输入五个学生相关数据,要求打印出这三门课的总成绩以及最高分的学生的数据(包括学号,姓名,三门课的成绩,三门课的平均分),要求使用结构体变量
时间: 2025-01-05 19:42:05 浏览: 98
好的,我来为您编写一个使用结构体变量来完成这个任务的C语言程序。以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define NUM_STUDENTS 5
#define NUM_SUBJECTS 3
struct Student {
char id[10];
char name[20];
float scores[NUM_SUBJECTS];
float total;
float average;
};
int main() {
struct Student students[NUM_STUDENTS];
int i, j;
// 输入学生数据
for (i = 0; i < NUM_STUDENTS; i++) {
printf("请输入第%d个学生的学号: ", i+1);
scanf("%s", students[i].id);
printf("请输入第%d个学生的姓名: ", i+1);
scanf("%s", students[i].name);
students[i].total = 0;
for (j = 0; j < NUM_SUBJECTS; j++) {
printf("请输入第%d个学生的第%d门课成绩: ", i+1, j+1);
scanf("%f", &students[i].scores[j]);
students[i].total += students[i].scores[j];
}
students[i].average = students[i].total / NUM_SUBJECTS;
printf("\n");
}
// 计算总成绩
float total_scores[NUM_SUBJECTS] = {0};
for (i = 0; i < NUM_STUDENTS; i++) {
for (j = 0; j < NUM_SUBJECTS; j++) {
total_scores[j] += students[i].scores[j];
}
}
// 找出最高分的学生
struct Student top_student = students[0];
for (i = 1; i < NUM_STUDENTS; i++) {
if (students[i].total > top_student.total) {
top_student = students[i];
}
}
// 打印结果
printf("三门课的总成绩:\n");
for (i = 0; i < NUM_SUBJECTS; i++) {
printf("第%d门课总成绩: %.2f\n", i+1, total_scores[i]);
}
printf("\n最高分的学生数据:\n");
printf("学号: %s\n", top_student.id);
printf("姓名: %s\n", top_student.name);
for (i = 0; i < NUM_SUBJECTS; i++) {
printf("第%d门课成绩: %.2f\n", i+1, top_student.scores[i]);
}
printf("三门课的平均分: %.2f\n", top_student.average);
return 0;
}
```
这个程序完成了以下任务:
1. 定义了一个`Student`结构体,包含学号、姓名、三门课成绩、总分和平均分。
2. 使用一个结构体数组来存储5个学生的数据。
3. 从键盘输入5个学生的数据,包括学号、姓名和三门课成绩,并计算每门课的总分和平均分。
4. 计算每门课的总成绩。
5. 找出总分最高的学生。
6. 打印出三门课的总成绩。
7. 打印出最高分学生的所有数据,包括学号、姓名、三门课成绩和三门课的平均分。
这个程序使用了结构体数组、循环结构、条件判断等C语言的基本特性。通过这个程序,我们可以很好地管理学生数据,并进行各种统计和分析。
阅读全文
相关推荐


















