c语言编写程序并上机调试通过。 题目:编写函数完成已知有5名学生,每名学生的初始数据包括学号、姓名、3门课的成绩及平均值如下: (1001,赵娟,78,82,84,0, 1002,王平,80,86,77,0, 1003,周颖,88,83,76,0, 1004,吴哲新,76,92,87,0, 1005,杨静,81,86,85,0) 要求:1)计算每名学生3门课成绩的平均值,写到平均成绩的成员里。 2)主函数提供原始记录,输出原始记录和按平均成绩降序排后的记录信息(学号、姓名、成绩1、成绩2、成绩3、平均成绩)。
时间: 2023-09-18 21:09:23 浏览: 87
好的,以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
int id;
char name[20];
int score1;
int score2;
int score3;
float average;
} Student;
// 计算每个学生的平均分
void calc_average(Student *student) {
student->average = (student->score1 + student->score2 + student->score3) / 3.0;
}
// 比较两个学生的平均分大小,用于排序
int compare(const void *a, const void *b) {
const Student *s1 = *(const Student **)a;
const Student *s2 = *(const Student **)b;
return s2->average - s1->average;
}
// 主函数
int main() {
// 初始化学生数组
Student students[5] = {
{1001, "赵娟", 78, 82, 84, 0},
{1002, "王平", 80, 86, 77, 0},
{1003, "周颖", 88, 83, 76, 0},
{1004, "吴哲新", 76, 92, 87, 0},
{1005, "杨静", 81, 86, 85, 0},
};
// 计算每个学生的平均分
for (int i = 0; i < 5; i++) {
calc_average(&students[i]);
}
// 按平均分降序排列
Student *sorted_students[5];
for (int i = 0; i < 5; i++) {
sorted_students[i] = &students[i];
}
qsort(sorted_students, 5, sizeof(Student *), compare);
// 输出原始记录和按平均成绩降序排列后的记录信息
printf("原始记录:\n");
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for (int i = 0; i < 5; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].average);
}
printf("\n按平均成绩降序排列后的记录信息:\n");
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for (int i = 0; i < 5; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", sorted_students[i]->id, sorted_students[i]->name, sorted_students[i]->score1, sorted_students[i]->score2, sorted_students[i]->score3, sorted_students[i]->average);
}
return 0;
}
```
输出结果如下:
```
原始记录:
学号 姓名 成绩1 成绩2 成绩3 平均成绩
1001 赵娟 78 82 84 81.33
1002 王平 80 86 77 81.00
1003 周颖 88 83 76 82.33
1004 吴哲新 76 92 87 85.00
1005 杨静 81 86 85 84.00
按平均成绩降序排列后的记录信息:
学号 姓名 成绩1 成绩2 成绩3 平均成绩
1004 吴哲新 76 92 87 85.00
1005 杨静 81 86 85 84.00
1003 周颖 88 83 76 82.33
1001 赵娟 78 82 84 81.33
1002 王平 80 86 77 81.00
```
阅读全文