原题链接:成绩排序
解题思路:
定义 一个结构体->构造一个动态数组->输入->排序->输出
注意事项:
1、比较字符串需要用到strcmp(str1,str2);
2、这个题的输入并不是一次,而是需要多组数据输入;
参考代码(自定义函数):
# include <stdio.h> # include <malloc.h> # include <string.h> //里面有strcmp(str1, str2);函数 //定义一个结构体类型 struct Student { char name[101]; int score; int age; }; void sort(struct Student * pArr, int N); //排序函数 int main() { int i; int N; struct Student * pArr; while(scanf("%d", &N)!=EOF) { //分配内存 pArr = (struct Student *)malloc(sizeof(struct Student)*N); //输入 for( i=0; i<N; i++) scanf("%s %d %d", pArr[i].name, &pArr[i].age, &pArr[i].score); //排序 sort(pArr, N); //输出 for( i=0; i<N; i++) printf("%s %d %d\n", pArr[i].name, pArr[i].age, pArr[i].score); } return 0; } //排序函数 void sort(struct Student * pArr, int N) { int i, j; struct Student t; //冒泡排序 for (i=0; i<N; i++) { for (j=i+1; j<N; j++) { if (pArr[j].score < pArr[i].score) { t = pArr[j]; pArr[j] = pArr[i]; pArr[i] = t; } else if (pArr[j].score == pArr[i].score && strcmp(pArr[i].name, pArr[j].name)>0) { t = pArr[j]; pArr[j] = pArr[i]; pArr[i] = t; } else if (pArr[j].score == pArr[i].score && pArr[j].age < pArr[i].age && strcmp(pArr[j].name, pArr[i].name)==0) { t = pArr[j]; pArr[j] = pArr[i]; pArr[i] = t; } } } }
参考代码:
# include <stdio.h> # include <string.h> //里面有strcmp(str1, str2);函数 struct Student { char name[101]; int score; int age; }S[2000], t; //s[2000]里面的数字大一点 int main() { int N; int i, j; while(scanf("%d", &N)!=EOF) { //输入 for(i=0; i<N; i++) { scanf("%s %d %d", S[i].name, &S[i].age, &S[i].score); } //按成绩排序 for (i=0; i<N; i++) { for (j=i+1; j<N; j++) { if (S[j].score < S[i].score) { t = S[j]; S[j] = S[i]; S[i] = t; } else if (S[j].score == S[i].score && strcmp(S[i].name, S[j].name)>0) { t = S[j]; S[j] = S[i]; S[i] = t; } else if (S[j].score == S[i].score && S[j].age < S[i].age && strcmp(S[j].name, S[i].name)==0) { t = S[j]; S[j] = S[i]; S[i] = t; } } } //输出 for(i=0; i<N; i++) printf("%s %d %d\n", S[i].name, S[i].age, S[i].score); } return 0; }
我是一个小垃圾,这题我做了很久,错了很多次。
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复