将上面代码改写成c++版,并结合在一起
时间: 2024-10-18 10:14:38 浏览: 22
以下是将上述C代码转换为C++版本,同时整合到一个简单的程序中:
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 定义Student结构体
struct Student {
string name;
int id;
int score;
};
// 输入10个学生信息
void input_students(vector<Student>& students) {
for (int i = 0; i < 10; i++) {
cout << "请输入第" << (i + 1) << "个学生的姓名: ";
getline(cin, students[i].name);
cin >> students[i].id;
cin >> students[i].score;
cin.ignore(); // 消除换行符
}
}
// 计算平均成绩
double calculate_average(const vector<Student>& students) {
int sum = 0;
for (const auto& student : students) {
sum += student.score;
}
return static_cast<double>(sum) / students.size();
}
// 根据成绩划分等级
string get_grade(int score) {
if (score >= 90)
return "A";
else if (score >= 80)
return "B";
else if (score >= 70)
return "C";
else if (score >= 60)
return "D";
else
return "E";
}
// 输出相关信息
void output_info(const vector<Student>& students) {
double average = calculate_average(students);
cout << "平均成绩: " << average << endl;
cout << "成绩高于平均成绩的学生: " << endl;
for (const auto& student : students) {
if (student.score > average) {
cout << "姓名: " << student.name << ", 学号: " << student.id << ", 成绩: " << student.score << ", 等级: " << get_grade(student.score) << endl;
}
}
sort(students.begin(), students.end(), [](const Student& a, const Student& b) { return a.score > b.score; });
cout << "成绩最高的学生: " << students.back().name << ", 学号: " << students.back().id << ", 成绩: " << students.back().score << ", 等级: " << get_grade(students.back().score) << endl;
}
int main() {
vector<Student> students;
input_students(students);
output_info(students);
return 0;
}
```
在这个C++版本中,我们使用了`std::vector`来替代数组,`getline`用于处理字符串输入,`cin.ignore()`消除换行符,以及一个lambda表达式对成绩最高的学生进行排序。`get_grade`函数则负责根据成绩返回相应的字母等级。
阅读全文