根据结构体中某一组成部分对结构体数组的排序

在按照某一成分对结构体进行排序时,其基本思路和数组排序一样,可以利用指针进行简化,也可以直接利用结构体名进行排序,如下实例,是利用平均分数对学生这一结构体进行排序的

1、定义结构体

struct student//定义结构体 
{
	int num;
	char name[10];
	int score[3];
	float ave;
 }stu[5];

2、输入数据

int i,j,sum,t;
	FILE *fp;
	struct student p,temp,re[6];
	for(i=0;i<5;i++)//结构体赋值 
	{
		printf("输入第%d条记录\n",i+1);
		scanf("%d,%s",&stu[i].num,stu[i].name);
		printf("请输入三门课成绩\n");
		scanf("%d,%d,%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
		sum=0;
		sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
		stu[i].ave=sum/3.0;
	}

3、排序

for(i=0;i<4;i++)//文件排序 
    for(j=i+1;j<5;j++)
    if(stu[i].ave>stu[j].ave)
   	{
    	temp=stu[i];
    	stu[i]=stu[j];
    	stu[j]=temp;
	}		
	if((fp=fopen("stu_sort.txt","w"))==NULL)
	{
		printf("cannot open stud.txt\n");
		exit(0);
	}
	for(i=0;i<5;i++)
 	fwrite(&stu[i],sizeof(struct student),1,fp);	
    fclose(fp);	
	if((fp=fopen("stu_sort.txt","r"))==NULL)
	{
		printf("cannot open stud.txt\n");
		exit(0);
	}
		for(i=0;i<5;i++)
	{
		fread(&stu[i],sizeof(struct student),1,fp);	
        printf("%d,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
	}	
    fclose(fp);

猜你喜欢

转载自blog.csdn.net/yhxiaohao/article/details/80030421
今日推荐