1.编写一个函数Print,能够打印多个学生的各门成绩,在主函数中定义一个可以存放有5个学生数据的数组。每个学生的数据包括num(学号),name(姓名),score[3](3门课的成绩)。在主函数输入这些数据,用Print函数输出这些数据。(结构体类型编写) 2.在上一题的基础上,编写一个函数SortStud对5个学生按每个学生的3门成绩总分(由高到低)进行排序,并用new申请存放5个学生数据的存储空间。c++
时间: 2024-04-06 22:32:53 浏览: 12
好的,我来回答你的问题。以下是针对你的问题的代码解答:
```c++
#include <iostream>
#include <string>
using namespace std;
//定义学生结构体
struct student{
int num;
string name;
int score[3];
int totalScore; //总成绩
};
//打印学生信息函数
void Print(student* p){
for(int i=0;i<5;i++){
cout<<"学号:"<<p[i].num<<" ";
cout<<"姓名:"<<p[i].name<<" ";
cout<<"语文成绩:"<<p[i].score[0]<<" ";
cout<<"数学成绩:"<<p[i].score[1]<<" ";
cout<<"英语成绩:"<<p[i].score[2]<<endl;
}
}
//按总成绩排序函数
void SortStud(student* p){
for(int i=0;i<5;i++){
p[i].totalScore = p[i].score[0] + p[i].score[1] + p[i].score[2]; //计算每个学生的总成绩
}
//冒泡排序
for(int i=0;i<4;i++){
for(int j=0;j<4-i;j++){
if(p[j].totalScore < p[j+1].totalScore){
student temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
}
int main() {
//定义存储5个学生数据的数组
student* p = new student[5];
//输入5个学生的数据
for(int i=0;i<5;i++){
cout<<"请输入第"<<i+1<<"个学生的学号:";
cin>>p[i].num;
cout<<"请输入第"<<i+1<<"个学生的姓名:";
cin>>p[i].name;
cout<<"请输入第"<<i+1<<"个学生的语文成绩:";
cin>>p[i].score[0];
cout<<"请输入第"<<i+1<<"个学生的数学成绩:";
cin>>p[i].score[1];
cout<<"请输入第"<<i+1<<"个学生的英语成绩:";
cin>>p[i].score[2];
}
//打印学生信息
cout<<"学生信息:"<<endl;
Print(p);
//按总成绩排序
SortStud(p);
//打印排序后的学生信息
cout<<"按总成绩排序后的学生信息:"<<endl;
Print(p);
//释放动态分配的内存
delete[] p;
return 0;
}
```
这段代码中,我们首先定义了一个学生结构体,包括学号、姓名、成绩等信息。然后定义了一个打印学生信息的函数Print和一个按总成绩排序的函数SortStud。在主函数中,我们先用new申请了存放5个学生数据的存储空间,然后输入了5个学生的数据,调用Print函数打印出来,再调用SortStud函数按总成绩排序,最后再调用Print函数打印排序后的结果。最后记得要用delete释放动态分配的内存。