已知学生的记录由学号和成绩组成。N名学生的数据已在主函数中放入结构体中输出S中。请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前
结构体排序比较结构体元素交换结构体
#include<stdio.h>
struct stu
{
int num;
int score;
};
void fun(struct stu t[],int n)
{
int j,k;
for(k=0; k<n-1; k++)
{
for(j=0; j<n-k-1; j++)
{
if(t[j].score<t[j+1].score)
{
struct stu tem=t[j];
t[j]=t[j+1];
t[j+1]=tem;
}
}
}
}
int main()
{
struct stu t[5]= {1,56,2,66,3,45,4,68,5,60};
int j;
for(j=0; j<5; j++)
{
printf("学号:%d 分数:%d \n",t[j].num,t[j].score);
}
fun(t,5);
printf("排序后\n");
for(j=0; j<5; j++)
{
printf("学号:%d 分数:%d \n",t[j].num,t[j].score);
}
return 0;
}
#include <stdio.h>
#define N 16
typedef struct
{
char num[10];
int s;
}STREC;
int fun (STREC a[ ])
{
int i,j;
STREC tem;
for (i = 0; i < N - 1; i ++)
{
for (j = 0; j < N - i -1; j ++)
{
if(a[j].s < a[j+1].s)
{
tem = a[j];
a[j] = a[j+1];
a[j+1] = tem;
}
}
}
return 0;
}
int main ()
{
STREC s[N]={{"GA005",88},{"GA003",64},
{"CA002",77},{"GA004",89},{"GA001",54},
{"GA007",72},{"GA008",72},{"GA006",65},
{"GA015",83},{"GA013",95},{"GA012",55},
{"GA014",68},{"GA01l",78},{"GA017",53},
{"GA018",92},{"GA016",82}};
int i;
FILE *out;
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[i].num,s[i].s);
}
printf("\n");
out=fopen("out21.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);
return 0;
}
运行结果: