用结构体数组储存30个学生的信息,每个学生的数据项有学号,姓名,性别和四门课的成绩,编写程序计算四门课的平均成绩,要求用键盘输入学生数据,再按平均成绩排序,并输入含平均成绩的报表
时间: 2024-01-03 13:05:51 浏览: 80
好的,我可以为您解答这个问题。
这里是一个基本实现:
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
struct Student {
char id[20];
char name[20];
char gender[10];
float scores[4];
float avg_score;
};
int main() {
int i, j;
struct Student stu[30];
float sum[4] = {0}; // 每门课程的总分
float avg[4] = {0}; // 每门课程的平均分
// 输入学生数据
for (i = 0; i < 30; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%s", stu[i].id);
printf("姓名:");
scanf("%s", stu[i].name);
printf("性别:");
scanf("%s", stu[i].gender);
for (j = 0; j < 4; j++) {
printf("第%d门课的成绩:", j+1);
scanf("%f", &stu[i].scores[j]);
sum[j] += stu[i].scores[j];
}
stu[i].avg_score = (sum[0]+sum[1]+sum[2]+sum[3])/4;
printf("\n");
}
// 按平均成绩排序
struct Student temp;
for (i = 0; i < 29; i++) {
for (j = i+1; j < 30; j++) {
if (stu[i].avg_score < stu[j].avg_score) {
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
// 计算平均分
for (i = 0; i < 4; i++) {
avg[i] = sum[i]/30;
}
// 打印报表
printf("学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t成绩4\t平均分\n");
for (i = 0; i < 30; i++) {
printf("%s\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",
stu[i].id, stu[i].name, stu[i].gender,
stu[i].scores[0], stu[i].scores[1], stu[i].scores[2], stu[i].scores[3],
stu[i].avg_score);
}
printf("每门课的平均分:\n");
printf("成绩1:%.1f\n成绩2:%.1f\n成绩3:%.1f\n成绩4:%.1f\n", avg[0], avg[1], avg[2], avg[3]);
return 0;
}
```
这个程序中,我们定义了一个 `Student` 结构体,用于保存每个学生的信息。我们首先通过循环输入每个学生的信息,同时计算每门课程的总分和平均分。之后,我们使用冒泡排序算法按照学生的平均成绩将学生数组排序。最后,我们打印出每个学生及其平均成绩,并输出每门课程的平均分。
注意,此处没有做输入数据的错误处理,例如学号重复等情况。在实际应用中,需要根据实际情况进行相应的处理。
阅读全文