用结构体数组存储某班30名学生的信息,每个学生的数据项有学号、姓名、性别和四门课的成绩。编写程序计算四门课的平均成绩,要求用键盘输入学生数据,再按平均成绩排序,并输出含平均成绩的报表
时间: 2024-01-04 13:01:56 浏览: 103
好的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20
#define NUM_COURSE 4
#define NUM_STUDENT 30
// 定义学生结构体
typedef struct {
char id[MAX_LEN];
char name[MAX_LEN];
char sex[MAX_LEN];
float score[NUM_COURSE];
float avg_score;
} student;
// 计算平均成绩
void calc_avg_score(student *s) {
float sum = 0;
for (int i = 0; i < NUM_COURSE; i++) {
sum += s->score[i];
}
s->avg_score = sum / NUM_COURSE;
}
// 按平均成绩排序
void sort_by_avg_score(student *s, int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (s[i].avg_score < s[j].avg_score) {
student tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
}
}
int main() {
student s[NUM_STUDENT];
// 输入学生数据
for (int i = 0; i < NUM_STUDENT; i++) {
printf("请输入第%d个学生的学号、姓名、性别和四门课的成绩:\n", i + 1);
scanf("%s %s %s %f %f %f %f", s[i].id, s[i].name, s[i].sex, &s[i].score[0], &s[i].score[1], &s[i].score[2], &s[i].score[3]);
calc_avg_score(&s[i]);
}
// 按平均成绩排序
sort_by_avg_score(s, NUM_STUDENT);
// 输出报表
printf("学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t成绩4\t平均成绩\n");
for (int i = 0; i < NUM_STUDENT; i++) {
printf("%s\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n", s[i].id, s[i].name, s[i].sex, s[i].score[0], s[i].score[1], s[i].score[2], s[i].score[3], s[i].avg_score);
}
return 0;
}
```
这里定义了一个 `student` 结构体来存储每个学生的信息,其中包括了学号、姓名、性别、四门课的成绩以及平均成绩。在 `calc_avg_score` 函数中计算平均成绩,`sort_by_avg_score` 函数按照平均成绩排序。在 `main` 函数中,先输入学生数据,再按平均成绩排序,最后输出报表。
阅读全文