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