问答题
1. 学生的记录由学号和成绩组成,M名学生的数据已通过主函数存入结构体数组stu中,请编写函数proc(),该函数的功能是:把高于等于平均分的学生数据放在b所指的数组中,把低于平均分的学生数据放在c所指的数组中,高于等于平均分的学生人数通过形参n传回,低于平均分的学生人数通过形参m传回,平均分通过函数值返回。
注意:部分源程序如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序: #include<stdio.h>
#define M 12
typedef struct
{ char num[10];
double s;
}STREC;
double proc(STREC *stu,STREC *b,STREC *c,int*n,int*m)
{
}
void main()
{
STREC stu[M]={{"GA05",65},{"CA03",86},
{"GA02",76},{"GA04",95},{"GA01",93},
{"GA07",78},{"GA08",68},{"GA06",88},
{"GA09",60},{"GA11",54},{"GA12",56},
{"GA10",98}};
STREC h[M],1[M];
int i,m,n;
double ave;
ave=proc(stu,h,l,&n,&m);
printf("The%d student data which is
higher than%7.3f: \n",n,ave);
for(i=0;i<n;i++)
printf("%s%4.1f\n",h[i].num,
h[i].s);
printf("\n");
printf("The%d student data which is lower
than%7.3f:\n",m,ave);
for(i=0;i<m;i++)
printf("%s%4.1f\n",l[i].num,
l[i].s);
printf("\n");
}
【正确答案】double proc(STREC *stu, STREC *b, STREC *c, int*n,int *m)
{
int i;
double av=0.0;
*n=0;
*m=0;
for(i=0;i<M;i++)
av=av+stu[i].s;//求其平均分av
av=av/M;
for(i=0;i<M;i++)
if(av<=stu[i].s)//把高于等于平均分的学生
的数据放在b所指的数组中
{
b[*n]=stu[i];
*n=*n+1;//学生人数通过形参n传回
}
else
{ //低于平均分的学生的数据放在c所指的数
组中
c[*m]=stu[i];
%m=*m+1;//学生人数通过形参m传回
}
return av;//把平均数返回给主函数
}
【答案解析】 要得到高于、等于和低于平均分的学生的数据,首先,要算出所有学生的平均成绩;然后,将所有学生的成绩与平均成绩比较;最后,将高于、等于和低于平均分的学生的记录分别存放在数组b和c中,并将其人数作为形参返回给主函数。