#include<string.h>
#include<malloc.h>
typedef struct stu //壹個學生的檔案
{
char num[20];//學號
char name[20];//姓名
float score[5]; //成績,前三門是單科成績,第四個是總分,最後壹個是平均分
}student;
student s[10]; //所有學生的信息
void main()
{
void init();//初始化函數申明
void sort();//排序函數申明
void print();//輸出函數申明
init();
sort();
print();
}
void init()//初始化所有學生的檔案
{
int i,j;
for(i=0;i<10;i++) //逐個鍵入學生的信息
{
printf("請輸入壹學生的學號:");
scanf("%s",s[i].num);
printf("請輸入該學生的姓名:");
scanf("%s",s[i].name);
printf("請輸入該學生的三門成績:");
s[i].score[3]=0;
for(j=0;j<3;j++)
{
scanf("%f",&s[i].score[j]);
s[i].score[3]+=s[i].score[j]; //求總分
}
s[i].score[4]=s[i].score[3]/3; //求平均分
}
printf("學生檔案建立成功!\n");
}
void sort()
{
int i,j,k;
char str[20];
float temp;
for(i=0;i<9;i++) //主循環,進行排名
for(j=i+1;j<10;j++)
if(s[j].score[3]>s[i].score[3])
{
strcpy(str,s[i].num); //交換學號
strcpy(s[i].num,s[j].num);
strcpy(s[j].num,str);
strcpy(str,s[i].name); //交換姓名
strcpy(s[i].name,s[j].name);
strcpy(s[j].name,str);
for(k=0;k<5;k++) //交換成績
{
temp=s[i].score[k];
s[i].score[k]=s[j].score[k];
s[j].score[k]=temp;
}
}
}
void print()
{
int i;
for(i=0;i<10;i++)
printf("%s %s %.1f %.1f %.1f %.1f %.1f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].score[4]