数据结构课程设计纸牌游戏.docx
- 文档编号:24268466
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:7
- 大小:95.62KB
数据结构课程设计纸牌游戏.docx
《数据结构课程设计纸牌游戏.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计纸牌游戏.docx(7页珍藏版)》请在冰豆网上搜索。
数据结构课程设计纸牌游戏
数据结构课程设计报告
题目:
纸牌游戏
采用的方法:
在程序中定义一个宏,用宏来表示翻牌操作。
用一个for循环来控制基数,用另一个for循环来控制从第几张牌开始,然后判断第K张牌除以基数j后的余数是否为0,如为0就是能整除,最后翻牌。
班级:
计算机091班
******
指导教师:
董跃华、井福荣
成绩:
__________________________
信息工程学院
2011年6月20日
题目(摘要)
问题描述:
编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的,直到以52为基数的牌翻过,输出:
这时正面向上的牌有哪些?
1.引言:
通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在学校和离校后的工作和学习,也有重要意义。
数据结构是电子信息科学与技术专业的一门核心专业基础课程,在该专业的课程体系中起着承上启下的作用,学好了数据结构对于提高理论认知水平和实践能力有着极为重要的作用。
学习数据结构的最终目的是为了获得求解问题问能力。
对于现实世界中的问题,应该能从中抽象出一个适当的数学模型,该数学模型在计算机内部的数据结构来表示,然后设计一个解此数学模型的算法,在进行编程调试,最后活的问题的解答。
基于此原因,现在我们开设数据结构课程设计。
针对数据结构课程的特点,着眼于培养我们的实践能力。
2.需求分析:
可以定义一个宏,如果第k张牌除以基数j后的余数是否为0,如为0就是能整除,然后就利用定义的宏进行翻牌操作。
设一个一维数组card[52],并将所有变量赋初值为0,表示牌正面朝上。
首先将52张牌初始化成正面朝上,然后用一个for循环来控制基数,用另一个for循环来控制从第几张牌开始。
最后打印判断出来的正面朝上的牌。
3.概要设计:
1.当每个号码每次遇到是某个数的倍数时,都会相应的翻一次,这样,每张牌会翻的次数就各不一样,可能很多次,也可能只有一两次,结果就只是要输出在经过各个不同次数的翻牌后,正面向上的牌都有哪几个。
举例说明一下,比如24,第一次它是2的倍数时要从正面翻到背面,当进行到3时,就又要从背面翻回来,而到4时还要在翻,同理呢,到6.8.12…它都要来回的翻。
如果它在多次的翻牌后,正面还向上了,那么它就是要输出的结果之一。
2.用#defineOPPOSITE(i)i=i?
0:
1这个宏将牌的状态标志求反,也即为翻牌操作。
将所有的牌建立一个数组,运用for的循环嵌套执行以下操作:
把52张牌初始化成正面朝上、控制基数和翻牌次数,判断最终的纸牌朝向并打印出结果,具体实现算法参看详细设计。
4.详细设计:
N
Y
N
Y
N
Y
图2-1
5.测试结果:
图2-2
6.调试分析:
(1).这题的时间复杂度是O(52)。
(2).语法错误相对来说要好调试一些的,但有两点需要特别指出:
一是应该用规范化的格式输入源程序,推荐的格式是:
函数体内、循环体内等都应该缩进一个TAB位,相应的块语句的两个大括号都应保持在同一列上,函数体之间、模块之间都应用空行隔开,这就解决了各种匹配的问题,更重要的是它极大的增强的程序的可读性。
二是应该注意函数的实参与形参的传递问题,要尽量保持两者类型的匹配,(当不匹配又可通过编译时会发生数据类型的隐式转换,这样会产生很多不安全且又很难找到的错误)当不需要改变形参时,只需传入变量,如果你想在函数体内改变函数的外部变量,则传入指针。
(3).虽然本次程序的题目难度与其他问题相比不是很高,但仍有很多问题我们是很容易忽视的,其一:
在理解题目的要求时,注意翻牌的次数可能有多次;其二:
for循环的嵌套使用在书写时很容易漏掉大括弧。
7.设计体会:
做一个课程设计要注意很多方面,无论是格式,还是书写的内容和要表达的思想都得严格要求自己,所以做起来真的不算容易。
本次课程设计涉及了很多知识,由于往日没有学得很扎实,对某些问题仍然比较疑惑,所以要进行充足的补习。
期间,我翻阅了很多书籍,知识总是联系很紧密的,解决完这个问题又发现了新的问题,之后,为了解决新问题又发现了更多的问题,就这样,我得等到一个一个把问题处理完。
8.结束语:
问题越多,明白的也就会越来越多,做一次课程设计就像从头到尾做了一次系统的复习,从基础到难点,从轮廓到每个知识点,数据结构的研究内容在我的脑海里就再也不像以前那么模糊了。
设计程序来解决现在存在的问题,把理论知识付诸于实践,对于我们这些计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践,这也是我们学习的目的。
做完设计,我已深刻体会到了学习这门课程的重要性与必要性了,同时,它留给我很多思考:
学习是思考一个的过程,我们应该主动去想学习一门知识后怎么去运用,而不是一味地被动地接受。
数据结构及其算法在解决现实生活中的常见问题和书写软件设计方面上都有着重要的意义,我们应该好好掌握它的相关知识,在以后的学习过程中,更多的去学会如何运用知识。
在此,我衷心感谢董跃华老师的指导!
参考文献:
1、姜学军《数据结构》(C语言版).中国轻工出版社
2、严蔚敏《数据结构》(C语言版).清华大学出版社
3、徐孝凯《数据结构实用教程》(C/C++描述).清华大学出版社
4、陈慧南《数据结构》(使用C++语言描述).东南大学出版社
附录:
源程序:
#include
#defineOPPOSITE(i)i=i?
0:
1
intmain()
{intcard[52],i;
for(;;){
printf("\n*********************纸牌游戏功能菜单表***********************\n");
printf("*1:
按照游戏规则翻牌,并输出翻牌结果*\n");
printf("*2:
退出*\n");
printf("*********************纸牌游戏功能菜单表***********************\n");
printf("\n请按1,2完成操作:
");
scanf("%d",&i);
switch(i){
case1:
for(inti=0;i<52;i++)
{
card[i]=0;//将52张牌初始化成正面朝上
}
for(intj=2;j<=52;j++)//此层循环是控制基数的
{
for(intk=j;k<=52;k++)//此层循环是控制从第几张牌开始
{
if(k%j==0)//判断第k张牌除以基数j后的余数是否为0,如为0就是能整除
{
OPPOSITE(card[k-1]);
}
}
}
printf("**********************************\n");
printf("正面朝上的牌有:
");
for(inth=0;h<52;h++)//开始打印
{
if(card[h]==0)//判断牌的状态是否为正面朝上
{
printf("%d",h+1);
}
}
printf("\n**********************************\n");break;
case2:
printf("已退出!
\n");return0;
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 纸牌 游戏