问答题 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。 注意:部分源程序存在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #define N 16 typedef struct { char num[10]; int s; } STREC; void fun(STREC a[]) { STREC tmp; inti,j; for(i=0;i<N;i++) for(j=i+1;j<N;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("c://test//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); }
【正确答案】if(a[i].s>a[j].s) { tmp=a[j];a[j]=a[i];a[i]=tmp; }
【答案解析】[解析] 对N个数进行排序的算法很多,其中最简单的排序算法是冒泡算法。利用双层for循环嵌套和一个if判断语句来实现,外层循环用来控制需比较的轮数,内层循环用来控制两两比较。