对结构体排序(用C语言实现).docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对结构体排序(用C语言实现)

/******************************************* *实践发现用qsort 对数组排序和对结构体排序其实并 *没有什么明显的不同,将一般数组换为结构体数组即可,同 *时在排序辅助函数中作相似的变化即可. *同时也发现,程序中的N值似乎不能很大,如N不到52000本人的 *小本就OVER了,程序直接警告退出. *?出现的问题是:当N取值为51699时,程序运行一点点就自动结束了, *即程序没有运行完就结束了,也没有结束,反正挺正常的,不知道什么原因. ?*经反复验证,在本机上N的最大取值为51698. *******************************************/ #include #include #include #define N 51698 typedef struct student int num; //由N自动编号. int sex; //非0即1. int math; //数学成绩. int englisgh; //英语成绩. int sum; //成绩总和. stu; /********************************** *按总分降序排列. *此段程序对于qsort 函数来说是必须的. **********************************/ int CMP const stu *a,const stu *b if a- sum b- sum return -1; else if a- sum b- sum return 0; else return 1; /************************************** *每个学生的各科成绩由系统随机生成,学生数 *N可由上面设定. *本程序既打印到屏幕上又生成了一个文本文件stu.txt. *结构体排序将在主函数里实现. **************************************/ int main stu is[N]; long i,rank,temp; //分别为控制变量和名次,上一个人的名次. FILE *fp; char *str num sex math english sum; //字符串. char *str1 rank num sex math english sum; fp fopen stu.txt,w ; //以只写方式打开文件. srand unsigned time NULL ; //随机种子. for i 0;i N;i++ //is[i].num rand %1300+1; is[i].num i+1; //编号. is[i].sex rand %2; //设定性别. is[i].math rand %100; //数学成绩. is[i].englisgh rand %100;//英语成绩. is[i].sum is[i].math+is[i].englisgh;//计算总成绩. printf %s\n,str ; fprintf fp,%s\n,str ; //将提示字符串写入文件. for i 0;i N;i++ //打印个人基本信息. printf %d %ld %d %d %d\n,is[i].num,is[i].sex,is[i].math,is[i].englisgh,is[i].sum ; fprintf fp,%ld %d %d %d %d\n,is[i].num,is[i].sex,is[i].math,is[i].englisgh,is[i].sum ; printf \n ; //打印空行. fprintf fp,%c,\n ; qsort is,N,sizeof stu ,CMP ; //结构体排序. printf %s\n,str1 ; //打印提示串. fprintf fp,%s\n,str1 ; for i 0;i N;i++ if i 0 //判断名次. if is[i].sum is[i-1].sum rank temp; //如果成绩相同,则他们名次相同. else rank i+1; //否则他的名次就与他是第几个被打印有关. else rank i+1; //第一个成绩毫无疑问是第1名. temp rank; //记得保存当前人的名次,以备下一个参考. printf %d %ld %d %d %d %d\n,rank,is[i].num,is[i].sex,is[i].math,is[i].englis

文档评论(0)

zilaiye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档