资源描述:
《数据结构设计报告纸牌游戏》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、纸牌游戏—・需求分析1.编号为1-52张牌,正面向上2.从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;・・・再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过3.输出:这时正面向上的牌;4・测试数据52张牌概要设计1.数组抽象数据类型定义:ADTSqListf数据对象:ji二0,…,bi-1,i=l,2,…,n,D二{ajlj2-jn
2、n(>0)称为数组的维数,bi是数组第i维的
3、长度,ji是数组第i维的下标,ajlj2---jneElemSet}数据关系:R={R1,R2,-,Rn}Ri二{〈ajl・・・ji・・・jn,ajl,…ji+1,•••jn>
4、0WjkWbk-l,lWkWn且kHI,OWjiWbk-2,ajl・・・ji・・・jn,ajl,・・・ji+l,・••jnED,i=2,・••,n}基本操作:faceringt(L):操作结果:对纸牌进行翻转}ADTSqList2.本程序包含两个模块:(1)主程序模块voidmainO{定义一个二叉树;for(i=l;i〈二52;i++){L.r[i].num=i;
5、L.r[i].visit=0;//用0來记正面}}(2)纸牌翻转模块一一翻转纸牌各模块之间的调用关系如下:主程序模块fl纸牌翻转模块三.详细设计1.根据题目要求的数组存储结构#defineMAXSIZE100〃给数组定义一个空间typedefstructintnum;〃牌号intvisit;〃牌的正反面JRedType;〃纸牌的信息typedefstruct{RedTyper[MAXSIZE+l];〃纸牌数组intlength;JSqList;2•对纸牌进行翻转voidfaceringt(SqListL){for(i=2;i<=52;i++
6、)〃从第二张开始往后{for(j=i;j<=52;j++)if(L.r[j].num%—0)〃当是i的倍数时翻转{if(L.r[j]>visit==O)〃正面翻反面L.r[j].visit=l;elseL.r[j].visit=O;}}for(i=l;i<=52;i++)〃显示正面号{if(L.r[i].visit==O)cout«L.r[i].num«nH;}cout«endl;}1.主函数voidmain(){for(i=1;i<=52;i++){L.r[i].num=i;L.r[i].visit=();//ffl0来记正面}cout«
7、n这时是正面的编号为:"vvendl;faceringt(L);}2.函数的调用关系反映了演示程序的层次结构主程序faceringt四•调试分析1.用一个数组来存储52张牌1.定义数组时由于每张牌要记录两个东西,就让每个数据包括两个数据项■…纸牌号和记录纸牌正反面五•测试结果六.附录(源代码)#include#includeusingnamespacestd;#defineMAXSIZE100〃给数组定义一个空间typedefstruct{intnum;〃牌号intvisit;〃牌的正反面}RedType
8、;〃纸牌的信息typedefstruct{RedTyper[MAXSIZE+l];〃纸牌数纽.intlength;JSqList;〃对纸牌进行翻转voidfaceringt(SqListL){inti,j;for(i=2;i<=52;i++)〃从第二张开始往后{for(j=i;j<=52;j++)if(L.r[j].num%i==O)〃当是i的倍数时翻转{if(L.r[j].visit==O)〃正面翻反面L.r[j].visit=l;elseL.rfj].visit=O;}}for(i=I;i<=52;i++)//显示正面号{if(L.r[
9、i].visit==O)cout«L.r[i].num«n}cout«endl;}voidmain(){inti;SqListL;for(i=l;i<=52;i++){L.r[i].num=i;L.r[i].visit=O;//用0来记正面}cout«”这时是正面的编号为:"«endl;faceringt(L);}七.心得体会