c语言 学生成绩排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
50 学生成绩排序
成绩: 10 / 折扣: 0.8
大家参加了期末考试,成绩出来后老师要对 n 个学生进行成绩汇总和排序。要求程序按成绩降序进行排序。在排序过程中对于成绩相同的学生,要按照输入数据的顺序进行排列。例如:有5名学生的成绩:
zhang1,90
zhang2,91
zhang3,99
zhang4,91
zhang5,98
则排序结果应该为:
zhang3,99
zhang5,98
zhang2,91
zhang4,91
zhang1,90
请注意例题中“zhang2”和“zhang4”的排列顺序。
输入:
第一行为将要输入的学生数量n
从第二行起后面连续 n 行数据,每行为一名学生的姓名(长度不超过20个字符,不包括空格),考试成绩(int)
输出:
排序后的结果。每行为一名学生的姓名和成绩。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例 1
以文本方式显示
1.5?
2.zhang1,90?
3.zhang2,91?
4.zhang3,99?
5.zhang4,91?
6.zhang5,98?
以文本方式显示
1.zhang3,99?
2.zhang5,98?
3.zhang2,91?
4.zhang4,91?
5.zhang1,90?
1秒
64M
0
测试用例 2
以文本方式显示
1.5?
2.zhang31,90?
3.zhang51,90?
4.zhang2,90?
5.zhang42,90?
6.zhang1,90?
以文本方式显示
1.zhang31,90?
2.zhang51,90?
3.zhang2,90?
4.zhang42,90?
5.zhang1,90?
1秒
64M
0
测试用例 3
以文本方式显示
1.1?
2.wang,100?
以文本方式显示
1.wang,100?
1秒
64M
0
开启时间
2012年05月 21日 星期一 12:00
折扣时间
2012年05月 30日 星期三 23:55
关闭时间
2012年06月3日 星期日 23:55
允许迟交: 是
#include
#include
#include
typedef struct student
{
int score;
char name[20];
}student;
void swap(student * s1,student * s2)
{
char nametemp[20];
strcpy(nametemp,s1->name);
strcpy(s1->name,s2->name);
strcpy(s2->name,nametemp);
int temp;
temp=s1->score;
s1->score=s2->score;
s2->score=temp;
}
void sort(student stu[],int n)
{
int i,j;
for(i=0;i
if(stu[j].score
swap(&stu[j],&stu[j+1]);
}
else if(stu[j].score==stu[j+1].score)
{
if(strcmp(stu[j].name,stu[j+1].name)>0)
{
swap(&stu[j],&stu[j+1]);
}
}
}
}
void input(student * s)
{
char string[30];
gets(string);
int n,i,j;
n=strlen(string);
for(i=0;i
if(string[i]==','){s->name[i]='\0';break;}
s->name[i]=string[i];
}
s->score=0;
int temp;
j=n-(i+1)-1;
for(i++;i
temp=(int)string[i]-48;
s->score= s->score+ temp *(int)pow(10.0,j);
}
}
void main()
{
int n,i;
student stu[20];
scanf("%d\n",&n);
for(i=0;i
input(&stu[i]);
}
sort(stu,n);
for(i=0;i
printf("%s,%d\n",stu[i].name,stu[i].score);
}
}