用c++编写一个函数Print,能够打印多个学生的各门成绩,在主函数中定义一个可以存放有5个学生数据的数组。每个学生的数据包括num(学号),name(姓名),score[3](3门课的成绩)。在主函数输入这些数据,用Print函数输出这些数据。(结构体类型编写),再编写一个函数SortStud对5个学生按每个学生的3门成绩总分(由高到低)进行排序,并用new申请存放5个学生数据的存储空间
时间: 2024-04-06 12:33:09 浏览: 39
有一个一维数组内放个学生成绩求平均成绩。-C++程序设计__谭浩强100%完整
好的,这是一个比较完整的题目,我来一步步解答。
首先,我们需要定义一个结构体类型,来存储每个学生的数据:
```cpp
struct Student {
int num; // 学号
string name; // 姓名
int score[3]; // 3门课的成绩
};
```
接下来,我们需要实现一个函数 `Print`,能够打印多个学生的各门成绩。该函数的参数应该是一个 `Student` 类型的数组以及数组的长度。实现代码如下:
```cpp
void Print(Student students[], int len) {
for (int i = 0; i < len; i++) {
cout << "学号:" << students[i].num << endl;
cout << "姓名:" << students[i].name << endl;
cout << "成绩:";
for (int j = 0; j < 3; j++) {
cout << students[i].score[j] << " ";
}
cout << endl << endl;
}
}
```
接下来,我们需要实现一个函数 `SortStud`,对5个学生按每个学生的3门成绩总分(由高到低)进行排序。该函数的参数应该是一个 `Student` 类型的数组以及数组的长度。实现代码如下:
```cpp
void SortStud(Student students[], int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
int sum1 = students[i].score[0] + students[i].score[1] + students[i].score[2];
int sum2 = students[j].score[0] + students[j].score[1] + students[j].score[2];
if (sum1 < sum2) {
// 交换两个学生的数据
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
```
最后,我们需要在主函数中定义一个可以存放有5个学生数据的数组,并输入这些数据。代码如下:
```cpp
int main() {
// 定义一个可以存放有5个学生数据的数组
Student* students = new Student[5];
// 输入每个学生的数据
for (int i = 0; i < 5; i++) {
cout << "请输入第" << i + 1 << "个学生的数据:" << endl;
cout << "学号:";
cin >> students[i].num;
cout << "姓名:";
cin >> students[i].name;
cout << "成绩:";
for (int j = 0; j < 3; j++) {
cin >> students[i].score[j];
}
cout << endl;
}
// 打印每个学生的数据
cout << "所有学生的数据如下:" << endl;
Print(students, 5);
// 对学生按照成绩排序
SortStud(students, 5);
// 打印排序后的学生数据
cout << "按照成绩排序后的学生数据如下:" << endl;
Print(students, 5);
// 释放存储空间
delete[] students;
return 0;
}
```
注意,在主函数中,我们使用了 `new` 关键字来申请存放5个学生数据的存储空间,并在程序结束时使用 `delete[]` 关键字释放该空间。
阅读全文