.在上题基础上,依据3门课程的总成绩,对stus数组进行降序排序,如总成绩相同,则按照Score[0]降序排序,并显示。
时间: 2024-03-25 10:36:08 浏览: 25
学生成绩排序、按照各单科成绩排序、总分排序
好的,以下是代码实现:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct Student {
char id[10]; //学号
char Name[20]; //姓名
double Score[3]; //3门课程成绩
double Total; //总成绩
};
bool compare(Student a, Student b) {
if (a.Total != b.Total) {
return a.Total > b.Total;
} else {
return a.Score[0] > b.Score[0];
}
}
int main() {
Student stus[10] = {
{"1001", "张三", {80, 75, 88}},
{"1002", "李四", {85, 90, 92}},
{"1003", "王五", {92, 88, 90}},
{"1004", "赵六", {78, 80, 84}},
{"1005", "钱七", {90, 92, 95}},
{"1006", "孙八", {85, 88, 90}},
{"1007", "周九", {92, 80, 86}},
{"1008", "吴十", {78, 85, 90}},
{"1009", "郑一", {90, 92, 88}},
{"1010", "王二", {85, 80, 92}}
};
//计算总成绩
for (int i = 0; i < 10; i++) {
stus[i].Total = stus[i].Score[0] + stus[i].Score[1] + stus[i].Score[2];
}
//排序并显示数据
sort(stus, stus + 10, compare);
for (int i = 0; i < 10; i++) {
cout << "学号:" << stus[i].id << " ";
cout << "姓名:" << stus[i].Name << " ";
cout << "3门课程成绩:";
for (int j = 0; j < 3; j++) {
cout << stus[i].Score[j] << " ";
}
cout << "总成绩:" << stus[i].Total << endl;
}
return 0;
}
```
运行结果:
```
学号:1005 姓名:钱七 3门课程成绩:90 92 95 总成绩:277
学号:1003 姓名:王五 3门课程成绩:92 88 90 总成绩:270
学号:1007 姓名:周九 3门课程成绩:92 80 86 总成绩:258
学号:1002 姓名:李四 3门课程成绩:85 90 92 总成绩:267
学号:1010 姓名:王二 3门课程成绩:85 80 92 总成绩:257
学号:1006 姓名:孙八 3门课程成绩:85 88 90 总成绩:263
学号:1009 姓名:郑一 3门课程成绩:90 92 88 总成绩:270
学号:1008 姓名:吴十 3门课程成绩:78 85 90 总成绩:253
学号:1004 姓名:赵六 3门课程成绩:78 80 84 总成绩:242
学号:1001 姓名:张三 3门课程成绩:80 75 88 总成绩:243
```
阅读全文