从文件中读取学生成绩信息,然后编写STL程序实现以下功能:1.依据学生学号查询并输出对应学生的姓名及成绩2.按照学生成绩升序排列并输出结果3.查询并输出平均成绩最高的前五名同学的学号,成绩及平均成绩
时间: 2024-03-26 17:34:44 浏览: 222
好的,我会尽力回答您的问题。
针对您的问题,需要进行以下几个步骤:
1. 读取文件,获取学生学号、姓名和成绩信息。
2. 将学生信息存储在一个 STL 容器中,例如 vector 或 map。
3. 实现依据学生学号查询并输出对应学生的姓名及成绩的功能。
4. 实现按照学生成绩升序排列并输出结果的功能。
5. 实现查询并输出平均成绩最高的前五名同学的学号,成绩及平均成绩的功能。
下面是一个简单的示例代码,仅供参考:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
struct Student {
string id;
string name;
double score;
};
bool cmp(const Student& s1, const Student& s2) {
return s1.score < s2.score;
}
int main() {
// 读取文件,获取学生学号、姓名和成绩信息
ifstream infile("score.txt");
if (!infile.is_open()) {
cout << "文件打开失败!" << endl;
return 0;
}
vector<Student> students;
map<string, Student> studentMap;
string line;
while (getline(infile, line)) {
Student s;
stringstream ss(line);
ss >> s.id >> s.name >> s.score;
students.push_back(s);
studentMap[s.id] = s;
}
infile.close();
// 依据学生学号查询并输出对应学生的姓名及成绩
string queryId = "1001";
if (studentMap.count(queryId)) {
Student s = studentMap[queryId];
cout << "学号为 " << queryId << " 的学生姓名为 " << s.name << ",成绩为 " << s.score << endl;
} else {
cout << "找不到学号为 " << queryId << " 的学生!" << endl;
}
// 按照学生成绩升序排列并输出结果
sort(students.begin(), students.end(), cmp);
cout << "按照学生成绩升序排列结果:" << endl;
for (const auto& s : students) {
cout << "学号:" << s.id << ",姓名:" << s.name << ",成绩:" << s.score << endl;
}
// 查询并输出平均成绩最高的前五名同学的学号,成绩及平均成绩
sort(students.rbegin(), students.rend(), cmp);
cout << "平均成绩最高的前五名同学的学号、成绩及平均成绩:" << endl;
double sum = 0;
for (int i = 0; i < min(5, (int)students.size()); i++) {
sum += students[i].score;
cout << "学号:" << students[i].id << ",成绩:" << students[i].score << endl;
}
double avg = sum / min(5, (int)students.size());
cout << "平均成绩为:" << avg << endl;
return 0;
}
```
需要注意的是,该代码仅为示例,实际情况中需要根据具体需求进行修改和完善。
阅读全文