问答题 1.  学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组s中,请编写函数proc(),它的功能是:把分数最高的学生数据放在h所指的数组中。注意:分数最高的学生可能不止一个,函数返回分数最高学生的人数。
    注意:部分源程序如下。
    请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
    试题程序:
    #include<stdio.h>
    #define M 16
    typedef struct
    {  char num[10];
    int s;
    }
    STREC;
    int proc(STREC*a,STREC*b)
    {
    }
    void main()
    {
    STREC stu[M]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};
    STREC h[M];
    int i,n;
    n=proc(stu,h);
    printf("The%d highest score:\n",n);
    for(i=0; i<n; i++)
    printf("%s%4d\n",h[i].num,h[i].s);
    //输出最高分学生的学号和成绩
    printf("\n");
    }
【正确答案】int proc(STREC*a,STREC*b)
   {
   int i,j=0,max=a[0].s; //max存放最高分数
   for(i=0; i<M; i++)
   if(max<a[i].s)max=a[i].s; //把分数最高的学生数据放在h所指的数组中
   for(i=0; i<M; i++)
   if(max==a[i].s)b[j++]=a[i]; //分数最高的学生可能不止一个
   return j;
   }
【答案解析】 要得到分数最高的学生数据,首先应检查每一个学生的数据,得到学生的最高成绩。成绩最高的学生不止一个,将每一个学生的成绩与最高成绩比较,得出成绩最高学生的个数,将成绩最高的学生记录放在指定数组中通过形参返回。成绩最高的学生个数由函数值返回给主函数。