题目
有n名学生的信息(包括学号、姓名和成绩),编写函数实现按成绩由高到低的顺序输出学生的信息。
输入格式:
输入一个正整数n(n<50),下面n行输入n个学生的信息,包括:学号、姓名、成绩。
输出格式:
输出从高到低排序后的学生信息,包括:学号、姓名、成绩。
输入样例:
在这里给出一组输入。例如:
3
101 Zhang 78
102 Wang 91
103 Li 85
输出样例:
102 Wang 91
103 Li 85
101 Zhang 78
#include<stdio.h>
struct Stu
{
int num;
char name[50];
int score;
};
int main()
{
struct Stu s[50], * a[50];
struct Stu* t, ** p;
int i,j;
int n;
scanf("%d", &n);
for (i = 0; i < n; ++i)
scanf("%d%s%d", &s[i].num, s[i].name, &s[i].score);
for (i = 0; i < n; ++i)
a[i] = &s[i];
for (i = 0; i < n-1; ++i)
{
p = a + i;
for (j = i + 1; j < n; ++j)
if ((*p)->score < a[j]->score)
p = a + j;
if (p != a + j)
{
t = *p;
*p = a[i];
a[i] = t;
}
}
for (i = 0; i < n; ++i)
printf("%d %s %d\n", a[i]->num, a[i]->name, a[i]->score);
return 0;
}