c随机发牌课程设计报告.doc
《c随机发牌课程设计报告.doc》由会员分享,可在线阅读,更多相关《c随机发牌课程设计报告.doc(18页珍藏版)》请在咨信网上搜索。
1、学号2016-2017学年 第2学期1608220203高级语言程序设计课程设计报告题目:随机发牌专业:网络工程班级:16(3)姓名:代应豪指导教师:代美丽成绩:目录一、设计内容及要求 3二、概要设计3(1)系统功能与分析(填写你所设计的菜单及流程图)3(2).数据结构(程序中所使用的变量、数组、结构体)8(3).模块设计9(4)调试过程: 测试数据及结果,出现了哪些问题,如何修改的10三、设计结果与分析11(5)程序有待改进的地方及本次实习的收获和建议13四、程序代码13附录:完整、可运行代码及注释16一、设计内容及要求1 进一步掌握和利用C语言进行程设计的能力;2、 进一步理解和运用结构化
2、程设计的思想和方法;3、 初步掌握开发一个小型实用系统的基本方法;4、 学会调试一个较长程序的基本方法;5、 学会利用流程图或N-S图表示算法;6、 掌握书写程设计开发文档的能力(书写课程设计报告);二、概要设计(1)系统功能与分析(填写你所设计的菜单及流程图)系统功能综述本文本编辑器通过菜单的选择可以实现对扑克牌的构建、洗牌和发牌的功能,并可将最初始的扑克牌的花色与面值显示出来以及发牌后的花色与面值显示出来 设计的主菜单程序初始化主窗口1 低效洗牌2 低效发牌 选择执行的 操作4高效洗牌发牌3 退出 N-S流程图main()主函数定义显示菜单的函数定义构建扑克牌的函数定义低效洗牌的函数定义低
3、效发牌的函数定义高效洗牌、发牌的函数定义扑克牌花色的函数定义扑克牌面值的函数初始化二维数组deck为0初始化一维数组huase初始化一维数组dianshu调用菜单函数 当为真时调用构建扑克牌函数输入用户所需要的选择根据用户的选择进行功能 根据根据void suit(struct puke pk52)判断行数,打印正确的花色void face(struct puke pk52)判断列数,打印正确的面值 分析与设计说明每个函数的基本功能及函数的重要变量的意义: void menu() /*打印主菜单栏*/void make(struct puke pk52) /*构建一副扑克并打印起初的扑克顺序*
4、/void ordinary_shuffle(struct puke pk52) /*进行低效洗牌*/void ordinary_deal(struct puke pk52) /*进行低效发牌*/void effective(int deck13,char huase,char dianshu) /*进行高效洗牌、发牌*/void suit(struct puke pk52) /*打印扑克的花色*/void face(struct puke pk52) /*打印扑克的面值*/各函数中的重要变量的意义详见下面源程序段的解释说明部分各函数的之间的相互关系:(2).数据结构(程序中所使用的变量、数组
5、、结构体)变量e 使用户选择所需要操作的功能的按键 i 定义为152张牌,在14内的随机变量t 定义为随机变量进行运算后所赋的值tds 某张牌的面值在实现洗牌功能时暂时存放的变量地址ths 某张牌的花色在实现洗牌功能时暂时存放的变量地址temp 扑克牌在实现高效洗牌、发牌时,某张牌暂时存放的变量地址row 表示行数column 表示列数card 代表52张扑克牌jishu 表示在实现高效洗牌、发牌时,发牌的牌数数组deck413 定义为一个4x13的二维数组deck表示一副牌。行与花色对应:第0行代表红心、第l行代表方块、第2行代表草花、第3行代表黑心。列代表牌的面值:第0列到第9列对应于“A
6、”到9,第10列到第12列对应于“J”、“Q和“K”。字符串数组suit代表四种花色,字符串数组face代表13张牌的面值。huase4 定义扑克牌的花色:第0行代表红心、第l行代表方块、第2行代表草花、第3行代表黑心dianshu13 定义扑克牌的面值:第0到13列分别用A,2,3,4,5,6,7,8,9,10,J,Q K结构体struct puke 用来定义扑克牌的花色与面值,使得扑克牌被打印时能够显示出每张牌的特征(3).模块设计根据功能需要:在运行程序时调用了 这几个头文件源文件函数名功能fapai-xipai.cvoid main()主函数void menu()打印主菜单栏void
7、make(struct puke pk52)构建一副扑克并打印起初的扑克顺序void ordinary_shuffle(struct puke pk52)进行洗牌void ordinary_deal(struct puke pk52)进行发牌void effective(int deck13,char huase,char dianshu)进行高效的洗牌、发牌void suit(struct puke pk52)打印扑克的花色void face(struct puke pk52)打印扑克的面值(3)总体设计思想:先定义一个扑克牌的结构体变量,成员列表中包含扑克牌的花色与面值创建主菜单栏,表明此
8、程序的主要用途及相关操作步骤如果要进行此游戏则进行构建一副扑克牌并将其牌最初始的52张牌的花色与面值显示出来以达到游戏的公正性1.询问是否进行洗牌操作,若选择“1”则调用void ordinary_shuffle(struct puke pk52)函数进行洗牌。此函数是循环有限次,在每次循环时都让系统随机取一个数除52取余得变量t即范围为113(也就是在AK这13个数中任取一数),并同时将52张牌的首个面值与花色付给变量tds与ths,然后利用上面的变量t在这52张牌中随机取值,将其花色与面值从第1张牌开始进行随机地替换,这样就达到了低效洗牌的功效了;2.然后继续询问要执行哪个操作。3.若选择
9、“2”则调用void ordinary_deal(struct puke pk52)函数进行发牌。进行52次循环,调用suit(pk)函数(利用switch语句显示每张牌的花色:第1行代表红心、第2行代表方块、第3行代表草花、第4行代表黑心)与face(pk)函数(利用switch语句显示每张牌的面值:第0列到第9列对应于“A”到9,第10列到第12列对应于“J”、“Q和“K”)。这样就可以把52张牌的花色与面值显示出来,从而也就完成了发牌的功能。的每一张牌呢?因为数组suit已经预载人了四种花色,所以通过打印字符串suitrow来获得花色。同样,打印字符串facecolumn可获得牌的面值。
10、4.接着继续询问要进行哪个操作,若选择“4”,则调用void effective(int deck13,char huase,char dianshu)函数进行高效的洗牌、发牌操作。首先,把数组deck清为0;然后,随机地从03中选择一行(row),从012中选择一列(column)。把数1插入到数组元素deckrowcolumn中并作标记card=1,之后的每一个循环就依次累加。表示这张牌将是从洗好的牌中发出的第一张牌。继续这个过程,把数2、3、52随机地插入到数组deck中表示从洗好的牌中发出的第2、第3、第52张牌。若card已经标记到13,则需换行。在把发牌序号插入到数组deck中的过
11、程中,一张牌被选择两次是可能的,即选中它时,deckrowcolumn可能会重复。遇到此情况,系统就会把它忽略不做任何处理,跳出本循环,继续反复地随机选择其它的row和column,直到发现没有被选中过的牌为止。这样牌的序号1到52最终会分给数组deck中的52张牌。这时,这副牌就算完全洗好了。用这种方法系统调用的函数就只有一个,而且使用嵌套的for循环使系统运行得更有效率。5.如此循环地询问操作,直至用户输入“3”退出此程序。(4)调试过程: 测试数据及结果,出现了哪些问题,如何修改的调试过程:在发牌的过程中,第一张牌缺少花色原因:对变量局部i进行重复定义,导致变量i值在第二次调用时出错修改
12、:将局部变量i定义成全局变量在使用recycle函数递归调用时,并没有多次循环,只执行一次就结束了原因:在此程序中,recycle函数的递归调用并没有限制条件,它会无终止地进行,导致内存空间不足,甚至死机修改:将recycle函数改成while函数进行多次循环在执行完发牌之后,进行循环,可是第二次循环却未执行洗牌之后的工作,而进行在此循环原因:scanf 与getch()函数在输入上有所区别。利用getch()函数输入一个字符之后,必须再按回车键,而所按的回车键会被内存记录,使得“n”成为变量e的一个值,从而导致多输入了一次 shuffle the deck(1/0)?: 语句。若使用scan
13、f函数则不会出现此问题,虽然也要再输入回车键,但并不会将“n”赋值给e变量修改:将输入Y/N形式修改为1/0,并将e=getch(); 修改为scanf(“%d”,&e); 在使用void effective(int deck13,char huase,char dianshu)进行高效洗牌、发牌操作时,发出的牌显示得很凌乱,没有规律性的分布原因:高效发牌时,并不是每张牌都会打印出来,因此会显得凌乱,没有规律修改:增加初始化了的变量jishu,在打印完扑克牌之后,判断是否已经达到发过13张牌,若已发过13张牌,则换行三、设计结果与分析初始化界面输入“1”进行低效洗牌后,会继续询问用户作何操作然
14、后继续输入“2”后就会显示低效洗牌后的结果,并继续询问用户作何操作然后继续输入“4”进行高效洗、发牌显示其结果,并继续询问用户作何操作然后继续输入“3”后,就会推出DOS界面,结束此程序 (5)程序有待改进的地方及本次实习的收获和建议待改进:本程序是将扑克牌的正面(即牌面的花色与面值都显示出来),而实际生活中洗牌与发牌的过程都是背面朝上,并不能知道其牌值。因此洗牌、发牌过程中的正反面问题有待改进 本程序是用文本编辑器 win-tc写的,发牌效果不是特别好,需将牌的展示生动化写成图形界面效果更佳 本程序还有一些小小的细节问题,仍有待改进收获:由于这是第一次自己写这么大型的程序(相对以往写的程序而
15、言),一开始琢磨了很久也琢磨不出什么,通过一番努力。终于写出了一些程序段,然而在写程序的过程中出现了很多错误,碰了不少钉子,但通过他人的指导、帮助与自己不断修改与改进让我对C语言的知识有了更进一步的改进,学会了如何从一个题目入手进行有效的算法分析,写出合理的数据结构,并使程序运行得更加有效率。同时也发现了自己的不足:对C语言的掌握还不是特别好,特别是到了指针那部分之后就基本上没有什么概念了。建议:C语言课程的内容较多,运用起来时常会出错,有时甚至怎么找也找也找不出来,老师能多在下面转转,观察观察学生的实践情况以及设计进度,适时提出合理的建议或意见供同学们参考。 自己也要多看看书,把C语言掌握透
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 随机 发牌 课程设计 报告
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。