本文主要是介绍对结构体进行排序,根据结构体中某一数据进行排序后对其对应的整个结构体变量进行排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 2
struct ST{char name[10];int num;int age;char addr[5];int s[3];float ave;}stu[M],temp;void save()
{
//借助一个中间变量进行实现int i,j,k;FILE *fp;
//对文件操作,写入if((fp=fopen("t.dat","wb"))==NULL){printf("error");exit(0);}//只输出第1,3,5,7,9个学生的信息
/*for(i=0;i<M;i+=2)
{
// fseek(fp,i*sizeof(struct s),0);//移动文件标志fread(&stu[i],sizeof(struct s),1,fp);printf("%-10s %4d %4d %-15s\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
}fclose(fp);*///实现按学生的平均分的高低进行排序,这里用选择排序来实现吧
for(i=0;i<M-1;i++)
{k=i;for(j=i+1;j<M;j++)if(stu[j].ave>stu[k].ave)k=j;//注意这块进行交换的是结构体数组,不是单个比较的数据项temp=stu[i];stu[i]=stu[k];stu[k]=temp;
}
//排序好的写入磁盘for(i=0;i<M;i++){if((fwrite(&stu[i],sizeof(struct ST),1,fp))!=1)printf("file write error");}//改写对文件的操作形式,读
if((fp=fopen("t.dat","rb"))==NULL)
{printf("error");exit(0);
}
printf("输出排序好的顺序:\n");
for(i=0;i<M;i++)
{fread(&stu[i],sizeof(struct ST),1,fp);printf("%-10s %4d %4d %-15s %4f\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr,stu[i].ave);
}fclose(fp);
}//主函数int main()
{//FILE *fp;
int i,k=0,j;
float sum=0;
printf("输入学生的数据:\n");
for(i=0;i<M;i++)
{ printf("请输入第%d学生的学号和姓名(分别用空格隔开)\n",i+1);scanf("%s%d%d%s",stu[i].name,&stu[i].num,&stu[i].age,stu[i].addr);sum=0;for(j=0;j<3;j++){printf("请输入第%d学生的第%d门课程成绩(分别用空格隔开)\n",i+1,j+1);scanf("%d",&stu[i].s[j]);sum+=stu[i].s[j];}
//计算的是每个学生的平均成绩//要求读写到磁盘中,可以在结构体中定义一个ave属性,然后用fwrite一块写入磁盘。stu[i].ave=sum/3;
}save();return 0;
}
作几点说明:对结构体中的某一数据进行排序,然后其他的数据跟着变化,其实就是让你对让当前这个结构体进行排序。
所以其中的temp定义成ST.
若有不足,请指正!
这篇关于对结构体进行排序,根据结构体中某一数据进行排序后对其对应的整个结构体变量进行排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!