3/27作业 吴哲

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是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 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值