如何应用STL标准模板库中的sort函数对学生结构体数组依照成绩进行排序?

代码骑士
优质创作者: 游戏开发技术领域
2023-01-04 14:25:22
//如何应用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;
} 

输出结果:

 

...全文
29 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

5

社区成员

发帖
与我相关
我的任务
社区描述
考研408:数据结构、计算机组成原理、操作系统、计算机网络
学习方法考研面试 其他
社区管理员
  • 代码骑士
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧