C语言,求大神解答,从键盘输入5名学生的信息,包含学号、姓名、数学成绩、英语成绩、C语言成绩……

【问题描述】从键盘输入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;
}

#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;
float max,min;  //定义两个变量
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;
}
}*/
//先求总分的最大值和最小值
max=min=fen[0];  //初始化
for(i=1;i<5;i++)
{
if(max<fen[i])
max=fen[i];
if(min>fen[i])
min=fen[i];
}
//输出
printf("max:\n");
for(i=0;i<5;i++)
{
if(fen[i] == max)
printf("%s %s %.1f\n",a[i].num,a[i].name,fen[i]);
}
printf("min:\n");
for(i=0;i<5;i++)
{
if(fen[i] == min)
printf("%s %s %.1f\n",a[i].num,a[i].name,fen[i]);
}
/*
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;
}

//运行结果
F:\c_work>a.exe
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

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答