用C语言编写程序,完成以下功能: (1) 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩

2024-06-25 22:23:17
推荐回答(3个)
回答1:

#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) ;
}
}

回答2:

jiadan

回答3:

输出3门课总平均成绩,以及最高分学生的数据 什么意思