#include<stdio.h>
#include<string.h>
struct student
{ long int num;
char name[8];
double score[3];
};
struct arrayst
{
struct student stu;
double nums;
};
int main()
{
void input(struct arrayst a[],int x);
void output(struct arrayst arr[],int x);
void scoresort(struct arrayst arr[],int x);
arrayst a[100];
int n;
while(1)
{
printf("请输入一个在5到100之间的数:");
scanf("%d",&n);
if(n>=5 && n<=100)
break;
}
printf("NUM MAME SCORE1 SORE2 SCORE3\n");
input(a,n);//建立学生成绩表
printf("Before sort:\n");
printf("NUM MAME SCORE1 SORE2 SCORE3 AVERAGE\n");
output(a,n);//输出学生成绩表
scoresort(a,n);//按平均成绩从高到低排序学生成绩表
printf("After Sort:\n");
printf("NUM MAME SCORE1 SORE2 SCORE3 AVERAGE\n");
output(a,n);//输出学生成绩表
return 0;
}
void input(struct arrayst a[],int x)
{ int i;
for(i=0;i<x;i++)
{
scanf("%d%s%lf%lf%lf",&a[i].stu.num,&a[i].stu.name,&a[i].stu.score[0],&a[i].stu.score[1],&a[i].stu.score[2]);
}
}
void output(struct arrayst arr[],int x)
{ float aver;
int i;
for(i=0;i<x;i++)
{
aver=(arr[i].stu.score[0]+arr[i].stu.score[1]+arr[i].stu.score[2])/3.0;
printf("%-6d%-7s%-9.0lf%-8.0lf%-9.0lf%-.4f\n",arr[i].stu.num,arr[i].stu.name,arr[i].stu.score[0],arr[i].stu.score[1],arr[i].stu.score[2],aver);
}
}
void scoresort(struct arrayst arr[],int x)
{ float aver[100];
float temp;
double te;
char tem[20];
int i,j,k,r;
for(i=0;i<x;i++)
{
aver[i]=(arr[i].stu.score[0]+arr[i].stu.score[1]+arr[i].stu.score[2])/3.0;
}
for(i=0;i<x-1;i++)
{ k=i;
for(j=i+1;j<x;j++)
if(aver[j]>aver[k])
k=j;
temp=arr[k].stu.num;arr[k].stu.num=arr[i].stu.num;arr[i].stu.num=temp;
strcpy(tem,arr[k].stu.name);strcpy(arr[k].stu.name,arr[i].stu.name);strcpy(arr[i].stu.name,tem);
for(r=0;r<3;r++)
{te=arr[k].stu.score[r];arr[k].stu.score[r]=arr[i].stu.score[r];arr[i].stu.score[r]=te;}
}
}
num为2的学生应该排最后一位,测试出来却在中间的位置,主函数是给定的不能变动。