编写一个函数print,实现按三门功课(语文,数学,英语)的总成绩降序输出。该数组有5个学生数据,每个学生有学号,姓名,三门功课成绩。要求主函数实现输入5个学生数据c++
时间: 2025-07-05 18:08:33 浏览: 8
### 实现 C++ 打印与排序函数
为了满足需求,在 C++ 中可以定义一个 `Student` 结构体来存储每位学生的具体信息,包括 ID、姓名以及三门课程的成绩。随后创建一个名为 `printAndSortStudents` 的函数用于接收含有五位学生数据的结构体数组,并按照总分由高到低对学生记录进行排序后输出。
#### 定义 Student 结构体
```cpp
struct Student {
char id[10]; // 存储学号
char name[20]; // 存储姓名
float scores[3]; // 分别存储语文、数学、英语成绩
};
```
#### 创建 printAndSortStudents 函数
此函数首先计算每个学生的总分,接着利用标准库中的 sort 方法对整个数组依据总分大小实施降序排列操作,最后遍历已排序好的数组依次显示各条目详情[^1]。
```cpp
#include <iostream>
#include <algorithm> // 导入算法头文件以便使用sort()
using namespace std;
// 计算单个学生的总分辅助函数
float calculateTotalScore(const Student& s) {
return s.scores[0] + s.scores[1] + s.scores[2];
}
bool compareByTotalScoreDescending(const Student &a, const Student &b){
return calculateTotalScore(a) > calculateTotalScore(b);
}
void printAndSortStudents(Student students[], int size) {
// 对学生按总分从大到小排序
sort(students, students + size, compareByTotalScoreDescending);
cout << "ID\tName\tChinese\tMaths\tEnglish\tTotal Score\n";
for(int i=0;i<size;++i){
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
students[i].id,
students[i].name,
students[i].scores[0],
students[i].scores[1],
students[i].scores[2],
calculateTotalScore(students[i]));
}
}
```
上述代码实现了基于给定条件的功能:通过自定义比较器 `compareByTotalScoreDescending()` 配合 STL 提供的 `std::sort[]` 进行快速高效的排序处理;而 `calculateTotalScore()` 则负责获取指定对象的总评分值作为排序关键字[^2]。
阅读全文