您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 数据结构设计报告纸牌游戏
纸牌游戏一.需求分析1.编号为1-52张牌,正面向上2.从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过3.输出:这时正面向上的牌;4.测试数据52张牌二.概要设计1.数组抽象数据类型定义:ADTSqList{数据对象:ji=0,…,bi-1,i=1,2,…,n,D={aj1j2…jn|n(0)称为数组的维数,bi是数组第i维的长度,ji是数组第i维的下标,aj1j2…jn∈ElemSet}数据关系:R={R1,R2,…,Rn}Ri={aj1…ji…jn,aj1,…ji+1,…jn|0≤jk≤bk-1,1≤k≤n且k≠I,0≤ji≤bk-2,aj1…ji…jn,aj1,…ji+1,…jn∈D,i=2,…,n}基本操作:faceringt(L):操作结果:对纸牌进行翻转}ADTSqList2.本程序包含两个模块:(1)主程序模块voidmain(){定义一个二叉树;for(i=1;i=52;i++){L.r[i].num=i;L.r[i].visit=0;//用0来记正面}}(2)纸牌翻转模块——翻转纸牌各模块之间的调用关系如下:主程序模块纸牌翻转模块三.详细设计1.根据题目要求的数组存储结构#defineMAXSIZE100//给数组定义一个空间typedefstruct{intnum;//牌号intvisit;//牌的正反面}RedType;//纸牌的信息typedefstruct{RedTyper[MAXSIZE+1];//纸牌数组intlength;}SqList;2.对纸牌进行翻转voidfaceringt(SqListL){for(i=2;i=52;i++)//从第二张开始往后{for(j=i;j=52;j++)if(L.r[j].num%i==0)//当是i的倍数时翻转{if(L.r[j].visit==0)//正面翻反面L.r[j].visit=1;elseL.r[j].visit=0;}}for(i=1;i=52;i++)//显示正面号{if(L.r[i].visit==0)coutL.r[i].num;}coutendl;}3.主函数voidmain(){for(i=1;i=52;i++){L.r[i].num=i;L.r[i].visit=0;//用0来记正面}cout这时是正面的编号为:endl;faceringt(L);}4.函数的调用关系反映了演示程序的层次结构主程序faceringt四.调试分析1.用一个数组来存储52张牌2.定义数组时由于每张牌要记录两个东西,就让每个数据包括两个数据项----纸牌号和记录纸牌正反面五.测试结果六.附录(源代码)#includeiostream#includestringusingnamespacestd;#defineMAXSIZE100//给数组定义一个空间typedefstruct{intnum;//牌号intvisit;//牌的正反面}RedType;//纸牌的信息typedefstruct{RedTyper[MAXSIZE+1];//纸牌数组intlength;}SqList;//对纸牌进行翻转voidfaceringt(SqListL){inti,j;for(i=2;i=52;i++)//从第二张开始往后{for(j=i;j=52;j++)if(L.r[j].num%i==0)//当是i的倍数时翻转{if(L.r[j].visit==0)//正面翻反面L.r[j].visit=1;elseL.r[j].visit=0;}}for(i=1;i=52;i++)//显示正面号{if(L.r[i].visit==0)coutL.r[i].num;}coutendl;}voidmain(){inti;SqListL;for(i=1;i=52;i++){L.r[i].num=i;L.r[i].visit=0;//用0来记正面}cout这时是正面的编号为:endl;faceringt(L);}七.心得体会
本文标题:数据结构设计报告纸牌游戏
链接地址:https://www.777doc.com/doc-6400512 .html