c++1.编写一个函数Print,能够打印多个学生的各门成绩,在主函数中定义一个可以存放有5个学生数据的数组。每个学生的数据包括num(学号),name(姓名),score[3](3门课的成绩)。在主函数输入这些数据,用Print函数输出这些数据。(结构体类型编写) 在上一题的基础上,编写一个函数SortStud对5个学生按每个学生的3门成绩总分(由高到低)进行排序,并用new申请存放5个学生数据的存储空间。
时间: 2024-04-06 17:33:30 浏览: 79
好的,我来为您解答这个问题。
首先,我们可以定义一个结构体类型,来存储每个学生的数据:
```c++
struct Student {
int num;
string name;
double score[3];
};
```
接下来,我们可以定义一个函数 `Print`,用来打印多个学生的各门成绩:
```c++
void Print(Student* students, int n) {
for (int i = 0; i < n; i++) {
cout << "学号:" << students[i].num << endl;
cout << "姓名:" << students[i].name << endl;
cout << "成绩:" << students[i].score[0] << " " << students[i].score[1] << " " << students[i].score[2] << endl;
}
}
```
其中,`students` 是一个指向存放有学生数据的数组的指针,`n` 表示数组中有几个学生数据。
然后,我们可以在主函数中定义一个可以存放有5个学生数据的数组:
```c++
int main() {
Student students[5];
// 输入5个学生的数据
// ...
// 调用Print函数输出这些数据
Print(students, 5);
return 0;
}
```
接下来,我们需要编写一个函数 `SortStud`,对5个学生按每个学生的3门成绩总分进行排序。为了方便,我们可以在结构体中再加一个 `sum` 字段,用来存放每个学生的3门成绩总分:
```c++
struct Student {
int num;
string name;
double score[3];
double sum;
};
```
然后,我们可以定义一个函数 `SortStud`,来对这5个学生按照成绩总分进行排序:
```c++
void SortStud(Student* students, int n) {
for (int i = 0; i < n; i++) {
students[i].sum = students[i].score[0] + students[i].score[1] + students[i].score[2];
}
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-1-i; j++) {
if (students[j].sum < students[j+1].sum) {
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
}
```
其中,`students` 是一个指向存放有学生数据的数组的指针,`n` 表示数组中有几个学生数据。首先,我们遍历一遍数组,计算每个学生的3门成绩总分,存放到 `sum` 字段中。然后,我们使用冒泡排序对这些学生数据按照成绩总分进行排序。
最后,我们可以在主函数中使用 `new` 关键字申请存放5个学生数据的存储空间,并调用 `SortStud` 函数进行排序:
```c++
int main() {
Student* students = new Student[5];
// 输入5个学生的数据
// ...
// 调用SortStud函数对这5个学生进行排序
SortStud(students, 5);
// 调用Print函数输出这些数据
Print(students, 5);
// 释放申请的存储空间
delete[] students;
return 0;
}
```
需要注意的是,在使用完 `new` 关键字申请的存储空间后,我们需要使用 `delete` 关键字释放这些存储空间。
阅读全文