纸牌游戏课程设计.docx
- 文档编号:11237764
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:14
- 大小:72.47KB
纸牌游戏课程设计.docx
《纸牌游戏课程设计.docx》由会员分享,可在线阅读,更多相关《纸牌游戏课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
纸牌游戏课程设计
课程设计报告
课程名称数据结构
课题名称纸牌游戏
专业通信工程
任务书下达日期2014年6月16日
任务完成日期2014年6月22日
一、需求分析…………………………………………………………………………3
二、概要设计…………………………………………………………………………3
三、详细设计…………………………………………………………………………3
四、调试分析…………………………………………………………………………7
五、用户使用说明……………………………………………………………………7
六、测试结果…………………………………………………………………………7
七、总结………………………………………………………………………………8
八、附录………………………………………………………………………………8
课题名称纸牌游戏
1.需求分析
1.1运行程序后,便会显示出正面朝上的牌的编号。
所以需要程序能够储存
1.2显示出这52张牌中翻动次数最多与最少的牌,以及翻动的次数和是正面向上还是反面向上,需要程序能够自动计数自行比较并且输出的功能。
2.概要设计
2.1编号为1-52张纸牌,则需要创建一个线性表,运用malloc函数申请内存空间,存储纸牌编号信息。
2.2设计翻牌程序,存储最后正面向上的牌的编号,和翻动次数最多的牌号,和翻动次数最少的牌号,以及他们翻动的次数,和他们是正面向上还是反面向上。
2.3编写主函数,输出全部纸牌编号与程序的运行结果,让用户能够看到直观的求解结果。
3.详细设计
3.1创建线性表存储所有的纸牌编号
typedefstruct//定义线形表
{
intdata[52];
}list;
voidbuild(list*&l)//建立线形表
{
inti;
l=(list*)malloc(sizeof(list));
for(i=0;i<52;i++)
{
l->data[i]=0;
}
3.2建立fanpai()函数
voidfanpai(list*&l)
{
intj,i;
for(j=2;j<=52;j++)
{
for(i=1;i<=52;i++)
{
if((i*j<=52)&&(l->data[i*j-1]==1))
{
l->data[i*j-1]=0;
k[i*j-1]++;
continue;
}
if((i*j<=52)&&(l->data[i*j-1]==0))
{
l->data[i*j-1]=1;
k[i*j-1]++;
continue;
}
}
}
printf("正面朝上的牌有:
");
for(j=0;j<52;j++)
{
if(l->data[j]==0)
printf("%d",j+1);
}
3.3建立zuiduo()函数
voidzuiduo(list*&l)
{
intb=k[0],j;
for(j=0;j<51;j++)
{
if(b { b=k[j+1]; } } printf("\n翻牌次数最多的是: \n"); for(j=0;j<52;j++) { if(b==k[j]) { if(l->data[j]==0) printf("%d,次数为%d.正面\n",j+1,b); else printf("%d,次数为%d.反面\n",j+1,b); } } } 3.4建立zuishao()函数 voidzuishao(list*&l) { intb=k[1],j; for(j=1;j<52;j++) { if(b>k[j+1]) { b=k[j+1]; } } printf("翻牌次数最少的是: \n"); for(j=0;j<52;j++) { if(b==k[j]) { if(l->data[j]==0) printf("%d,次数为%d.正面\n",j+1,b); else printf("%d,次数为%d.反面\n",j+1,b); } } } 3.5定义main()主函数 intmain() { list*a; build(a); intj=0; voidchange(list*&l);//翻牌 voidmore(list*&l);//翻动次数最多 voidless(list*&l);//翻动次数最少 change(a); printf("\n"); more(a); printf("\n"); less(a); printf("\n"); return0; } 4.调试分析 刚开始使用链表来存储数据,但是发现函数太过复杂而且有不可调节的错误。 后经测试发现使用线性表能够更好的存储和调用数据。 而且线性表更容易理解,而在使用过程中,数组的使用会导致结果的不同,如在子程序zuishao函数中,语句 intb=k[1],j; for(j=1;j<52;j++) { if(b>k[j+1]) { b=k[j+1]; } } 修改数组的下标,能够得到不同的数据 5.用户使用说明 5.1此程序可以在环境为C++Buildor6或者MicrosoftVisualC++6.0及其以上版本的地方直接运行。 5.2查看程序结果可直接运行源程序或者运行可执行文件,可直接得到运行结果。 6.测试结果 6.1运行源程序后直接得出的结果 6.2测试结果分析: 结果完全符合要求,编译中无错误无警告 7.总结 感觉这是一次极好的旅程,从开始的设计思路与程序的完成都十分顺利。 感谢老师提前把题目发出,让我们有了思考的空间和充足的时间来修改程序。 不得不说,每次的课程设计对自己来说都是巨大的挑战,对自己是否掌握了所学内容做出了检验。 数据结构这门课程相对于其他语言类课程来说,是我掌握的最多的一门了,然而当进行设计中需要c,,c++这些语言的时候我却感觉到了吃力,果然基础还是太过薄弱,所以这也激起了我要重新学习这些语言的念头,其实,应该是必须要重新复习,加深了解这些课程了。 总体来说,这次课设是完美的完成了,而且在这次课设中我的感悟也颇多,希望自己能够在这些体验与感悟中汲取经验,用实验中收获的教训来鞭策自己,让自己在学习中能够走得更踏实,更远。 8.附录 纸牌游戏源代码 #include #include typedefstruct { intdata[52]; }list; voidbuild(list*&l) { inti; l=(list*)malloc(sizeof(list)); for(i=0;i<52;i++) { l->data[i]=0; } } intk[52]={0}; voidfanpai(list*&l) { intj,i; for(j=2;j<=52;j++) { for(i=1;i<=52;i++) { if((i*j<=52)&&(l->data[i*j-1]==1)) { l->data[i*j-1]=0; k[i*j-1]++; continue; } if((i*j<=52)&&(l->data[i*j-1]==0)) { l->data[i*j-1]=1; k[i*j-1]++; continue; } } } printf("正面朝上的牌有: "); for(j=0;j<52;j++) { if(l->data[j]==0) printf("%d",j+1); } } voidzuiduo(list*&l) { intb=k[0],j; for(j=0;j<51;j++) { if(b { b=k[j+1]; } } printf("\n翻牌次数最多的是: \n"); for(j=0;j<52;j++) { if(b==k[j]) { if(l->data[j]==0) printf("%d,次数为%d.正面\n",j+1,b); else printf("%d,次数为%d.反面\n",j+1,b); } } } voidzuishao(list*&l) { intb=k[1],j; for(j=1;j<52;j++) { if(b>k[j+1]) { b=k[j+1]; } } printf("翻牌次数最少的是: \n"); for(j=0;j<52;j++) { if(b==k[j]) { if(l->data[j]==0) printf("%d,次数为%d.正面\n",j+1,b); else printf("%d,次数为%d.反面\n",j+1,b); } } } intmain() { list*a; build(a); intj=0; voidfanpai(list*&l); voidzuiduo(list*&l); voidzuishao(list*&l); fanpai(a); printf("\n"); zuiduo(a); printf("\n"); zuishao(a); printf("\n"); return0; } 课程设计评分表 课程名称: 数据结构 项目 评价 设计方案的合理性与创造性 设计与调试结果 设计说明书的质量 答辩陈述与回答问题情况 课程设计周表现情况 综合成绩 指导教师: 日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 纸牌 游戏 课程设计