#include<stdio.h>
#define N 10000
struct student
{
char id[10]; //准考证号
char name[9]; //姓名
float score[4]; //大小为4的数组,分别存储4门课程分数
float total; //总分
};
typedef struct student stuStru;
/*
@函数名称:input 入口参数 : stuStru s[]
@函数功能:学生信息录入,函数返回信息输入成功的学生人数
*/
int input (stuStru s[])
{
int n=-1,i;
printf("请按下列格式输入学生信息(首行输入q结束输入):\n");
printf("-----------------------------------------------------------\n");
printf("准考证号\t姓名\t语文\t英语\t综合\n");
do
{
n++;
scanf("%s",s[n].id);
if(s[n].id[0]=='q' || s[n].id[0]=='Q')
break;
scanf("%s",s[n].name);
for(i=0;i<4;i++)
scanf("%f",&s[n].score[i]);
}while(1);
return n;
}
/*
@函数名称:sum 入口参数 :stuStru *s,int n
@函数功能:求学生高考总分
*/
void sum(stuStru *s,int n)
{
int j;
stuStru *p=s;
while(p<s+n)
{
p->total=0;
for(j=0;j<4;j++)
p->total+=p->score[j];
p++;
}
}
/*
@函数名称:selectSort 入口参数:stuStru s[],int n
@函数功能:采用选择排序法对学生信息按总分由高到低排序
*/
void selectSort (stuStru s[],int n)
{
int i,j,maxIndex;
stuStru temp;
for (i=0;i<n-1;i++)
{
maxIndex=i;
for(j=i+1;j<n;j++)
{
if(s[j].total>s[maxIndex].total)
maxIndex=j;
}
if(i!=maxIndex)
{
temp=s[i];
s[i]=s[maxIndex];
s[maxIndex]=temp;
}
}
}
/*
@函数名称:print 入口参数:stuStru s[],int n
@函数功能:输出学生信息
*/
void print (stuStru *s,int n)
{
int i,j;
if(n>0)
{
printf("%-12s%-12s","准考证号","姓名"); //输出表头
printf("%-8s%-8s%-8s%-8s%-8s\n","语文","数学","英语","综合","总分");
printf("---------------------------------------------\n");
for(i=0;i<n;i++,s++)
{
printf("%-12s",s->id); //输出准考证号
printf("%-12s",s->name); //输出名字
for(j=0;j<4;j++)
{
printf("%-8.2f",s->score[j]);//输出成绩
}
printf("%-8.2f\n",s->total); //输出总分
}
}
}
int main()
{
stuStru s[N];
int n; //输入
n=input(s); //求和
selectSort(s,n); //按总分由高到低排序
print(s,n); //输出
return 0;
}