资源描述:
《对结构体排序(用c语言实现)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、/********************************************实践发现用qsort()对数组排序和对结构体排序其实并*没有什么明显的不同,将一般数组换为结构体数组即可,同*时在排序辅助函数中作相似的变化即可.*同时也发现,程序中的N值似乎不能很大,如N不到52000本人的*小本就OVER了,程序直接警告退出.*?出现的问题是:当N取值为51699时,程序运行一点点就自动结束了,*即程序没有运行完就结束了,也没有结束,反正挺正常的,不知道什么原因.?*经反复验证,在本机上N的最大取值为51698.*************************
2、******************/#include#include#include#defineN51698typedefstructstudent{intnum;//由N自动编号.intsex;//非0即1.intmath;//数学成绩.intenglisgh;//英语成绩.intsum;//成绩总和.}stu;/***********************************按总分降序排列.*此段程序对于qsort()函数来说是必须的.**********************************/
3、intCMP(conststu*a,conststu*b){if(a->sum>b->sum)return-1;elseif(a->sum==b->sum)return0;elsereturn1;}/***************************************每个学生的各科成绩由系统随机生成,学生数*N可由上面设定.*本程序既打印到屏幕上又生成了一个文本文件stu.txt.*结构体排序将在主函数里实现.**************************************/intmain(){stuis[N];longi,rank,temp;//分
4、别为控制变量和名次,上一个人的名次.FILE*fp;char*str="numsexmathenglishsum";//字符串.char*str1="ranknumsexmathenglishsum";fp=fopen("stu.txt","w");//以只写方式打开文件.srand((unsigned)time(NULL));//随机种子.for(i=0;i5、is[i].englisgh=rand()%100;//英语成绩.is[i].sum=is[i].math+is[i].englisgh;//计算总成绩.}printf("%s",str);fprintf(fp,"%s",str);//将提示字符串写入文件.for(i=0;i6、s[i].math,is[i].englisgh,is[i].sum);}printf("");//打印空行.fprintf(fp,"%c",'');qsort(is,N,sizeof(stu),CMP);//结构体排序.printf("%s",str1);//打印提示串.fprintf(fp,"%s",str1);for(i=0;i0)//判断名次.{if(is[i].sum==is[i-1].sum)rank=temp;//如果成绩相同,则他们名次相同.elserank=i+1;//否则他的名次就与他是第几个被打印有关.}el
7、serank=i+1;//第一个成绩毫无疑问是第1名.temp=rank;//记得保存当前人的名次,以备下一个参考.printf("%d%ld%d%d%d%d",rank,is[i].num,is[i].sex,is[i].math,is[i].englisgh,is[i].sum);fprintf(fp,"%ld%d%d%d%d%d",rank,is[i].num,is[i].sex,is[i].math,is[i].englisgh,is[i].sum);}fclose(fp);//关闭文件.return0;}