タイトル
学生の情報(学生番号、氏名、学年など)がn個あるので、学生の情報を高い順に出力する関数を記述します。
入力フォーマット:
正の整数n(n <50)を入力し、下のn行にn人の学生の情報(学生番号、名前、成績など)を入力します。
出力フォーマット:
学生ID、名前、成績など、学生の情報を高から低に並べて出力します。
入力例:
ここに入力のセットがあります。たとえば、次のとおりです。
3
101張78
102王91
103李85
出力例:
102王91
103李85
101張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;
}