数据结构课程设计纸牌游戏Word文件下载.docx
《数据结构课程设计纸牌游戏Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计纸牌游戏Word文件下载.docx(17页珍藏版)》请在冰点文库上搜索。
(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
Y
N
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++)//外循环,基数循环。
for(j=1;
j〈=52;
j++)//内循环,基数倍数条件判断.
if(j%i==0)
data[j—1]=data[j-1]*Flag;
//将翻转后的结果更新data中的数据。
flag[j—1]++;
//翻牌一次,即记入flag数组中.
}
case1:
{
printf(”---题目——-\n”);
printf("
**************************************************************\n”);
编号为1—52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,"
);
直到最后一张牌;
然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,”);
直到最后一张牌;
直到以52为基数的翻过,输出:
\n"
****************************************************************”);
\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:
以下为翻牌记录:
\t--—-第1张牌翻过0次.-—--\t”);
printf(”\n"
for(i=1;
i<
52;
\t--—-第%d张牌翻过%d次.—-——\t"
,i+1,flag[i]);
if(i%2==0)
printf(”\n”);
\n”);
if(n=='
Y'
)break;
elseif(n==’N’)
elseprintf(”**********(提示:
输入错误,默认为继续。
)*************\n"
}break;
case3:
do{
\t请输入您想查询的纸牌编码:
scanf("
%d”,&num);
if(num<
1&&num〉52)//纸牌的序号为1—52,所以其他数值都为输入错误。
\t输入错误!
else
printf(”\t纸牌翻转记录如下:
printf(”\t纸牌翻转次数为%d\n”,flag[num-1]);
for(j=2;
j〈=52;
j++)//内循环,基数倍数条件判断。
if(num%j==0)
\t在以编号%d为基数时此纸牌有一次翻转。
\n”,j);
}
printf(”需要继续查询纸牌编码吗?
//独立的判断语句,作为do—while的结束条件,从而可循环的查询纸牌编码。
m=getchar();
m=getchar();
if(m!
='
Y’&&
m!
=’N’)
printf(”************(提示:
输入错误,默认为跳过。
)**********\n”);
}while(m=='
Y’);
(Y/N):
elseif(n==’N'
)
**************(提示:
)**********\n"
}break;
case4:
printf(”\t最后所有正面向上的牌有:
for(i=0;
i〈52;
if(data[i]>
0)//所有大于0的数即为正面向上的纸牌。
printf(”第%d张牌”,i+1);
是否回到主菜单?
”);
N'
elseprintf(”***************(提示:
输入错误,默认为继续.)**********\n”);
}break;
case0:
break;
default:
printf(”\t输入错误,请重新输入!
}while(choice!
=0);
//0作为整个循环的结束条件。
*******************程序结束,谢谢使用********************\n"
}
3.3调试分析:
选择1,显示题目
选择2,查看所有翻牌记录
选择3,查看指定纸牌记录,如18
选择4,显示最后结果
4.程序清单:
#include〈stdio.h〉
#include〈windows。
h〉
#defineFlag—1//定义一个全局变量作为正反面的判断条件。
voidmain()
inti,j,data[52],flag[52],choice,num;
//建立两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录.
charm,n;
data[i—1]=i;
//录入52张牌的编号。
for(i=2;
=52;
for(j=1;
if(j%i==0)
data[j-1]=data[j-1]*Flag;
flag[j—1]++;
//翻牌一次,即记入flag数组中。
do{
\t—-----—————-—----—-—-—---——---——---———-—---—————————-———---\n”);
\t-——-——----——------—————---——-——---——-——---———--—-————-----—\n"
printf(”\t—---—--—-欢迎进入纸牌游戏-—----——--—\n”);
\t-—--—-—-—1.查看题目-—-——————--\n"
printf(”\t-———---——2.查看所有纸牌的翻牌次数——-——--—--—\n"
printf(”\t-———————-3。
查看指定编号纸牌翻牌记录—--—-—--——-\n”);
\t-———-—-—-4.查看最终正面向上的纸牌编号-—--—-—-——-\n”);
\t—-———-———0.按0键结束—---------—\n”);
\t————-——--——-———-——-—————-——-—————-———---———--———————-——--—-\n"
printf(”\t-——--————----—--——————--—----—-—----———-—-—-——--—--——-——-—-\n"
printf(”请输入您的选择(数字0—4):
”);
//主界面
%d”,&choice);
switch(choice)//通过switch语句进行功能的选择
case1:
printf(”---题目—-—\n"
printf(”**************************************************************\n"
编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,"
printf(”直到最后一张牌;
然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,”);
printf(”****************************************************************”);
//在每个独立功能后添加了独立的判断语句,从而可以选择性的回到主菜单.
//0作为整个界面的循环结束条件,所以直接将choice=0,即可结束循环。
**********(提示:
输入错误,默认为继续.)***********\n"
case2:
printf(”以下为翻牌记录:
\t—-——第1张牌翻过0次。
——-—\t”);
52;
\t-—--第%d张牌翻过%d次。
—-—-\t"
,i+1,flag[i]);
choice=0;
**********(提示:
输入错误,默认为继续.)*************\n”);
}break;
printf(”\t请输入您想查询的纸牌编码:
scanf(”%d"
,&
num);
1&
&
num>
52)//纸牌的序号为1-52,所以其他数值都为输入错误。
printf(”\t输入错误!
\t纸牌翻转记录如下:
\t纸牌翻转次数为%d\n"
flag[num-1]);
for(j=2;
\t在以编号%d为基数时此纸牌有一次翻转。
\n”,j);
需要继续查询纸牌编码吗?
//独立的判断语句,作为do-while的结束条件,从而可循环的查询纸牌编码。
if(m!
Y’&
printf(”************(提示:
)**********\n"
}while(m==’Y’);
elseprintf(”**************(提示:
输入错误,默认为继续.)**********\n"
}break;
case4:
\t最后所有正面向上的牌有:
if(data[i]>
printf(”第%d张牌"
,i+1);
Y’)break;
elseprintf(”***************(提示:
输入错误,默认为继续。
)**********\n"
case0:
default:
\t输入错误,请重新输入!
}while(choice!
*******************程序结束,谢谢使用********************\n”);