题目描述
又是一次期中考。考完之后肯定少不了成绩的排名。可是面对这么多的成绩,老师也觉得累。于是向熟悉编程的你求助。计入排名的考试只有语文数学跟英语三门。按照平均分从高到低输出。
输入要求
先输入一个整数n,表示有n个学生。(0 < n < 300)
接下来n行,每行有4个数据,分别代表学号,语文成绩,数学成绩,英语成绩。
输出要求
按照平均分从大到小输出这n个学生的语文成绩、数学成绩、英语成绩。平均分相同时,按照学号的升序来。
输入样例
4 1023 88 75 65 1033 99 59 70 1187 77 82 83 1054 64 86 92
输出样例
1054 64 86 92 1187 77 82 83 1023 88 75 65 1033 99 59 70
提示
来源
NBU OJ
#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
int id;
int yw;
int sx;
int yy;
double ave;
}STUDENT;//构建结构体
int main()
{
int n,i,j;
scanf("%d",&n);
STUDENT stu[n],temp;
for(i=0;i<n;i++)
{
scanf("%d%d%d%d",&stu[i].id,&stu[i].yw,&stu[i].sx,&stu[i].yy);
stu[i].ave=(stu[i].yw+stu[i].sx+stu[i].yy)/3.0;
}//输入
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(stu[j].id>stu[j+1].id)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}//冒泡排序按学号升序
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(stu[j].ave<stu[j+1].ave)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}//按平均分降序
for(i=0;i<n;i++)
{
printf("%d %d %d %d\n",stu[i].id,stu[i].yw,stu[i].sx,stu[i].yy);
}//输出
return 0;
}