匿名用户
1级
2010-12-13 回答
#include
#define STUDENT 2
typedef struct tagSTU
{
char name[11] ;
char stunum[11] ;
float score1,score2,score3 ;
float total,aver ;
} STU;
void input(STU *stu, int num) //stu为学生数组的首地址,num为数组长度
{
int i ;
printf("请输入%d个学生的基本情况: \n",num) ;
printf("姓名 学号 成绩一 成绩二 成绩三\n") ;
for(i=0; i
{
scanf("%s%s%f%f%f",&stu[i].name,&stu[i].stunum,&stu[i].score1,
&stu[i].score2,&stu[i].score3) ;
}
}
float average(STU *stu, int num) //stu为学生数组的首地址,num为数组长度,返回总平均成绩
{
int i ;
float avertotal = 0 ;
for(i=0; i
{
stu[i].total = 0 ;
stu[i].total = stu[i].score1+stu[i].score2+stu[i].score3 ;
stu[i].aver = stu[i].total/3 ;
avertotal += stu[i].aver ;
}
return avertotal/num ;
}
void max(STU *stu, int num, STU *stuRev, int *stuRevNum) //stu为学生数组的首地址,num为数组长度
//stuRev表示要接收的数组,stuRevNum表示最终接收的个数,即最高成绩同学的个数(有可能不止一个同学)
{
STU temp[5] ;
float maxtotal = 0 ;
int i ,temp_index=0 ;
for(i=0; i
{
if(stu[i].total>maxtotal)
{
maxtotal = stu[i].total ;
temp[0] = stu[i] ;
temp_index = 0 ;
}
else if(stu[i].total==maxtotal)
{
temp[++temp_index] = stu[i] ;
}
}
for(i=0;i<=temp_index;i++)
{
stuRev[i] = temp[i] ;
}
*stuRevNum = temp_index+1 ;
}
void main()
{
STU stu[STUDENT] ;
STU stumax[STUDENT] ;
int stumax_num, i ;
float avertotal ;
input(stu,STUDENT) ;
avertotal = average(stu,STUDENT) ;
max(stu,STUDENT,stumax,&stumax_num) ;
//输出结果
printf("3门课总平均成绩: %4.2f\n",avertotal) ;
printf("最高分同学有%d个: \n",stumax_num) ;
printf("姓名 学号 成绩一 成绩二 成绩三 \n") ;
for(i=0; i
{
printf("%4s %4s %-4.2f %-4.2f %-4.2f\n",stumax[i].name,stumax[i].stunum,
stumax[i].score1,stumax[i].score2,stumax[i].score3) ;
}
}