成绩排序——升级版
2018-03-11 19:38
176 查看
题目描述
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。输入描述:
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。 每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
输出描述:
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。 然后输出学生信息,按照如下格式: 姓名 年龄 成绩 学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。
#include<stdio.h> #include<string.h> struct Student{ char name[100]; int age; int score; }buf[1000]; void Sort(struct Student buf[],int n){ int i,j; struct Student temp; for ( i = 0 ; i < n ; i++){ for ( j = 1; j < n - i; j++){ if ( buf[j].score < buf[j-1].score || (buf[j].score == buf[j-1].score && strcmp(buf[j].name,buf[j-1].name)<0)|| (buf[j].score == buf[j-1].score &&strcmp(buf[j].name,buf[j-1].name)==0 && buf[j].age < buf[j-1].age)){ temp = buf[j]; buf[j]=buf[j-1]; buf[j-1]=temp; } } } } int main(){ int n,i; while (scanf("%d",&n)!=EOF){ for (i = 0;i<n;i++){ scanf("%s %d %d",&buf[i].name,&buf[i].age,&buf[i].score); } Sort(buf,n); for(i = 0;i < n;i++){ printf("%s %d %d\n",buf[i].name,buf[i].age,buf[i].score); } } }
相关文章推荐
- 使用指针实现学生成绩的录入,求最高分最低分、平均值和排序
- 第十五周项目3-带成绩的姓名排序(按姓名升序排序)
- 从键盘上输入以下的数据:"TOM:89|JERRY:90|TONY:95",数据格式为“姓名:成绩|姓名:成绩|姓名:成绩”,对输入的内容按成绩进行排序,并将结果按成绩由高到低排序。
- 九度-1196-成绩排序
- 指针冒泡算法====学生成绩的排序
- 结构体案例之学生成绩输入及排序
- 15-07-08 数组--球员成绩排序
- 题目1196:成绩排序
- 九度oj 题目1061:成绩排序
- 1142 成绩排序
- C语言:将结构体数组的成绩按照从小到大进行排序。
- 按成绩排序
- 九度OJ1061成绩排序
- 成绩排序
- 题目2:成绩排序
- 第14周项目2-带姓名的名单(1、按成绩排序)
- OJ题:成绩排序
- 【九度OJ】1196:成绩排序
- C语言,有5名学生保存在结构体数组中,编程按学生的成绩升序排序,按学生的姓名降序排序,按年龄从低到高排序
- 查询课程编号以'c05'开头,被3名及以上学生选修且期末成绩的平均分高于75分的课程号、选修人数和期末成绩平均分,并按平均分降序排序