用C++结构完成题目 有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩) 输入 学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。 输出 各门课的平均成绩 最高分的学生的数据(包括学号、姓名、3门课成绩) 样例输入 2 1 blue 90 80 70 2 clan 80 70 60 样例输出 85 75 65 1 blue 90 80 70
时间: 2023-12-15 12:21:15 浏览: 106
好的,这是一个关于学生成绩的问题。下面是解决方案:
```c++
#include <iostream>
#include <string>
using namespace std;
struct student {
string student_id;
string name;
int score1;
int score2;
int score3;
};
int main() {
int n;
cin >> n; // 输入学生数量
int max_score = -1; // 最高分初始化为-1
int sum_scores[3] = {0}; // 三门课程总成绩初始化为0
student max_student; // 最高分学生
for (int i = 0; i < n; i++) {
student s;
cin >> s.student_id >> s.name >> s.score1 >> s.score2 >> s.score3;
// 计算三门课程总成绩
sum_scores[0] += s.score1;
sum_scores[1] += s.score2;
sum_scores[2] += s.score3;
// 计算最高分学生
if (s.score1 + s.score2 + s.score3 > max_score) {
max_score = s.score1 + s.score2 + s.score3;
max_student = s;
}
}
// 计算三门课程的平均成绩
double avg_scores[3];
avg_scores[0] = sum_scores[0] * 1.0 / n;
avg_scores[1] = sum_scores[1] * 1.0 / n;
avg_scores[2] = sum_scores[2] * 1.0 / n;
// 输出结果
cout << round(avg_scores[0]) << " " << round(avg_scores[1]) << " " << round(avg_scores[2]) << endl;
cout << max_student.student_id << " " << max_student.name << " " << max_student.score1 << " " << max_student.score2 << " " << max_student.score3 << endl;
return 0;
}
```
解释一下代码:
首先定义一个结构体 `student`,用来表示每个学生的数据。该结构体包括学号、姓名和三门课的成绩。
然后定义变量 `max_score`,用来记录最高分,并初始化为-1;定义数组 `sum_scores`,用来记录三门课的总成绩,并初始化为0;定义结构体变量 `max_student`,用来记录最高分学生的信息。
接着,使用一个循环来输入每个学生的信息,并计算三门课程的总成绩。同时,也判断该学生是否为目前的最高分学生,如果是,则更新最高分和最高分学生的信息。
当循环结束后,我们就可以计算三门课的平均成绩,并输出结果。注意要使用 `round` 函数来四舍五入保留整数。
最后,我们输出最高分学生的信息,包括学号、姓名和三门课的成绩。
希望能帮到你!
阅读全文