5
社区成员
发帖
与我相关
我的任务
分享
//如何应用STL标准模板库中的sort函数对学生结构体数组依照成绩进行排序?
#include<stdio.h>
#include<algorithm>
const int N=1000;//学生结构体数组长度(等于可容纳的最大学生人数)
struct student{
char id[10];//学号
char name[10];//姓名
double Chi;//语文成绩
double Mat;//数学成绩
double Egl;//英语成绩
double Sum;//总成绩
}stu[N];
//sort函数默认按升序排列,但是成绩通常按降序排列,所以需要自定义一个比较函数
bool comp(student a,student b){
return a.Sum>b.Sum;
}
//录入学生基本信息
void Input(int n){
printf("======================================================\n");
printf("请输入学生成绩信息\n");
printf("======================================================\n");
for(int i=0;i<n;i++){
printf("请输入第%d位学生学号:",i+1);
scanf("%s",stu[i].id);
printf("请输入第%d位学生姓名:",i+1);
scanf("%s",stu[i].name);
printf("请输入第%d位学生语文成绩:",i+1);
scanf("%lf",&stu[i].Chi);
printf("请输入第%d位学生数学成绩:",i+1);
scanf("%lf",&stu[i].Mat);
printf("请输入第%d位学生英语成绩:",i+1);
scanf("%lf",&stu[i].Egl);
//学生总成绩
stu[i].Sum = stu[i].Chi+stu[i].Mat+stu[i].Egl;
printf("==================第%d位学生成绩录入已完成!==================\n",i+1);
}
//按照总成绩进行降序排序
std::sort(stu,stu+n,comp);
}
//输出学生成绩单
void Output(int n){
printf("排名\t学号\t姓名\t总成绩\t语文\t数学\t英语\n");
for(int i=0;i<n;i++){
printf("%d\t%s\t%s\t%lf\t%lf\t%lf\t%lf\n",
i+1,stu[i].id,stu[i].name,stu[i].Sum,stu[i].Chi,stu[i].Mat,stu[i].Egl);
}
}
int main()
{
int n=0;//录入学生的人数
printf("请输入录入学生的人数:");
scanf("%d",&n);
Input(n); //录入学生基本信息
Output(n);//输出学生成绩单
return 0;
}
输出结果:
