用STL的容器vector和算法sort实现编写一个程序,从键盘输入一批学生的成绩信息,每个学生的成绩信息包括学号、姓名以及八门课的成绩。然后按照平均成绩及由高到低的顺序输出学生的学号、姓名、八门课成绩以及平均成绩,并逐句解释代码
时间: 2024-02-18 15:04:51 浏览: 63
以下是实现上述功能的代码,已加入注释以便理解:
```c++
#include <iostream>
#include <vector>
#include <algorithm> // 引入STL算法库中的sort函数
using namespace std;
struct Student {
string id; // 学号
string name; // 姓名
vector<double> grades; // 八门课成绩
double avg_grade; // 平均成绩
};
bool cmp(Student a, Student b) { // 自定义比较函数
return a.avg_grade > b.avg_grade; // 按平均成绩由高到低排序
}
int main() {
vector<Student> students; // 定义一个存放学生信息的vector
int n; // 学生个数
cin >> n;
for (int i = 0; i < n; i++) {
Student s;
cin >> s.id >> s.name;
double sum = 0;
for (int j = 0; j < 8; j++) {
double grade;
cin >> grade;
s.grades.push_back(grade);
sum += grade;
}
s.avg_grade = sum / 8;
students.push_back(s);
}
sort(students.begin(), students.end(), cmp); // 对学生信息按平均成绩排序
for (int i = 0; i < n; i++) {
cout << students[i].id << " " << students[i].name << " ";
for (int j = 0; j < 8; j++) {
cout << students[i].grades[j] << " ";
}
cout << students[i].avg_grade << endl;
}
return 0;
}
```
首先定义了一个结构体 `Student`,包括学号、姓名、八门课成绩和平均成绩。然后使用 `vector` 容器存放学生信息。接着从键盘输入学生信息,计算平均成绩,并将学生信息存放到 `vector` 中。最后使用 `sort` 算法对学生信息按平均成绩排序,并逐个输出学生的学号、姓名、八门课成绩以及平均成绩。
其中,自定义了一个比较函数 `cmp`,用于指定排序方式。在 `sort` 函数中,传入了 `cmp` 函数作为第三个参数,用于按照平均成绩由高到低排序。
需要注意的是,本程序中没有进行输入数据的合法性校验,实际应用中需要进行相应的处理。
阅读全文