问答题
学生的记录由学号和成绩组成,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判断语句来实现,外层循环用来控制需比较的轮数,内层循环用来控制两两比较。