欢迎来到天天文库
浏览记录
ID:47204034
大小:104.41 KB
页数:6页
时间:2019-08-26
《纸牌游戏课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、纸牌游戏3・1问题的提出・1问题的提出任务:编号为1・52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;…再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输岀:这时正面向上的牌有哪些?输出的纸牌号为:149162536493.2概要设计1.当每个号码每次遇到是某个数的倍数时,都会相应的翻一次,这样,每张牌会翻的次数就各不一样,可能很多次,也可能只有一两次,结果就只是要输出在经过
2、各个不同次数的翻牌后,正面向上的牌都有哪儿个。举例说明一下,比如24,第一次它是2的倍数时要从正面翻到背面,当进行到3时,就乂要从行面翻回来,而到4时还要在翻,同理呢,到6.8.12…它都要来回的翻。如果它在多次的翻牌后,正面还向上了,那么它就是要输岀的结果之一。2.用#defineOPPOSITE(i)i=i?0:1这个宏将牌的状态标志求反,也即为翻牌操作。将所有的牌建立一个数组,运用for的循环嵌套执行以下操作:把52张牌初始化成正面朝上、控制基数和翻牌次数,判断最终的纸牌朝向并打印出结果,具体实现算法参看详细设汁。3.3流程图根据算法思想,画流程图如下:
3、3.4源代码^include#dcfincOBVERSE0//正面朝上#defincADVERSE1//背面朝上#defincOPPOSITE(i)i=i?0:l//这个宏是将牌的状态标志求反,也即为翻牌操作voidmain(){intcard[52];//52张牌for(inti二0;i〈52;i++){card[i]=OBVERSE;//将52张牌初始化成正面朝上}for(intj=2;j<=52;j++)//此层循环是控制基数的{for(intk=j;k<=52;k++)//此层循环是控制从第几张牌开始{if(k%j二二0)//判断第k
4、张牌除以基数j后的余数是否为0,如为0就是能整除{OPPOSITE(card[k-1]);//翻牌for(inth=0;h<52;h++)//开始打印{if(card[h]==OBVERSE)//判断牌的状态是否为正面朝上{printf("第%d张牌正而朝上",h+1);3.5结果与分析1.这题的时间复杂度是0(52)。2.虽然本次程序的题目难度与其他问题相比不是很高,但仍有很多问题我们是很容易忽视的,其一:在理解题目的要求时,注意翻牌的次数可能有多次;其二:for循环的嵌套使用在书写时很容易漏掉大括弧。3.运用更多的基础算法,使得程序和算法思想得到更好的
5、表现,为增强算法的可读性,则算法改进如下:#includevoidmain()intizj,card[52];for(i=0;i<52;i++)//52张牌所有状态均为1,即均为正面card[i]=l;for(j=2;j<=52;j++)〃对52张牌(序号放在i里)对2,3...52(放在j里)按i+1是否是j的倍数进行状态翻转。for(i=0;i<52;i++)if((i+l)%j==O)card[i]=card[i]?O:l;printf「positivecardare:");for(i=0;i<52;i++)〃对翻转处理后状态仍然是止面
6、的(card保持为1)的将其编号输出。if(card[i])printf(H%dnzi+l);}}4•测试的结果如下:课程设计总结这个学期是我第一次接触《数据结构》,也是我第一次接触“课程设计”,在完成设计的过程中,我遇到了一系列的问题,能明显感觉到自己在很多方面的不足,但另一方面,问题是要分析解决的,找出问题以便为完善学习计划,改变学习内容与方法提供实践依据。所以在整个过程中,我不断加深了对数据结构的理解与一些程序写书时要注意的事项,体会了《数据结构》这门课程在解决现实生活问题上的可行性,也更进一步地激发了我的学习热情。做一个课程设计要注意很多方面,无论是格
7、式,还是书写的内容和要表达的思想都得严格要求自己,所以做起来真的不算容易。本次课程设计涉及了很多知识,由于往日没有学得很扎实,对某些问题仍然比较疑惑,所以要进行充足的补习。期间,我翻阅了很多书籍,知识总是联系很紧密的,解决完这个问题乂发现了新的问题,之后,为了解决新问题又发现了更多的问题,就这样,我得等到一个一个把问题处理完。问题越多,明白的也就会越来越多,做一次课程设计就像从头到尾做了一次系统的复习,从基础到难点,从轮廓到每个知识点,数据结构的研究内容在我的脑海里就再也不像以前那么模糊了。设计程序来解决现在存在的问题,把理论知识付诸于实践,对于我们这些计算机
8、专业的本科生来说,实际能力的培养至关重
此文档下载收益归作者所有