题目描述:
有N个学生的数据,将学生数据按成绩从低到高排序,如果成绩相同则按姓名字符的字母序依次排序,如果姓名的字母序也相同则按照学生的年龄从小到大排序,并输出N个学生排序后的信息。
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩
3
zhao 19 90
qian 20 90
sun 19 100
样例输出:
qian 20 90
zhao 19 90
sun 19 100
代码实现:
#include <stdio.h> #include <string.h> typedef struct student { char name[100]; int age; int score; } studInfo; void main() { studInfo arr[1000]; studInfo temp;//需要用到交换,就定义一个这种类型的变量,这是没想到的 int i, j, n; while(~scanf("%d", &n))//题干中出现多组数据 { for(i = 0; i < n; i++) { scanf("%s%d%d", &arr[i].name, &arr[i].age, &arr[i].score); } for(i = 0; i < n-1; i++)//冒泡排序法 { for(j = 0; j < n-1-i; j++) { if(arr[j].score > arr[j+1].score) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } else if(arr[j].score == arr[j+1].score) { if(strcmp(arr[j].name,arr[j+1].name) > 0) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } else if(strcmp(arr[j].name,arr[j+1].name) == 0) { if(arr[j].age > arr[j+1].age) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } } } for(i = 0; i < n; i++) { printf("%s %d %d\n", arr[i].name, arr[i].age, arr[i].score); } } /*strcmp(str1,str2)比较函数需要头文件string.h,左大于右,则返回值大于0 左小于右返回值小于0,相等则返回0 需要交换结构体中的数据,就定义那种类型的一个变量,然后进行交换操作 */
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:864 |
淘淘的名单 (C语言代码)浏览:1045 |
WU-整除问题 (C++代码)浏览:559 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:661 |
WU-C语言程序设计教程(第三版)课后习题11.12 (C++代码)(想学链表的小伙伴可以看看)浏览:853 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:570 |
矩阵加法 (C语言代码)浏览:1653 |
1048题解(读入回车问题)浏览:534 |
C二级辅导-进制转换 (C语言代码)浏览:641 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:317 |