数据结构课程设计纸牌游戏.docx
- 文档编号:18104662
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:20
- 大小:73.75KB
数据结构课程设计纸牌游戏.docx
《数据结构课程设计纸牌游戏.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计纸牌游戏.docx(20页珍藏版)》请在冰点文库上搜索。
数据结构课程设计纸牌游戏
数据结构》课程设计
——纸牌游戏
学号:
XXXX
专业:
计科
指导老师:
XXXX
姓名:
XXX
院系:
计算机科学与技术学院
年级:
大三
1.课程设计的目的X……
2.需求分析x…
3.课程设计报告内容x
3.1.概要设计X……
32详细设计
3.3.调试分析x
34用户手册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
查看所有牌]
查看指定纸
*
查看翻牌的
的翻牌记录
牌翻牌记录
最后结果
Case3:
输出
记录
欢迎来到纸牌游戏
Case2:
所有
牌翻牌记录
Case4:
显示
最后结果
开始
i=2
一维数组data[52],flag[52];并将
flag初始化为0表示正面朝上
丫-
j=
i++
j%i==O
翻牌。
如果flag[j-1]为0则
变为1,否则变为0
j++
专业.专注
3.2详细设计
//建立两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录
inti,j,data[52],flag[52],choice,num;
charm,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==O)
data[j-1]=data[j-1]*Flag;〃将翻转后的结果更新data中的数据。
flag[j-1]++;〃翻牌一次,即记入flag数组中。
case1:
{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();
if(n=='Y')break;
elseif(n=='N')
choice=0;//0作为整个界面的循环结束条件,所以直接将choice=0,即可结束循环
elseprintf("**********(提示:
输入错误,默认为继续。
)***********\n");}break;
case2:
{
printf(”以下为翻牌记录:
\n");
printf("\t----第1张牌翻过0次。
一\t");
printf("\n");
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;
elseif(n=='N')
choice=0;
elseprintf("**********(提示:
输入错误,默认为继续。
)*************宙”);}break;
case3:
{
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==O)
{
printf("\t在以编号%d为基数时此纸牌有一次翻转。
\n",j);}
}
}
printf("需要继续查询纸牌编码吗?
(Y/N):
");//独立的判断语句,作为do-while的结束条
件,从而可循环的查询纸牌编码。
m=getchar();
if(m!
='Y'&&m!
='N')printf("************(提示:
输入错误,默认为跳过。
)**********\n”);
}while(m=='Y');
printf("是否回到主菜单?
(Y/N):
");
n=getchar();
n=getchar();
if(n=='Y')break;
elseif(n=='N')
choice=0;
elseprintf("**************(提示:
输入错误,默认为继续。
)**********n");
}break;
case4:
{
printf("\t最后所有正面向上的牌有:
\n");
for(i=0;i<52;i++)
{
if(data[i]>0)〃所有大于0的数即为正面向上的纸牌。
printf(”第%d张牌”,i+1);
}
printf("\n");
printf("是否回到主菜单?
(Y/N):
");
n=getchar();
if(n=='Y')break;
elseif(n=='N')choice=0;
elseprintf(
H***************
提示:
输入错误,默认为继续。
)**********\n");
}break;
case0:
break;
default:
printf("\t输入错误,请重新输入!
\n");
}while(choice!
=0);//0作为整个循环的结束条件。
printf(
程序结束,谢谢使用
*******************
*\n");}
3.3调试分析:
=.回
选择1,显示题目
■'C:
\U5er5\Admini5trator\Deslct0p\Debug\2.exe'
迎查查查壽^12340
瞬选择:
」
以强为基数的翻过,
岀1E面向
G去=处噪翩一次,直到叢后一张牌:
去
£'・
选择2,查看所有翻牌记录
i=i回
是否回至|J主菜单?
(YzH>:
y
一一_n/纸目有爰馥入题所营醪迎查査查查按^■12340
牌号面
纸编正■
-号-i数记牌驚上
腱翳数字2--1蟲张牌翻过瞰.-
——第2张牌翻过丄派-
一一第4张牌翻过2袂。
一
—第弱雕翻过M次.一--一第E张牌翻过了矢一一一第诃张牌翻过2枕°-
—第3张牌翻过直次。
-一一第&张牌翻过--——第:
涨牌翻过丄次。
-——第夕张牌翻过乂次*—
第11张牌翻过丄次°-
■"C:
\Users\Administrator\De5ktop\Debug\2.exe"
i=i回
第丄2张牌翻过5枕°
第14张牌翻过M次。
第丄丘张牌翻过4次*——第他张牌翻过占次°-一第20张牌翻过弓次。
第22张牌翻过2次°--一第^张牌翻过7次°-一--一第站张牌翻过M次.—
第汕:
牌胡过5次*
第$3张牌翻过1次。
第丄召张牌翻过3次。
第炜张牌翻过1次◎——第纱张牌翻过丄矢----
——第劭张牌翻过3次。
一一一一第齟张牌翻过°一一
——第葛张牌翻过址袂。
----_—第跆张牌翻过3袂。
__一一第彗张牌翻过I次*一一
■'C:
\Users\Admlinistrator\Desktop\Debugi\2.exe"
——第^张牌翻过丄次。
-一
——第眈张牌翻过吕次°—
第兀张牌翻过3枕*―
——第阳张牌翻过叭-
第35张牌翻过3次―
第躬张牌翻过3次*
第弱张牌翻过;J次。
第3&张牌翻过&枕.4
第即张牌翻过丄次。
第38张牌翻过3次*
第翁张牌翻过3衩*
一一第舗张牌翻过7次。
一一
一一第牡张牌翻过1越\一一
第43张牌翻过7次*
第43张牌翻过丄次*-r一
--一第刼张牌翻过弓次*—
——第钙张牌翻过5次。
一一
第4&张牌翻选矢
第羽张牌翻过丄次。
--一第期张牌翻过9次。
--一
一一第詢张牌翻过2次。
一一
-一-第强张牌翻过吕次*一一
一一第^张牌翻过2次*一一
--一第竝张牌翻过§次。
----是否回到王菜卑?
选择3,查看指定纸牌记录,如18
■"C:
\U5er5\Administrator\Desktop\Debug\2.exe
■"C:
\Users\Administrator\De5ktop\Debug\2.exe
观牌潞戏
導潭——译着最庭面向上矗蘇匚
九按瞬结束
字0-4):
3
r畫询的纸牌编码:
绅事疇如下1
世輝谿霰吐此貌有-熠籤||璀豔踏FIjijw瞽回貝王橐单?
Ms
c¥zH>:
N
纸目有産入聲指迎、杳香查隸」2.3.
•日,宝牌昼HUB™if.八
数记
选择4,显示最后结杲
■"C:
\User5\Administrator\Desktop\Debug\2.exe
<¥/N>:
N
日B
—?
」MA娄?
V蟹霞691■nr号号口輕?
单以増木在查主
要否
書疋
-号录编
黑上惮号面
冷电3-纸QU有定终靜入题所营蚤进-看壬M:
-M-TI0I迎杳香香一壽".■■■-\」2.3.4.0.
坏张牌第鹦张牌第恥张牌第裁张牌
4.程序清单:
#include
#include
#defineFlag-1〃定义一个全局变量作为正反面的判断条件。
voidmain()
{
inti,j,data[52],flag[52],choice,num;〃建立两个数组,一个存放52张牌的编号,另外一个存
放相应编号的纸牌的翻牌记录。
charm,n;
for(i=1;i<=52;i++)
{
data[i-1]=i;〃录入52张牌的编号。
flag[i-1]=O;〃将相应编号纸牌的翻牌数初始化为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数组中。
}
}
}
do{
printf("\t-----
-\n");
printf("\t-----
-\n");
printf("\t-----
欢迎进入纸牌游戏
-\n");
printf("\t-----
----1.
查看题目
--\n");
printf("\t-----
----2.
查看所有纸牌的翻牌次数
---\n");
printf("\t-----
----3.
查看指定编号纸牌翻牌记录
------\n");
printf("\t-----
----4.
查看最终正面向上的纸牌编-
口
号--
\n")
printf("\t-----
----0.
按0键结束
------\n");
printf("\t-----
-\n");
\n");
printf("请输入您的选择(数字0-4):
");//主界面
seanf("%d",&choice);
switch(choice)//通过switch语句进行功能的选择
{
case1:
{
printf("---题目---\in”);
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;elseif(n=='N')
choice=0;//0作为整个界面的循环结束条件,所以直接将choice=0,即可结束循环
elseprintf("**********(提示:
输入错误,默认为继续。
)***********\n");}break;
case2:
{
printf(”以下为翻牌记录:
\n");
printf("\t----第1张牌翻过0次。
一\t");
printf("\n");
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;
elseif(n=='N')
choice=0;
elseprintf("**********(提示:
输入错误,默认为继续。
)*************\n”);}break;
case3:
{
do{
printf("\t请输入您想查询的纸牌编码:
”);
seanf("%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==O)
{
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;
elseif(n=='N')
choice=0;
elseprintf("**************(提示:
输入错误,默认为继续。
)**********n");
}break;
case4:
{
printf("\t最后所有正面向上的牌有:
\n");
for(i=0;i<52;i++)
{
if(data[i]>0)〃所有大于0的数即为正面向上的纸牌。
printf(”第%d张牌”,i+1);
}
printf("\n");
printf("是否回到主菜单?
(Y/N):
");
n=getchar();
n=getchar();
if(n=='Y')break;
choice=0;
elseprintf("***************(提示:
输入错误,默认为继续。
)**********、门”);
}break;
case0:
break;
default:
printf("\t输入错误,请重新输入!
\n");
}
}while(choice!
=0);//0作为整个循环的结束条件。
printf("*******************
程序结束,谢谢使用********************\n");}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 纸牌 游戏