平均成绩排序 请大神帮忙看看那里错了
假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的 结构类型。输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息。如果 平均分相同,按输入的先后顺序排列。输入样例:在这里给出一组输入。例如:3
101 Zhang 78 87 85
102 Wang 91 88 90
103 Li 75 90 84
输出样例:在这里给出相应的输出。例如:
102 Wang 89.67
101 Zhang 83.33
103 Li 83.00
代码:
#include "stdio.h"
struct Student
{
int num;
char name[20];
int score[3];
float aver;
};
struct Student stud[50];//定义结构体数组
void average (struct Student stud[],int n)
{
int i,j,c[20];
float sum=0;
for(i=0;i<n;i++)
{
scanf("%d%s",&stud[i].num,stud[i].name);
for(j=0;j<3;j++)
scanf("%d",&stud[i].score[j]);
sum=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];
stud[i].aver=sum/3;
}
}
void sort(struct Student stud[],int n)//定义函数的括号内用结构体变量,不能用成员名
{
struct Student temp;//定义中间变量,使排序后的成绩所在的变量(包含姓名,学号)整体,在交换位置时全部交换
int i,j,k;
average(stud,n);
for(i=0;i<n-1;i++)//冒泡法
{
for(j=0;j<n-i-1;j++)
k=j+1;
if(stud[j].aver<stud[k].aver)
k=j;
if(k!=i)//将排序后的成绩所在的变量(包含姓名,学号)整体,进行全部交换
{
temp=stud[k];
stud[k]=stud[i];
stud[i]=temp;
}
}
}
int main()
{
int n,i;
scanf("%d",&n);
sort(stud,n);
for(i=0;i<n;i++)
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].aver);
}
return 0;
}