【问题描述】从键盘输入5名学生的信息,包含学号、姓名、数学成绩、英语成绩、C语言成绩,求每个学生3门课程的总分,输出总分最高和最低的学生学号、姓名和总分。程序以文件名sy8_7.c保存。
【输入形式】输入五行,每行分别输入学号、姓名、数学成绩、英语成绩、C语言成绩。【输出形式】第一行输出max:,换行输出总分最高的同学学号、姓名和总分(输出所有最高分的同学)。换行输出min:,接下来换行输出总分最低的同学学号、姓名和总分(输出所有最低分的同学)。(总分保留一位小数)
【样例输入】
001 Tom 80 85 90
002 Mary 95 85 75
003 Jack 70 75 80
004 Jim 78 91 82
005 Kitty 60 100 74
【样例输出】
max:
001 Tom 255.0
002 Mary 255.0
min:
003 Jack 225.0
以下是我的代码,求人帮忙改改,就是排序有问题,不知道怎么改。
#include <stdio.h>
typedef struct stu
{
char num[10];
char name[10];
float s;
float e;
float c;
}STU;
STU a[5];
int main()
{
int i,j;
float fen[5],y;
STU x;
for(i=0;i<5;i++)
{
scanf("%s %s %f %f %f",a[i].num,a[i].name,&a[i].s,&a[i].e,&a[i].c);
fen[i]=a[i].s+a[i].e+a[i].c;
}
for(i=0;i<=3;i++)
{
for(j=0;j<=3-i;j++)
if(fen[j]>fen[j+1])
{
x=a[i];
a[i]=a[j];
a[j]=x;
y=fen[i];
fen[i]=fen[j];
fen[j]=y;
}
}
printf("max:\n");
if(fen[4]==fen[3])
{
printf("%s %s %.1f\n",a[3].num,a[3].name,fen[3]);
printf("%s %s %.1f\n",a[4].num,a[4].name,fen[4]);
}
else if(fen[4]>fen[3])
printf("%s %s %.1f\n",a[4].num,a[4].name,fen[4]);
printf("min:\n");
if(fen[0]<fen[1])
printf("%s %s %.1f\n",a[0].num,a[0].name,fen[0]);
else if(fen[0]==fen[1])
{
printf("%s %s %.1f\n",a[0].num,a[0].name,fen[0]);
printf("%s %s %.1f\n",a[1].num,a[1].name,fen[1]);
}
return 0;
}