欢迎来到天天文库
浏览记录
ID:9334297
大小:1.07 MB
页数:18页
时间:2018-04-28
《纸牌游戏-课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、课程设计报告2009~2010学年第2学期课程数据结构与算法课程设计名称纸牌游戏2010年5月一、问题分析和任务定义1.题目:纸牌游戏2.要求和任务:①该题目的要求如下:(1)将52张牌编号。(2)从2开始,依次作为基数对基数的倍数的牌进行翻转,直到以52为基数的翻转。(3)最后输出正面向上的牌。②基本任务为:(1)按照要求翻转纸牌。(2)输出最后正面向上的纸牌的编号。3.原始数据的输入及输出格式:原始数据要求输入纸牌的基础编号,编号的输入为整型。输出的是经过规律翻转后正面向上的纸牌的编号。输入的数据信息如下:纸牌:1、2、3……、51、52。问题直观
2、分析表:123456789101112……12√√√√√√3√√√√4√√√5√√6√√7√8√9√10√11√12√…………(注:图中“√”表示翻转一次。)二.数据结构的选择和概要设计1.数据结构按照题目要求,整个主体包括一个嵌套的循环,外循环控制从2开始每张纸牌都作为基数进行翻牌,内循环控制对所有纸牌进行判断,如果是当前循环中基数的倍数,则对其进行翻转操作。具体代码如下:for(i=2;i<=52;i++){for(j=1;j<=52;j++){if(j%i==0)data[j-1]=data[j-1]*Flag;}}2.概要设计按照题目的要求,首
3、先,应对52张牌进行编号并且保存它们的编号信息,编号的类型为整型,而对于这样固定的数据,使用整型数组是最好的,因此,我们需要在程序的开始定义一共整型的数组,同时,为了方便对翻转过程的记录,在定义记录编号信息的同时,定义一个与之相对应的标记数组,数组类型为整型。该程序的核心为一个嵌套的循环,所以定义两个变量i,j作为循环条件。接着开始对变量进行初始化,首先是编号信息数组,使用for循环对数组进行1到52的赋值,代表52张纸牌,然后对标记数组赋值,将数组内的所有的值初始化为零,方便在接下来的循环中统计每张牌的翻牌数。数据初始化结束后,开始按照要求对纸牌进行
4、翻转,在嵌套循环中,定义了一个全局变量Flag,值为-1,负数定义为向下,正数定义为向上,这样,翻转一次,即乘以Flag,同时,符合翻转条件时,标记数组相应的编号的纸牌翻牌次数+1。循环结束后,编号数组中的数据已经更新,因此对数组进行扫描,大于零的即为正面向上的纸牌,输出其编号即可,同时,输出标记数组中的值,显示每张牌的翻牌记录,方便观察或者寻找规律。到此,整个题目结束。三.详细设计和编码1.定义全局变量:作为判断纸牌是否向上的依据,我们需要定义一个全局变量Flag=-1,在循环中对所有纸牌进行操作。2.主要程序代码与分析如下:#defineFlag-
5、1(考虑到最后要判断哪些纸牌是正面向上的,所以必须要有一共判断条件,因此定义一个全局变量作为正反面的判断条件。)voidmain(){inti,j,data[52],flag[52];charm;(在程序开始,建立了两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录,便于后面对翻牌次数的输出。)for(i=1;i<=52;i++){data[i-1]=i;(通过for循环,向数组中录入1-52个数,作为52张牌的编号,以便进行接下来的操作)flag[i-1]=0;(将flag数组中的相应编号纸牌的翻牌数初始化为0,在接下来的循环中,
6、需要对翻牌次数进行统计。)}for(i=2;i<=52;i++)(嵌套循环的外循环,保证基数的循环。){for(j=1;j<=52;j++)(嵌套循环的内循环,对每张纸牌进行基数的倍数条件判断){if(j%i==0){data[j-1]=data[j-1]*Flag;flag[j-1]++;(翻牌一次,则相应的标记数组中该编号的位置数值+1,即将翻牌次数记入flag数组中。)}}}printf("最后所有正面向上的牌有:");for(i=0;i<52;i++){if(data[i]>0)(该题目中将大于零的编号定义为正面向上的纸牌的编号)printf(
7、"第%d张牌",i+1);}printf("");}以上为程序主要代码的分析。在程序中,主要还包括功能界面,如下:printf("t-----------------------------------------------------------");printf("t-----------------------------------------------------------");printf("t---------欢迎进入纸牌游戏-----------");printf("t---------1.查看题目----
8、-------");printf("t---------2.查看所有纸牌的翻牌次数---
此文档下载收益归作者所有