数据结构课程设计-纸牌游戏

  • 格式:doc
  • 大小:259.50 KB
  • 文档页数:13

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》课程设计————纸牌游戏

姓名:xxx 学号:xxxx

院系:计算机科学与技术学院专业:计科

年级:大三指导老师:xxxx

目录

1.课程设计的目的 (x)

2.需求分析 (x)

3.课程设计报告内容 (x)

3.1.概要设计 (x)

3.2.详细设计 (x)

3.3.调试分析 (x)

3.4.用户手册 (x)

3.5.测试结果 (x)

3.6.程序清单 (x)

4.小结 (x)

5.参考文献 (x)

1.课程设计的目的

(1) 熟练使用C 语言编写程序,解决实际问题;

(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

2.需求分析

编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;直到以52为基数的翻过,输出:这时输出正面向上的牌有哪些?

3.纸牌游戏的设计

3.1概要设计

建立两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录:data[52],flag[52]

定义一个全局变量作为正反面的判断条件:Flag= -1

3.2详细设计

//建立两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录。

int i,j,data[52],flag[52],choice,num;

char m,n;

for(i=1;i<=52;i++)

{

data[i-1]=i;//录入52张牌的编号。

flag[i-1]=0;//将相应编号纸牌的翻牌数初始化为0。

}

for(i=2;i<=52;i++)//外循环,基数循环。

{

for(j=1;j<=52;j++)//内循环,基数倍数条件判断。

{

if(j%i==0)

{

data[j-1]=data[j-1]*Flag;//将翻转后的结果更新data中的数据。

flag[j-1]++;//翻牌一次,即记入flag数组中。

}

}

}

case 1:{

printf("---题目---\n");

printf("**************************************************************\n");

printf("编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,");

printf("直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,"); printf("直到最后一张牌;直到以52为基数的翻过,输出:这时输出正面向上的牌有哪些?\n");

printf("****************************************************************");

printf("\n");

printf("\n");

printf("是否回到主菜单?(Y/N):");//在每个独立功能后添加了独立的判断语句,从而可以选择性的回到主菜单。

n=getchar();

n=getchar();

if(n=='Y')break;

else if(n=='N')

choice=0;//0作为整个界面的循环结束条件,所以直接将choice=0,即可结束循环。

else printf("**********(提示:输入错误,默认为继续。)***********\n"); }break;

case 2:{

printf("以下为翻牌记录:\n");

printf("\t----第1张牌翻过0次。----\t");

printf("\n");

for(i=1;i<52;i++)

{

printf("\t----第%d张牌翻过%d次。----\t",i+1,flag[i]);

if(i%2==0)

printf("\n");

}

printf("\n");

printf("是否回到主菜单?(Y/N):");

n=getchar();

n=getchar();

if(n=='Y')break;

else if(n=='N')

choice=0;

else printf("**********(提示:输入错误,默认为继续。)*********** **\n"); }break;

case 3:{

do{

printf("\t请输入您想查询的纸牌编码:");

scanf("%d",&num);

if(num<1&&num>52)//纸牌的序号为1-52,所以其他数值都为输入错误。

printf("\t输入错误!\n");

else

{

printf("\t纸牌翻转记录如下:\n");

printf("\t纸牌翻转次数为%d\n",flag[num-1]);

for(j=2;j<=52;j++)//内循环,基数倍数条件判断。

{

if(num%j==0)

{

printf("\t在以编号%d为基数时此纸牌有一次翻转。\n",j); }

}

}

printf("需要继续查询纸牌编码吗?(Y/N):");//独立的判断语句,作为do-while的结束条件,从而可循环的查询纸牌编码。

m=getchar();

m=getchar();

if(m!='Y'&&m!='N')

printf("************(提示:输入错误,默认为跳过。)******** **\n");

}while(m=='Y');

printf("是否回到主菜单?(Y/N):");

n=getchar();

n=getchar();

if(n=='Y')break;