成绩排序
Posted 新生代黑马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了成绩排序相关的知识,希望对你有一定的参考价值。
题目描述
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
输入描述
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
输出描述
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序,然后输出学生信息
输入样例
3 abc 20 99 bcd 19 97 bed 20 97
输出样例
bcd 19 97 bed 20 97 abc 20 99
测试代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 typedef struct 6 { 7 char name[20]; 8 int score; 9 int age; 10 }STU; 11 12 int cmp(void const *a, void const *b) 13 { 14 if (((STU *)a)->score != ((STU *)b)->score) 15 { 16 return ((STU *)a)->score - ((STU *)b)->score; 17 } 18 if (strcmp(((STU *)a)->name, ((STU *)b)->name) != 0) 19 { 20 return (strcmp(((STU *)a)->name, ((STU *)b)->name) > 0); 21 } 22 return ((STU *)a)->age - ((STU *)b)->age; 23 } 24 25 int main() 26 { 27 STU stu[100]; 28 int n, i; 29 while (scanf("%d", &n) != EOF) 30 { 31 for (i = 0; i < n; i++) 32 { 33 scanf("%s%d%d", stu[i].name, &stu[i].score, &stu[i].age); 34 } 35 qsort(stu, n, sizeof(STU), cmp); 36 for (i = 0; i < n; i++) 37 { 38 printf("%s %d %d\n", stu[i].name, stu[i].score, stu[i].age); 39 } 40 } 41 return 0; 42 }
以上是关于成绩排序的主要内容,如果未能解决你的问题,请参考以下文章