用C++有n个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入3个学生数据,要求打印出3门课总平均成绩,以及最高分的学生数据(包括学号、姓名、3门课成绩、平均分数)
时间: 2024-12-17 22:29:11 浏览: 13
数据结构:定义一个包含学生信息(学号、姓名、成绩)的顺序表_数据结构
5星 · 资源好评率100%
为了实现这个功能,你可以使用结构体或类来存储学生的信息,然后创建一个结构体数组或动态分配内存来保存多个学生的数据。这里我会使用结构体和循环来获取输入,计算平均分并找到最高分的学生。
首先,定义一个结构体`Student`:
```cpp
#include <iostream>
#include <string>
using namespace std;
struct Student {
int id;
string name;
double score1, score2, score3; // 假设每门课程满分100分
};
```
接下来,我们可以编写一个函数来获取输入并计算平均分:
```cpp
void inputAndCalculateAverage(Student* students, int n) {
for (int i = 0; i < n; ++i) {
cout << "请输入第" << (i + 1) << "名学生的相关信息(学号,姓名,三门课成绩):" << endl;
cin >> students[i].id >> students[i].name;
cin >> students[i].score1 >> students[i].score2 >> students[i].score3;
double totalScore = students[i].score1 + students[i].score2 + students[i].score3;
double averageScore = totalScore / 3.0;
cout << "学生" << i+1 << "的平均成绩为: " << averageScore << endl;
}
}
```
接着,我们创建一个辅助函数来找出最高分的学生信息:
```cpp
Student findHighestScoringStudent(const Student* students, int n) {
Student highestScorer = students[0]; // 假定第一个学生是最高分初始值
for (int i = 1; i < n; ++i) {
if (students[i].score1 > highestScorer.score1 ||
(students[i].score1 == highestScorer.score1 &&
students[i].score2 > highestScorer.score2) ||
(students[i].score1 == highestScorer.score1 &&
students[i].score2 == highestScorer.score2 &&
students[i].score3 > highestScorer.score3)) {
highestScorer = students[i];
}
}
return highestScorer;
}
// 主函数
int main() {
int n;
cout << "请输入学生数量: ";
cin >> n;
Student* students = new Student[n]; // 动态分配内存
inputAndCalculateAverage(students, n);
Student highestStudent = findHighestScoringStudent(students, n);
cout << "最高分学生信息:\n";
cout << "学号: " << highestStudent.id << "\n"
<< "姓名: " << highestStudent.name << "\n"
<< "课程成绩: " << highestStudent.score1 << ", " << highestStudent.score2 << ", " << highestStudent.score3 << "\n"
<< "平均成绩: " << highestStudent.averageScore << endl; // 注意这里的averageScore并不是真正的平均分数,因为我们在findHighestScoringStudent中并没有重新计算
delete[] students; // 释放动态分配的内存
return 0;
}
```
在这个程序中,我们首先获取了所有学生的数据,然后找到了最高分的学生信息。请注意,由于`findHighestScoringStudent`函数没有直接计算平均分数,所以在输出时使用的`highestStudent.averageScore`实际上并不是学生的真实平均分数。
阅读全文