《结构体排序问题精选文档.ppt》由会员分享,可在线阅读,更多相关《结构体排序问题精选文档.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、结构体排序问题本讲稿第一页,共十四页结构体操作与排序问题题型:本讲稿第二页,共十四页知识点 该类型的题目大致有10种,虽然条件不一样,但考取的知识点相同.主要的知识点包括:结构体的定义与成员的引用;冒泡排序法;条件比较;本讲稿第三页,共十四页题型1 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从大到小
2、进行排列,若产品金额相同,则按产品代码从小到大进行排列。最后main()函数调用函数WriteDat()把结果输出到文件OUT1.DAT中。本讲稿第四页,共十四页程序voidSortDat()inti,j;PROtemp;for(i=0;i99;i+)for(j=i+1;j100;j+)if(selli.je0)temp=selli;selli=sellj;sellj=temp;本讲稿第五页,共十四页分析该类型题中,首先需要定义一个结构体变量,用来实现结构体的交换(PROtemp;)。然后使用冒泡排序法排序。条件比较是该题的关键所在,该类型题目的条件一般包含两部分,如例题中,首先是依据金额大小
3、进行比较,如果条件成立,则交换两个数据,然后是如果金额相同,依据代码从小到大排列,满足此条件,则数据交换。需要注意的是,在比较变量大小的时候,一定要注意结构体成员的类型,字符串型需要使用函数strcmp,如果是数字型,则可直接比较大小。本讲稿第六页,共十四页结构体定义typedef struct char dm5;/*产品代码*/char mc11;/*产品名称*/int dj;/*单价*/int sl;/*数量*/long je;/*金额*/PRO;PRO sellMAX;程序中将产品的属性都定义在了一个结构体中,结构体和整型、浮点型、字符型相同,是一种变量类型。题中的sell数组就定义成为
4、结构体数组,这和intsellMax的定义方法是类似的。冒泡排序中,为了交换sell中的元素,我们也需要定义一个结构体变量作为交换的中间变量。注意:这个变量只能是和sell相同类型的变量。本讲稿第七页,共十四页其它类型按金额从小到大进行排列,若金额相等,则按产品代码从大到小进行排列;按产品代码从小到大进行排列,若产品代码相同,则按金额从小到大进行排列;按产品名称从小到大进行排列,若产品名称相同,则按金额从小到大进行排列;按金额从小到大进行排列,若金额相等,则按产品名称从大到小进行排列;本讲稿第八页,共十四页比较条件 if(strcmp(selli.dm,sellj.dm)0)tt=selli;
5、selli=sellj;sellj=tt;if(strcmp(selli.dm,sellj.dm)0&(selli.jesellj.je)tt=selli;selli=sellj;sellj=tt;if(strcmp(selli.mc,sellj.mc)0)tt=selli;selli=sellj;sellj=tt;if(strcmp(selli.mc,sellj.mc)0&(selli.jesellj.je)tt=selli;selli=sellj;sellj=tt;本讲稿第九页,共十四页说明 in.dat 内容完全相同;程序也基本雷同,仅排序的要求不一样;考生应熟悉 strcmp()函数,
6、否则有的题相当不好处理;If条件语句可写为一句,也可分为两条嵌套使用;由于该题的运行结果没有在用户屏幕上显示,所以运行结果直接 看不到,需要打开out.dat文件查看,运行结果保存在该文件中。本讲稿第十页,共十四页题型2在文件in.dat中有200组数据,每组有3个数,每个数均是三位数。函数readDat()是读取这200组数据存放到结构数组aa中。请编制函数jsSort(),其函数的功能是:要求在200组数据中找出条件为每组数据中的第一个数大于第二个数与第三个数之和,其中满足条件的个数作为函数jsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数据按照每组数据的第一
7、个数与第三个数之和的大小进行升序排列(第一个数与第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中,最后调用函数writeDat()把结果bb输出到文件out.dat中。本讲稿第十一页,共十四页#include#include#includetypedefstructintx1,x2,x3;DATA;DATAaa200,bb200;intjsSort()voidmain()源程序本讲稿第十二页,共十四页答案intjsSort()inti,j,k=0;DATAswap;/*定义一个结构体变量,作为交换时的临时存放地*/for(i=0;i(aai.x2+aai.x3)bbk+=aai;/*先将符合第一个数大于第二个数加第三个数的之和的数存入bb数组中*/for(i=0;ik-1;i+)for(j=i+1;j(bbj.x1+bbj.x3)swap=bbi;bbi=bbj;bbj=swap;/*在BB数组中进行排序(从小到大)*/returnk;本讲稿第十三页,共十四页运行结果本讲稿第十四页,共十四页