c语言编写程序,用结构体存放学生的若干信息,包括学号、姓名和3门课程的分数,从键盘输入数据,输出每门课程的总平均分,以及最高分的学生的完整数据。
时间: 2024-03-24 10:36:08 浏览: 87
C语言程序设计-输入2个学生3门课的成绩,计算学生成绩平均分,课程平均分和最高分.
5星 · 资源好评率100%
好的,以下是可以实现你的要求的C语言代码:
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
struct Student {
char id[20]; // 学号
char name[20]; // 姓名
int score1; // 课程1分数
int score2; // 课程2分数
int score3; // 课程3分数
float avg; // 平均分
};
int main() {
const int num = 5; // 学生数量
struct Student stu[num]; // 存储学生信息的数组
int total1 = 0, total2 = 0, total3 = 0; // 存储每门课程的总分
int maxScore = 0; // 存储最高分
int maxIndex = 0; // 存储最高分学生的下标
// 输入学生信息
for (int i = 0; i < num; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%s", stu[i].id);
printf("姓名:");
scanf("%s", stu[i].name);
printf("课程1分数:");
scanf("%d", &stu[i].score1);
total1 += stu[i].score1;
printf("课程2分数:");
scanf("%d", &stu[i].score2);
total2 += stu[i].score2;
printf("课程3分数:");
scanf("%d", &stu[i].score3);
total3 += stu[i].score3;
// 计算每个学生的平均分
stu[i].avg = (stu[i].score1 + stu[i].score2 + stu[i].score3) / 3.0;
// 记录最高分和最高分学生的下标
if (stu[i].score1 > maxScore) {
maxScore = stu[i].score1;
maxIndex = i;
}
if (stu[i].score2 > maxScore) {
maxScore = stu[i].score2;
maxIndex = i;
}
if (stu[i].score3 > maxScore) {
maxScore = stu[i].score3;
maxIndex = i;
}
}
// 输出每门课程的平均分
printf("\n课程1的平均分:%.2f\n", total1 / (float)num);
printf("课程2的平均分:%.2f\n", total2 / (float)num);
printf("课程3的平均分:%.2f\n", total3 / (float)num);
// 输出最高分的学生信息
printf("\n最高分的学生信息:\n");
printf("学号:%s\n", stu[maxIndex].id);
printf("姓名:%s\n", stu[maxIndex].name);
printf("课程1分数:%d\n", stu[maxIndex].score1);
printf("课程2分数:%d\n", stu[maxIndex].score2);
printf("课程3分数:%d\n", stu[maxIndex].score3);
printf("平均分:%.2f\n", stu[maxIndex].avg);
return 0;
}
```
这个程序中,我们定义了一个结构体 `Student` 用来存储每个学生的信息,包括学号、姓名和三门课程的分数。我们使用一个数组 `stu` 来存储所有学生的信息。在输入学生信息的过程中,我们顺便计算每个学生的平均分,并记录最高分和最高分学生的下标。最后,我们输出每门课程的平均分和最高分学生的信息。
在C语言中,我们需要使用字符数组来存储字符串,所以学号和姓名的数据类型改为了 `char` 数组。在输出字符串时,我们使用了 `%s` 占位符。
阅读全文