输入n个学生的姓名及其3门功课成绩(整数),要求根据3门功课的平均成绩从高分到低分输出每个学生的姓名、3门功课成绩及平均成绩,若平均分相同则按姓名的字典序输出。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据首先输入一个正整数n(1<n<100),表示学生人数;然后是n行信息,分别表示学生的姓名(长度不超过10且由英文字母构成的字符串)和3门课成绩(正整数)。 输出格式: 对于每组测试,输出排序后的学生信息,每行一个学生信息:姓名、3门课成绩、平均成绩(保留2位小数)。每行数据之间留一个空格。 运用结构体
时间: 2024-02-29 12:51:03 浏览: 48
好的,这是一个经典的排序问题,我可以帮你写一个 C++ 程序来解决这个问题。代码如下:
```c++
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct Student {
string name;
int score[3];
double average;
};
bool cmp(Student a, Student b) {
if (a.average != b.average) {
return a.average > b.average;
} else {
return a.name < b.name;
}
}
int main() {
int n;
while (cin >> n) {
Student students[n];
for (int i = 0; i < n; i++) {
cin >> students[i].name;
for (int j = 0; j < 3; j++) {
cin >> students[i].score[j];
}
students[i].average = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / 3.0;
}
sort(students, students + n, cmp);
for (int i = 0; i < n; i++) {
cout << students[i].name << " ";
for (int j = 0; j < 3; j++) {
cout << students[i].score[j] << " ";
}
printf("%.2f\n", students[i].average);
}
}
return 0;
}
```
程序中使用了一个结构体 `Student` 来存储每个学生的信息,包括姓名、三门课成绩和平均成绩。然后使用 `sort` 函数按照题目要求的方式排序,最后输出排序后的结果即可。
注意,程序中使用了 `printf("%.2f\n", students[i].average);` 来输出保留两位小数的平均成绩,这是 C++ 中的格式化输出方式,可以在输出时指定输出格式,其中 `%.2f` 表示输出一个浮点数,保留两位小数。
阅读全文