设计题目:猜数字游戏 目目 录录 目录目录 目 录...........................................................- 1 - 1 程序分析与设计....................................................2 1.1 功能分析与任务分配 ..........................................2 功能分析 ........................................................2 1.2 流程图.......................................................2 1.3 数据结构 ....................................................4 2 详细设计..........................................................4 3 参考文献..........................................................5 4 附录..............................................................5 5 总结 .............................................错错误!未定义书签。误!未定义书签。 《C 程序设计》课程设计实验报告 1 程序分析与设计 1.1 功能分析与任务分配 功能分析 此游戏程序通过不断输入以及逐渐数位对应的方法,一步步的缩小猜测范 围,最终猜出机内已存储数字,达到健脑益智的效果。 此数字游戏没有设置猜测次数的上限. 简单策略 这种策略非常直接 ——每次都猜可能答案中的第一个。 例如,首先猜测 1234,如果得到的反馈是2A2B,那可能的答案包括1256,1257,5236, 等等。根据简单策略,下一次就猜1256,因为 1256 是所有可能答案中最小 的数字。 简单策略的优点是速度非常快,缺点是所需猜测次数很多。 启发式策略 这类策略是猜数字游戏最常用的解法。其算法步骤如下: a. 首先猜 1234,得到第一个反馈( xAyB) 。 b. 从所有数字中,筛选出满足已知反馈的所有可能数字,称之为“可能 集”。 c. 对于所有数字(而不仅限于筛选出来的可能集) ,逐一评估每个数字 的“好坏”,并给其打分。选取得分最高的那个数字猜。如果有多个数 字的评分一样高,则优先选取可能集中的数字。 d. 重复步骤b-c,直到猜出4A4B 为止。 (2)任务分配 李晓飞和谭程方同学:实现猜测数据后的*A*B 编写功能,即规则c. 王璐和王爽同学:实现统计每次猜对数字个数的功能,即规则d. 王鹏宇同学: 实现统计每次猜对的数字并且位置也对的数字个数, 即规则 e. (备注:在实际操作中由于每位同学所用变量习惯以及掌握程度不同,所 以此程序任务分配可能会部分的与上不符,最后还要对任课老师魏玉芬以 及指导老师丁艳清表示衷心的感谢,感谢两位老师给予我们的帮助!) 1.2 流程图 《C 程序设计》课程设计实验报告 开始 j<4 Y 输入 y[j] N i<4 N YN j<4 Y x[i]==y[j]x[i]==y[i] 输出 n1 输出 n2 n1An2B n2==4 NY 输出“恭喜你答对了” 输入非 0 数字输入 0 输出 “正确答案是 2569” 结束 《C 程序设计》课程设计实验报告 1.3 数据结构 k 猜测的次数 b 一次猜测后用来判断是否继续进行新的猜测 n1 猜对的数字数 n2 猜对并且位置也对的数字数 i、j 用来表示两个数组的对应数位数 x[4]={2,5,6,9} 定义将要被猜测的数字为 2569 y[4] 从键盘输入的四位数 2 2 详细设计详细设计 通过逐步减少范围来猜测正确结果 《C 程序设计》课程设计实验报告 3 3 参考文献参考文献 [1]谭浩强著《C 语言程序设计》北京:清华大学出版社 2005 [2]百度知道 4 4 附录附录 #include void main() { int k,n1,n2,b,x[4]={2,5,6,9},y[4]; //定义将要被猜测的数字为 2569// int i=0,j=0; for(k=1;;k++) //只要不放弃,就可以使猜测无数次的进行下去// { n1=0;n2=0;//n1 用来统计猜对的数字数, n2 用来统计猜对并且位置也对的 数字数// printf("请输入四个不同的数字:"); for(j=0;j<4;j++) scanf("%d",//用来输入四个不同的数字// for(i=0;i<4;i++) { for(j=0;j<4;j++) if(x[i]==y[j]) n1++; //统计 n1// } for(i=0;i<4;i++) if(y[i]==x[i]) n2++;//统计 n2// printf("%dA%dB\n",n1,n2); printf("n1=%d,n2=%d\n",n1,n2); //给出本轮猜测的结果// if(n2==4) break; printf("如果想放弃,请输入 0;如果不想放弃,请输入任意非零数字\n"); scanf("%d", if(b==0) printf("正确答案是:2569"); else printf("请继续猜测\n"); } if(n2==4) printf("恭喜你答对了!"); } 《C 程序设计》课程设计实验报告 5 5 总结总结 C 语言是我们在大学学习中接触的第一种计算机语言,将其作为我们学生学 习程序设计技术的入门课程,我想这与C 语言的特点是分不开的。C 语言不但可 以编写系统软件,而且可以根据用户的需要编写出满足用户要求的应用软件,尤 其是 C 语言具有很好的对计算机的硬件编程能力。同时,C 语言具有逻辑性强、 处理问题周密、严谨的特点,是集知识和技能于一体,实践性很强的课程。我们 通过学习 C 语言可掌握程序设计的一些基本方法和技巧。 然而 C 语言的数据类型 较多、 表达式丰富、 语法结构较复杂, 使它成为一门教师难教、 学生难学的课程。 就拿这次来说吧,程序是很简单的,但是遇到的困难也不少。下面我见对我们组 编的这套程序做一下概述: 我们选的是编写一个猜字游戏,要求才一个四位数字,每次猜完,要有一个 提示“*A*B”其中 A 前的*代表本次猜对了的数字,B 前的*代表本次猜对了的数 字并且位置正确的个数。 由于程序较小,没有太过困难的地方,所以我们最主要用到的是 for 循环语句, 首先,假设这四位数是2569,我们定义n1,n2,让n1 代表猜对的数字个数,让 n2 代表猜对的数字并且位置准确的个数,然后再定义一个 k 是猜测的次数(这 里为了很好的显示猜测的过程),接下来开始执行这个语句,也就是我们利用的 for 循环语句,for(j=0;j<4;j++)我们先把猜的数用这个循环体执行,进而输入 四个不同的数,for(j=0;j<4;j++) if(x[i]==y[j]) n1++;再用一次循环体统计 出 n1,这样循环下去直至正确数字被猜出。同样n2 也是如此。在编译过程中发 现利用 for 循环语句只用一条语句可以了,相对于 do„while 更简单一些。 程序大体编完了, 但是分配是因为大家思想不同,对于不同的地方用的语句 不一致,所以在把所有程序整合到一起时,不能正常的运行,做了多处修改,最 后才能运行的, 其次再将语句转为流程图时遇到了不小的麻烦,对一些较为复杂 的程序,转为 ns 图比较麻烦,有次看到我们的弊端,对于这种转化逻辑能力太 差,经过反反复复的修改总算完成。 在这次实习中我们的程序还有一个遗憾, 算是缺陷吧!就是猜数字的数字是 事先用 int 定义好的, 我们本意是在每次程序运行开始时, 产生一个随机四位数, 《C 程序设计》课程设计实验报告 这样需引用#include#include可惜不大会用, 最后只能 放弃。这看出我们才学了些皮毛,对于一些高等的函数体不会引用, 我觉得还是多看些书,多实践,养成良好的编程习惯,在实践的同时多思考 问题,多看别人优秀的解题思路与方法,多看别人优秀的代码,尝试自己去实现 或者说模仿着去实现,让别人对你的代码多提意见,探究别人的思维过程,增强 自己的思维能力, 尤其像这样的实习, 我们应该多交流, 多交换方法, 才能进步。
展开阅读全文