编程题

学生的记录由学号和成绩组成, N 名学生的数据已在主函数中敲入结构体数组 s 中, 请编写函数 fun, 它的功能是: 按分数的高低排列学生的记录, 高分在前。注意: 部分源程序给出如下。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。

/**********code.c**********/
#include <stdio.h>
#define N 16
typedef struct
{
   char num[10];
   int s;
}STREC;
void fun( STREC a[] )
{
   STREC tmp;
   int i,j;
   for(i=1; i<N; i++)
      for(j=0; j<N-1; j++)
      {
         /* 请按题目要求, 完成一下代码*/
      }
}
main()
{
   STREC s[N]={{"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}};
   int i;
   FILE *out ;
   fun(s);
   printf("The data after sorted :\n");
   for(i=0;i<N; i++)
   {
      if((i)%4==0 )printf("\n");
      printf("%s %4d ",s[i].num,s[i].s);
   }
   printf("\n");
   out=fopen("out.dat","w");
   for(i=0;i<N; i++)
   {
      if( (i)%4==0 && i) fprintf(out, "\n");
      fprintf(out, "%4d ",s[i].s);
   }
   fprintf(out,"\n");
   fclose(out) ;
}
/**********-code.c**********/
/**********indat**********/
/**********-indat**********/
/**********outdat**********/
    91      91       91       87
    85      85       85       76
    72      72       69       66
    64      64       64       64
/**********-outdat**********/

【正确答案】

if(a[i].s>a[j].s)
{
   tmp=a[j];
   a[j]=a[i];
   a[i]=tmp;
}

【答案解析】

对 N 个数进行排序的算法很多, 其中最简单的排序算法是冒泡算法。 利用双层 for 循环嵌套和一个if 判断语句来实现, 外层循环用来控制需比较的轮数, 内层循环用来控制两两比较。