1、数据结构课程设计纸牌游戏姓名:xx 学号:xx院系:计算机科学与技术学院 专业:计科 年级:大三 指导老师:xxx 目录 1.课程设计的目的x.需求分析x3.课程设计报告内容x3.。概要设计x 3。.详细设计x 33.调试分析x3。4.用户手册x3。测试结果x3。6程序清单x 4.小结x 。参考文献x1。课程设计的目的(1) 熟练使用 C 语言编写程序,解决实际问题;() 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;()初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2。需求分析编号
2、为152张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以为基数,是的倍数的牌翻一次,直到最后一张牌;直到以5为基数的翻过,输出:这时输出正面向上的牌有哪些?3. 纸牌游戏的设计3.1概要设计建立两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录:data5,flg52定义一个全局变量作为正反面的判断条件:Fla= 1Case3:输出记录Case2:所有牌翻牌记录Case1:输出题目查看翻牌的最后结果查看指定纸牌翻牌记录查看所有牌的翻牌记录查看题目欢迎来到纸牌游戏Case4:显示最后结果 开始一维数组data52,flag
3、52;并将flag初始化为0表示正面朝上YYY N N Nj=52输出正面朝上的卡牌翻牌。如果flagj-1为0则变为1,否则变为0 j+ i+ 结束j%i=0 j=ii)/纸牌的序号为52,所以其他数值都为输入错误。prntf(”输入错误!n);eeprnt(纸牌翻转记录如下:n”);prnf(”t纸牌翻转次数为%dn”,lagnu1);for(j;j52;j+)/内循环,基数倍数条件判断。(num%j=0)pritf(”t在以编号%d为基数时此纸牌有一次翻转。”,j);pritf(需要继续查询纸牌编码吗?(/N):”);/独立的判断语句,作为owhie的结束条件,从而可循环的查询纸牌编码.
4、etchar();mgetchar();i(!=Y&m!N)prinf(”*(提示:输入错误,默认为跳过。)*n”);wle(m=Y);prin(”是否回到主菜单?(Y):”);=gechar();n=getchar();if(=Y)break;lsei(nN)choice;elsepinf(*(提示:输入错误,默认为继续。)* *n);br;cae :printf(最后所有正面向上的牌有:n”);fr(0;i5;+)f(data)/所有大于0的数即为正面向上的纸牌。rinf(第张牌 ,);pntf(”n);prin(”是否回到主菜单?(/):);n=getcha();n=geca();f(n
5、=Y)beak;lseif(n=N)choice=;lse prf(”*(提示:输入错误,默认为继续。)* *n”);break;case :bra;default:rinf(”输入错误,请重新输入!n);we(cice!);/0作为整个循环的结束条件。rit(”*程序结束,谢谢使用*); 3。3调试分析:选择1,显示题目选择2,查看所有翻牌记录选择3,查看指定纸牌记录,如18选择4,显示最后结果4. 程序清单:#includestioh#nludewindows。hefieFlag 1/定义一个全局变量作为正反面的判断条件。void main()in ,j,da5,lg5,choice,nu
6、m;/建立两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录。chr m,n;or(i=1;2;i+)dat=i;/录入张牌的编号。fagi1=0;/将相应编号纸牌的翻牌数初始化为0。for(=2;i52;+)/外循环,基数循环.(j;j=52;j+)/内循环,基数倍数条件判断。if(%i0)ata1=dataj1*Fag;/将翻转后的结果更新ata中的数据。 flagj-1+;/翻牌一次,即记入lg数组中。doprif(”-n”);prif(”t-n);prntf(”- 欢迎进入纸牌游戏-n);pnf(t- .查看题目 -n”);prntf(t- 2。查看所有纸牌的翻牌次
7、数 );rif(”t 3。查看指定编号纸牌翻牌记录 -n); pritf(t 4。查看最终正面向上的纸牌编号-n”);prntf(”t- 0。按键结束-n”);ritf(”t-n”);pint(”-);prtf(请输入您的选择(数字04):”);/主界面ca(%d”,&choice);swich(hic)/通过witc语句进行功能的选择ase 1:rintf(”题目-n);printf(*”);rint(编号为12张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,”);pntf(”直到最后一张牌;然后,从第张开始,以3为基数,是3的倍数的牌翻一次,”);printf(”直到最后一
8、张牌;直到以5为基数的翻过,输出:这时输出正面向上的牌有哪些?n);prtf(”*);printf(n”);pritf(”n”);printf(”是否回到主菜单?(YN):);/在每个独立功能后添加了独立的判断语句,从而可以选择性的回到主菜单。n=gtch();n=gtcr();i(n=Y)brak;ele if(=N)choie=0;/0作为整个界面的循环结束条件,所以直接将choice=0,即可结束循环。lse rintf(”*(提示:输入错误,默认为继续。)*n”);break;case2:pint(以下为翻牌记录:);rinf(”t-第1张牌翻过0次.-);printf(”n”);ri
9、ntf();fo(i1;52;i+)rnf(t-第%d张牌翻过%d次。-”,i+1,fli);f(i%2=0)pinf(n);rintf(”n”);pritf(是否回到主菜单?(Y/N):);=etchar();n=echar();if(n=)beak;els i(n=)chice=;ele pif(*(提示:输入错误,默认为继续.)* *n”); break;case :oprintf(”t请输入您想查询的纸牌编码:”);snf(”%d”,&um);f(1&nm5)/纸牌的序号为-2,所以其他数值都为输入错误prinf(”t输入错误!n);eleprintf(t纸牌翻转记录如下:n”);pr
10、itf(”t纸牌翻转次数为%dn”,fagnm);o(j=2;5;j+)/内循环,基数倍数条件判断。f(num%j=0)pritf(”t在以编号为基数时此纸牌有一次翻转。n,); pintf(”需要继续查询纸牌编码吗?(Y/N):”);/独立的判断语句,作为dowe的结束条件,从而可循环的查询纸牌编码。=etcha();mthar();if(m!=&m!=N)pintf(”*(提示:输入错误,默认为跳过)* *n”);whl(m=Y);prt(”是否回到主菜单?(/N):);n=getcar();=getca();f(n=Y)break;seif(n=)chice=0;elerf(”*(提示:
11、输入错误,默认为继续。)* *n);reak;cae4:pnt(”t最后所有正面向上的牌有:n);o(i=0;52;i)if(dai0)/所有大于0的数即为正面向上的纸牌。p(” 第%d张牌 ,i+);inf(”n”);prin(”是否回到主菜单?(Y/):”);n=gecr();n=gchar();if(n=Y)rak;ese if(n=N)oice=0;else pt(*(提示:输入错误,默认为继续.)* *n”);beak;case 0:break;defaut:prtf(”t输入错误,请重新输入!n”);wile(choice!=0);/0作为整个循环的结束条件。pintf(*程序结束,谢谢使用*n”);