C++用STL容器vector和算法sort实现从键盘输入一批学生的成绩信息,每个学生的成绩包括学号、姓名以及8门课的成绩。然后按照平均成绩由高到低的顺序输出学生的学号、姓名、8门课的成绩以及平均成绩
时间: 2023-12-23 10:54:34 浏览: 77
以下是实现代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct Student {
string id; // 学号
string name; // 姓名
vector<int> grades; // 8门课的成绩
double average; // 平均成绩
};
bool compare(Student a, Student b) {
return a.average > b.average; // 按照平均成绩由高到低排序
}
int main() {
vector<Student> students; // 存储学生信息的向量
int num; // 学生数量
cout << "请输入学生数量:";
cin >> num;
// 循环输入学生信息
for (int i = 0; i < num; i++) {
Student stu;
cout << "请输入第" << i + 1 << "个学生的信息:" << endl;
cout << "学号:";
cin >> stu.id;
cout << "姓名:";
cin >> stu.name;
cout << "8门课的成绩:";
for (int j = 0; j < 8; j++) {
int grade;
cin >> grade;
stu.grades.push_back(grade);
}
stu.average = accumulate(stu.grades.begin(), stu.grades.end(), 0.0) / stu.grades.size();
students.push_back(stu);
}
// 使用sort函数排序
sort(students.begin(), students.end(), compare);
// 输出排序后的学生信息
cout << "按照平均成绩由高到低排序后的学生信息如下:" << endl;
for (int i = 0; i < num; i++) {
cout << "学号:" << students[i].id << ",姓名:" << students[i].name << ",成绩:";
for (int j = 0; j < 8; j++) {
cout << students[i].grades[j] << " ";
}
cout << ",平均成绩:" << students[i].average << endl;
}
return 0;
}
```
使用accumulate函数可以方便地计算平均成绩。在compare函数中,需要返回一个布尔值来表示两个学生的先后顺序,如果返回true,则表示第一个学生应该排在第二个学生前面,否则反之。在主函数中,使用sort函数对学生信息进行排序,排序的依据是compare函数的返回值。最后按照排序后的顺序输出学生信息。
阅读全文