题目描述:
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
输入
第一行为n (0 < n < 20),表示班里的学生数目;
接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。
输出
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
编程代码:
#include<stdio.h>
#include<string.h>//*用于引用字符串比较函数*//
struct student //引用结构体*//
{
char name[21];
int sore;
};
void sortstudents(struct student *stu, int n)//*排序函数*//
{
struct student temp;//*将temp归类为结构体一样*//
for(int i=0; i<n; i++)
{
for(int j=0; j<n-1; j++)
{
if(stu[j].sore<stu[j+1].sore)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
else if(stu[j].sore==stu[j+1].sore)//*在成绩相同的情况下,比较名字字典序数小的*//
{
if(strcmp(stu[j].name,stu[j+1].name)>0)//*用字符串比较函数strcmp,来比较名字序数,让小的在前*//
{
temp=stu[j+1];
stu[j+1]=stu[j];
stu[j]=temp;
}
}
}
}
for(int i=0; i<n; i++)
{
printf("%s %d\n", stu[i].name, stu[i].sore);
}
}
int main()
{
struct student stu[21];
int n,i;
scanf("%d",&n);
for(i=0; i<n; i++){
scanf("%s %d",stu[i].name, &stu[i].sore);
}
sortstudents(stu, n);
return 0;
}