外国茶网站建设日照网络推广
题目描述
有一学生成绩表,包括学号、姓名、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 <stdlib.h>
typedef struct student
{long long num;char name[40];int grade[3];
} STUDENT;
int main()
{struct student s[100];struct student t;int n,i,j,m;scanf("%d",&n);for(i=0; i<n; i++){scanf("%lld",&s[i].num);scanf(" %s",s[i].name);scanf("%d",&s[i].grade[0]);scanf("%d",&s[i].grade[1]);scanf("%d",&s[i].grade[2]);}scanf("%d",&m);m--;for(j=1; j<n; j++){for(i=n-1; i>=j; i--){if(s[i].grade[m]>s[i-1].grade[m]){t=s[i];s[i]=s[i-1];s[i-1]=t;}}}for(i=0; i<n; i++)printf("%lld %s %d %d %d\n",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2]);return 0;
}