问答题 1.  学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc(),其功能是:按分数的高低排列学生的记录,高分在前。
    注意:部分源程序如下。
    请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
    试题程序:
    #include<stdio.h>
    #define M 16
    typedef struct
    {
    char num[10];
    int s;
    }
    STREC:
    void proc(STREC a[])
    {
    int i,j;
    STREC t;
    for(i=1;i<M;i++) /*用冒泡法按从高到低排序*/
    for(j=0;j<M-1;j++)
    if(a[j].s<a[j+1].s)/*按分数的高低排列学生的记录,高分在前*/
    {t=a[j];a[j]=a[j+1];a[j+1]=t;}
    }
    void main()
    {
    STREC stu[M]={{"GA005",85},{"GA003",76},
    {"GA002",69},{"GA004",85},{"GA001",91},
    {"GA007",72},{"GA008",64},{"GA006",87},
    {"GA015",85},{"CA013",91},{"GA012",64},
    {"GA014",91},{"CA011",66},{"GA017",64},
    {"GA018",64},{"GA016",72}};
    int i;
    proc(stu);
    printf("The data after sorted: \n");
    for(i=0;i<M;i++)
    {
    if(1%4==0)
    //每行输出4个学生记录
    printf("\n");
    printf("%s%4d",stu[i].num ,stu[i].s);
    }
    printf("\n");
    }
【正确答案】void proc(STREC a[])
   {
   int i,j;
   STREC t;
   for(i=1;i<M;i++)    //用冒泡法按从高到低排序
   for(j=0;j<M-1;j++)
   if(a[j].s<a[j+1].s)    //按分数的高低排列学生的记录,高分在前
   {t=a[j];a[j]=a[j+1];a[j+1]=t;}
   }
【答案解析】 要按分数的高低排列学生的记录,可以使用冒泡排序法。将每一个学生的成绩与其他学生的成绩比较,将不符合要求的记录交换位置。