ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:170.06KB ,
资源ID:8570999      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8570999.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言程序课程设计猜数字游戏.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言程序课程设计猜数字游戏.docx

1、C语言程序课程设计猜数字游戏C语言程序设计课程设计评语:考勤(10)纪律(10)过程(40)设计报告(30)答辩(10)总成绩(100)专 业: 自动化 班 级: 姓 名: 学 号: 指导教师: 兰州交通大学自动化与电气工程学院2015年07月21日一引言1.1设计目的复习和巩固C语言基础知识,进一步加深对C语言的理解和掌握。提高同学将课本上的理论知识和实际结合的能力,锻炼同学的分析解决实际问题的能力,提高同学团队合作的能力。使同学们善于观察和思考,善于合作,具备实践编程的基础素质,和实际问题分析的思考方式。1.2设计要求在设计时充分地分析和理解问题本身,综合考虑系统功能,怎样使系统结构清晰、

2、合理、简单和易于调试。然后详细设计,确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。最后认真完成课程设计说明书,并对设计方法,结果等进行总结。充分地分析和理解问题本身,弄清要求做什么(What to do?)。在确定解决方案框架过程中(How to do?),综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。确定算法的主要流程,在此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。静态检

3、查主要有两种途径:(1)用一组测试数据手工执行程序;(2)通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。二基础题2.1题目用选择法对10个数进行排序。有一个已排好序的数组。现输入一个数,要求按原来的规律插入到原数组中。2.2解题思路程序的主要功能是对数组元素用排序函数按从小到大的顺序进行排序。先定义一个10个元素的一维数组a10,然后从电脑输入10个数(也就是对数组赋值),然后使用一次fun()函数,对这10个数进行排序;然后再定义一个11个元素的一维数组b11,同时再从电脑输入一个数同a10一起赋值给b11,然后再使用fun()函数,重新排序的到最后的有顺序的一组数据。2.3流程图

4、子函数流程图如图1所示:图1 基础题子函数流程图主函数流程图如图2所示:图2 基础题主函数流程图2.4源代码基础题源代码见附录A。2.5运行及测试结果运行及测试结果如图3所示:图3 基础题运行及测试结果截图三改错题3.1题目#include int fun()int a33,sum;int i,j;_;for(i=0;i3;i+) for(j=0;j3;j+) scanf(%daij);for(i=0;i3;i+) sum=sum*aii;printf(累乘积=%dn,sum);main()fun();3.2解题思路程序的功能:这是一个求3*3矩阵主对角线元素累乘积的程序。程序分析:可以看出源

5、程序中,先声明了一个子函数,并定义子函数fun()累乘积函数(这个函数就是先定义了一个3*3的二维数组,然后从键盘输入数值对这个二维数组进行了数组赋初值,赋值过程中使用了for循环语句,然后利用for循环语句对主角线的元素做每个数的乘积,最后是输出这个累乘积。)。最后就是主函数main(),主函数中使用一次子函数fun()。3.3错误分析错误一:原程序中对sum没有设置初值,应设置为“sum=1;”;错误二:scanf()函数中没有使用地址运算符,应在数组前加“&”错误三:子函数也没设返回值,返回值应为 “return sum;”。3.4改错后的源代码改错后的源代码见附录B。3.6运行及测试结

6、果运行及测试结果如图4所示:图4 改错题运行及测试结果截图四综合题4.1题目设计课题四:猜数字游戏一问题描述该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。如果4A0B,表示游戏成功。每次猜错会有提示,如果八次都未猜对,游戏失败,显示正确答案。按任意键可以返回主菜单。主要应运数组和循环实现改功能。(对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。)二功能要求 1.游戏显示这样的菜单: (1)随

7、机产生数据 (2)用户输入数据 (3)退出游戏2.游戏成功与否都能返回主菜单三算法提示1.数据结构:数组2.用简单的程序设计方法四测试数据测试数据:3792第一次输入: 12340A2B 第二次输入: 5678 0A1B 第三次输入: 08670A1B 第四次输入: 9786 1A1B 第五次输入: 1794 2A0B 第六次输入: 27932A2B 第七次输入: 3792 4A0B 游戏成功五其它对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。4.2设计思路此游戏程序通过不断输入以及逐渐数位对应的方法,一步一步的缩

8、小猜测范围最终猜测出机器内已经存储的数字,达到健脑益智的效果。这种策略非常直接每次都猜可能答案中的一个。例如:首先猜测 1234 ,如果得到的反馈是 2A2B 那么可能的答案包括 1256 1257 5326 5236 等等。根据简单策略,下一次就猜 1256 ,因为 1256 是所有可能答案中最小的数字。简单策略是程序运行速度非常快,缺点是所猜测的次数较多。利用主函数调用子函数来实现模块化程序设计。将游戏的每一个功能设计成一个子函,数调用完成游戏。主要分为两大模块:随机模式和用户模式。猜数字游戏的主要功能,由系统自动产生4个随机排列的整数,或者由用户输入4个不同的整数,并给用户8次机会猜测数

9、字的数值和排列顺序。如果用户在8次之内没有猜出正确的结果,则提示用户游戏失败,否则提示用户猜数字成功。该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。如果4A0B,表示游戏成功。每次猜错会有提示,如果八次都未猜对,游戏失败,显示正确答案。按任意键可以返回主菜单。主要应运数组和循环实现改功能。可以对系统在实现系统基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。4.4流程图主程序流程图如图5所示: 图5 主程序流程图4.5源代码源

10、代码见附录C。4.6运行及测试结果开始界面如图6所示:图6 开始界面结果截图使用说明界面如图7所示:图7 使用说明界面截图成功进行了一次游戏如图8所示:图8 完整一次游戏截图4.7总结C程序课程设计是理论和实际的结合,通过这次程序的设计,提高了我的c语言水平,比如,查阅资料的重要性,对程序的整体性把握。而且对整体的掌控,还有对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,积累了经验,但是当自己根据此思路设计出程序时,程序的运行出现了一些问题,这些问题出现时,我通过查阅资料,并且和同学交流,最终经过几次的修改,运行结果和期待的相同。通过这次的课程设计,我感觉到自己的C语言知识很少,这

11、次题目,可以让我掌握更多的知识,更好的了解c程序的编译过程,分析阶段,我的分析思路如下,进行面向对象的需求分析,系统设计,画出相应需求分析图,流程图,有了流程图,可以让我更好的理解这个程序的设计方法。我还感觉到上机操作的重要性,以前我只是在书上看,而没有过多的上机操作,就算一个程序能写出来,上机操作的结果也未必正确,有时候自己对一个程序信心十足,但是如果上机操作,那么就有很多问题,并且遇到错误不要灰心,要一步一步的改,直到能运行出正确的结果为止,还有就是借助资料的重要性,一道题如果不会作,我们要借助资料来对比和解决,学习是一个不断完善的过程,要正视自己的不足之处,遇到不足的之处,要自己完善,比

12、如,我体会到自己c语言知识知道的很少,在以后,我要学习和完善自己的C语言知识,还有,自己的实际操作太少,在以后学习C程序设计的过程中,要注重实际操作,而不只是在书上看看就完了。参考文献1谭浩强著.C程序设计(第四版).北京:清华大学出版社,20102蔡志明著.指针的艺术.中国水利水电出版社,20093谭浩强编著.C程序设计(第三版).北京:清华大学出版社,20054谭浩强著.C程序设计教程.北京:清华大学出版社,20075谭浩强著.C语言程序设计(第2版).北京:清华大学出版社,20086谭浩强编著.C程序设计题解与上机指导(第三版).北京:清华大学出版社,20057谭浩强编著.C+程序设计.

13、清华大学出版社,20048谭浩强著.C程序设计(第四版)学习辅导.北京:清华大学出版社,20109陈明编著.计算机导论.北京:清华大学出版社,200910C编写组编.常用C语言用法速查手册.北京:龙门书局,1995附录附录A#include void main() void fun(int a ,int n);int a10,i,k,b11;printf(请输入十个数:n);for(i=0;i10;i+) scanf(%d,&ai); fun(a,10); /使用了一次fun()子函数printf(重新排序:n);for(i=0;i10;i+) printf(%d ,ai); printf(n

14、); printf(请输入一个插入的数:n);scanf(%d,&k); for(i=0;i10;i+) bi=ai; b10=k; fun(b,11); /使用了一次fun()子函数printf(重新排序:n); for(i=0;i11;i+) printf(%d ,bi); printf(n);void fun(int a ,int n) /编写子函数 int i,j,k,temp; for(i=0;in-1;i+) k=i; /k的作用是记录要交换的位置 for(j=i+1;jn;j+) if(ajak) k=j; /这个循环的作用是找出数组第i个元素以后最小数据 if(k!=i) /如

15、果k不等于i,说明ai不是数组第i位到第n位中最小的元素,交换后让其成为最小的 temp=ak; ak=ai; ai=temp; 附录B#include int fun()int a33,sum;int i,j;sum=1;for(i=0;i3;i+) for(j=0;j3;j+) scanf(%d,&aij);for(i=0;i3;i+)sum=sum*aii;printf(Sum=%dn,sum);return sum;main()fun();附录C#include #include#include#define MANY 4 #define TIME_OUT 8/*定义变量及函数*/in

16、t a,b,u; void game(); void ab(int answer,int guess); void same(int num); /*主目录*/void menu() char choice,ch; do do system(cls); printf(tttt简单猜数字nnnn); printf(tttt1.开始游戏nn); printf(tttt2.使用说明nn); printf(tttt3.退出游戏nn); printf(ttt请输入(1-3):); fflush(stdin); choice=getchar(); while(choice!=1&choice!=2&cho

17、ice!=3); switch(choice) case1: game(); break; case2: system(cls); printf(tttt欢迎使用本程序nnn); printf(游戏说明:输入%d位数字,输入后会有提示XAYB,X表示有几个数字与答案数字相同且位置相同。n ,MANY); printf(Y表示有几位数字与答案数字相同但位置不正确。n); printf(例如:答案数字是5764,如果输入5481,则会提示1A1B。n); printf(祝你愉快!nn); printf(按任意键返回主目录n); getch(); break; case3: printf(确定要退出

18、吗?(y/n):); fflush(stdin); ch=getchar(); if(ch=y|ch=Y) exit(0); else continue; while(1); /*游戏部分*/void game() int guessMANY,answerMANY; int times,i,m,j; int key; time_t t; char wantplay,temp; srand(unsigned)time(&t); do /*生成MANY个随机数*/ do u=0; for(i=0;iMANY;i+) guessi=rand()%10; same(guess); while(u);

19、printf(请输入%d位不相同的数:n,MANY); for(times=1;times=TIME_OUT+1;times+) /*超过限定数次*/ if(times=(TIME_OUT+1) printf(正确答案是:); for(m=0;mMANY;m+) printf(%d,guessm); printf(n猜了%d次都没猜中,TIME_OUT); break; printf(第%d次:,times); /*玩家输入*/ fflush(stdin); for(j=0;jMANY;j+) temp=getchar(); answerj=temp-48; /*temp是char型*/ /*

20、检查输入有没有重复*/ u=0; same(answer); if(u) printf(你输入的数字有重复,请重新输入n); continue; ab(answer,guess); /*判断输入数字正确的个数*/ if(a=MANY) printf(恭喜!你猜对了); break; else printf(%dA%dBn,a,b); printf(还想玩吗?(y/n):); fflush(stdin); wantplay=getchar(); if(wantplay=y|wantplay=Y) system(cls); continue; else menu(); while(wantplay=y|wantplay=Y); /*判断输入的数或生成的数有没有重复的函数*/void same(int num) int i,j; for(i=0;iMANY-1;i+) for(j=i+1;jMANY;j+) if(numi=numj) u=1; /*提示XAYB的函数*/void ab(int answer,int guess) int i,j; a=b=0; for(i=0;iMANY;i+) for(j=0;jMANY;j+) if(answeri=guessj) if(i=j) a+; else b+; /*主函数*/ void main() menu();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1