数据结构课程设计-纸牌游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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");
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;
else if(n=='N')
choice=0;