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