用c++编写一个程序,从键盘输入一批学生的成绩信息,每个学生的成绩信息包括学号、姓名以及八门课的成绩。然后按照平均成绩从高到低的顺序输出学生的学号、姓名、八门成绩以及平均值
时间: 2024-12-24 10:38:44 浏览: 4
在C++中,我们可以使用`map`结合自定义的`Student`结构体来实现这样的功能。首先,我们需要定义结构体表示学生及其成绩,并包含一个用于保存所有课程成绩的容器。下面是完整的示例代码:
```cpp
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <algorithm> // 包含sort函数
using namespace std;
// 定义学生结构体
struct Course {
string name;
int grade;
};
// 学生结构体
struct Student {
int id;
string name;
map<string, Course> courses; // 用于存储八门课的成绩
float average_score;
};
void input_student_data(Student& student) {
cout << "请输入学生信息(学号, 姓名): ";
cin >> student.id >> student.name;
for (int i = 0; i < 8; i++) {
string course_name;
int grade;
cout << "请输入第" << (i + 1) << "门课程名称及成绩: ";
cin >> course_name >> grade;
student.courses[course_name] = {course_name, grade};
}
}
void calculate_average(Student& student) {
student.average_score = 0;
for (const auto& entry : student.courses) {
student.average_score += entry.second.grade;
}
student.average_score /= 8.0f;
}
bool compare_students(const Student& a, const Student& b) {
return a.average_score > b.average_score;
}
int main() {
int num_students;
cout << "请输入学生数量: ";
cin >> num_students;
map<int, Student> students; // 使用map按学号排序学生
for (int i = 0; i < num_students; i++) {
Student temp;
input_student_data(temp);
students.insert({temp.id, temp});
}
sort(students.begin(), students.end(), compare_students);
cout << "学生信息按平均成绩从高到低排序:\n";
for (const auto& entry : students) {
cout << "学号: " << entry.first << ", 姓名: " << entry.second.name;
cout << "\n八门课程成绩:\n";
for (const auto& course : entry.second.courses) {
cout << course.first << ": " << course.second.grade << endl;
}
cout << "平均成绩: " << entry.second.average_score << endl;
cout << "-------------------------\n";
}
return 0;
}
```
这个程序会先请求用户输入学生数量和每名学生的详细信息,然后计算每个学生的平均成绩并按照平均成绩排序。最后,它将输出排序后的学生信息。
阅读全文