原题链接:成绩排序
解题思路: 结合结构体与数组
用swap函数替换 达成排序,这里是将小的值排到前面
有些许参考https://blog.dotcpp.com/a/66926 答主的错误点
注意事项: 要不是参考了该答主的错误点,网页做不出,错了好多次 答案错误50
参考代码: #include #include typedef struct { char name[101];//第一个易错点,因为还要多储存一个'\0'; int year; int cj;//成绩 cj }stu;//结构体名为stu 学生student缩写 void swap(stu* a,stu* b)//swap交换函数 { stu t; t=*a;*a=*b,*b=t; } int main() { int n,k; stu a[1000]; while(~scanf("%d",&n)) //多次输入n,测试数据有多组 { for(int i=0;i<n;i++)//存入数据 { scanf("%s%d%d",&a[i].name,&a[i].year,&a[i].cj); } for(int i=0;i<n;i++)//这个循环是来找最小的,找出每次循环的最小,排到每次循环的前面,使数组由小到大排列 { int min=i; for(k=i;k<n;k++) { if(a[k].cj<a[min].cj) min=k; if(a[k].cj==a[min].cj){if(strcmp(a[k].name,a[min].name)<0) min=k;} if(a[k].cj==a[min].cj&&strcmp(a[k].name,a[min].name)==0){if(a[k].year<a[min].year) min=k;} } swap(&a[min],&a[i]); } for(int i=0;i<n;i++)//输出 { printf("%s %d %d\n",a[i].name,a[i].year,a[i].cj); } } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复