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

admin2019-07-10  43

问题 学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中。请编写函数fun,其功能是:按分数降序排列学生的记录,高分在前,低分在后。
    注意:部分源程序给出如下。
    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
    试题程序:
#include<stdio.h>
#define N 16
typedef struct
{
  char hum[10];
int s;
}STREC;
void fun(STREC a[])
{
}
void 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;
  fun(s);
  printf(“The data after sorted:
\n”);
    for(i=0;i<N;i++)
    {
    if(i%4==0)
    /*每行输出4个学生记录*/
    printf(“\n”);
    printf(“%s%4d”,s.num,
s.s);
    }
    printf(“\n”);
}

选项

答案void fun(STREC a[]) { int i,j; STREC t; for(i=1,i<N;i++) /*用冒泡法进行排序,进行N一1次比较*/ for(j=0;j<N一1;j++) /*在 每一次比较中要进行N一1次两两比较*/ if(a[j].s<a[j+1].s) {t=a[j];a[j]=a[j+1]; a[j+1]=t,) /*按分数的高低排列学生的记录,高分在前*/ }

解析 对N个数进行排序的算法很多,其中最简单的排序算法是冒泡算法。利用双层for循环嵌套和一个if判断语句来实现,外层循环用来控制需比较的轮数,内层循环用米控制两两比较。
转载请注明原文地址:https://kaotiyun.com/show/pZID777K
0

最新回复(0)