题目描述
有一学生成绩表,包括学号、姓名、3门课程成绩。请按要求排序输出:若输入1,则按第1门课成绩降序输出成绩表,若输入为i(1<=i<=3),则按第i门课成绩降序输出成绩表。
输入
首先输入一个整数n(1<=n<=100),表示学生人数;
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。
最后一行输入一个整数i,表示要求按第i门课成绩降序排序输出,若该门课成绩相同,则按学号升序。
输出
输出按第i门课降序排序的结果,格式见样例。
样例输入
3
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
1
样例输出
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student
{
char ID[20];
char name[20];
int s[4];
}stud;
int main(void)
{
int n, i, j, k, h;
stud stu[110], ch;
scanf("%d", &n);
for(i = 0; i < n; i++)
{
scanf("%s ", stu[i].ID);
scanf("%s ", stu[i].name);
for(j = 0; j < 3; j++)
{
scanf("%d", &stu[i].s[j]);
}
}
scanf("%d", &k);
k = k-1;
for(i = 0; i < n; i++)
{
for(j = (i+1); j < n; j++)
{
if(stu[i].s[k] < stu[j].s[k])
{
ch = stu[i];
stu[i] = stu[j];
stu[j] = ch;
}
if(stu[i].s[k] == stu[j].s[k])
{
if(strcmp(stu[i].ID, stu[j].ID) > 0)
{
ch = stu[i];
stu[i] = stu[j];
stu[j] = ch;
}
}
}
}
for(i = 0; i < n; i++)
{
printf("%s ", stu[i].ID);
printf("%s ", stu[i].name);
printf("%d %d %d", stu[i].s[0], stu[i].s[1], stu[i].s[2]);
printf("\n");
}
return 0;
}