c语言猜数字课程设计报告.doc
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
14.9
积分
还剩页未读,继续阅读
关键词:c语言猜数字
课程设计报告
c语言 猜数字 课程设计报告
C语言课程设计
C语言 猜数
C语言课程设计报告
C语言课程设计猜数字
课程设计猜数字
资源描述:
C语言课程设计报告书
计算机科学与技术系
课程设计报告
~学年第一学期
课程
C语言课程设计
课程设计名称
人机猜数字游戏
学生 姓名
学号
专业班级
网络工程(一)班
指导教师
王竹婷 刘洁群
6月
目 录
一、 问题分析和任务定义…………………….….………..3
二、 概要设计和数据结构的选择…………………………3
三、详细设计和编码………………………..………........3
四、上机调试......................................6
五、用户使用说明..................................7
六、测试结果......................................7
七、附录:带注释源程序............................9
八、参考书目......................................11
一、问题分析和任务定义
问题分析:
问题本身清楚明了。判断相同位置上的数字是否相同不需要特殊的算法。只截取相同位置上的数字进行比较即可。但在判断几位数字正确时,则应当注意:计算机所想的是“1123”,而人所猜的是“1576”,则正确的数字只有1位。所以我们再用到循环结构,判断结构,余数比较的时候要注意重复,所以应该死有标志变量。
程序中截取计算机所想的数的每位数字与人所猜的数字按位比较。若有两位数字相同,则要记信所猜中数字的位置,使该位数字只能与一位对应的数字“相同”。当截取下一位数字进行比较时,就不应再与上述位置上的数字进行比较,以避免所猜的数中的一位与对应数中多位数字“相同”的错误情况。
猜数字处理系统,包括三个模块,和一个主函数。三个模块分别是电脑产生一个正确的随机数,读取玩家正确的四位数,电脑与玩家数字的比较。其中脑产随机数函数和主函数为整型,其它都无返回类型。主函数通过在不断循环使用三大模块来实现。该程序采用面向对象的思想,来处理函数之间的调用,实现这个人机猜数字游戏。
任务定义:
可知,整个程序的设计实现大致分为三个部分,
(1) 菜单,在用户界面上产生指示,让用户知道如何来参与这个游戏。
(2) 产生随机数部分,利用随机函数来产生随机数,即计算机给的数。
(3) 猜数对比输出部分,程序的核心部分,运用for循环,if判断语句,来提示参与者猜对了几个数,位置对了几个。
二、概要设计和数据结构的选择
1、使用for循环结构,if判断结构,比较余数,完成逐个比较,从而输出猜对了几个数,位置对了几个
2、运用子函数,指针传递地址,使主函数看起来更简便
3、加入判断,返回主函数,是否继续。
三、详细设计和编码
(一)算法及说明
计算机“想”了一个“1234”请人猜,可能的提示如下:
人猜的整数 计算机判断有几个数字正确 有几个位置正确
1122 2 1
3344 2 1
3312 3 0
4123 4 0
1243 4 2
1234 4 4
游戏结束
如以上分析,本次课题是猜数字游戏的设计与实现。主要是通过C++语言开发,实现《猜数字》游戏中的出数字方,在VC环境中实现了由电脑随机产生一个数字不重复的四位数(最高位不为零),并将所猜的数与它自动产生的数进行比较,若猜得不对并作出提示:"mAnB",A代表位置正确数字也正确,B代表数字正确但位置不正确。m代表A的个数,n代表B的个数.在每次输入数字后,显示相应的提示信息,直到玩家猜对为止.这次课设是要求用C++编写程序,实现数字之间的相互比较,让玩家找出电脑写的四位数字,而玩家在找出四位数字中,电脑需要给出玩家一些提示信息,用以帮助玩家找出答案。对猜一个各个位数不等的四位数,电脑需要在程序刚运行时,确定一个随机的四位数,且各个位数不相等。而在玩家输入数字时,也需要检验玩家输入的数字是否满足条件,即一个各个位数不重复的四位数。只有玩家输入正确的数字后,电脑才能进行比较数字的运算,如果玩家输入的数字和电脑的不相等,输出提示信息,并应从新读取玩家的数字进行判断,直到玩家放弃猜数字或数字猜对为止。
(二)程序流程图
开始
计算机产生四位数z
输入猜的四位数g
a=z;s=g
a%10==s%10
m&&t!=b[3]
j++;m=0;b[j-1]=t;
K==t
Count++;s/10;a/10
==++
输出j、k
K==4
结束
N
N
N
Y
Y
Y
Y
N
调用函数 panduan()
图2.1 流程图
(三)、函数及简介
VoidPanduan(int g, int z, int *k, int *j):接收用户输入的数字和正确的数字,进行判断,并把猜对的数的个数和位置保存到变量 *k, *j 中。
四、 上机调试
我们编写的程序不可能一次就成功的,要经过反复的调试,但错误是不可避免,而且高,编译器一般不报错,往往要费一番周折才能解决。经验、习惯和对C语言深刻理解成为彻底避免这类问题的关键因素。
对于此次的课程设计,从一开始的写程序到最终的成功运行,虽然这个程序并不像其他多样化的管理系统那样复杂,但是在编写和上机调试过程中,仍然出现不少问题。
子函数里的错误:
void panduan(int g,int z,int *k,int *j)
{
int a,b[4],i,t,m,s;
a=z;*j=0;*k=0;b[0]=b[1]=b[2]=b[3]=0;
for(i=1;i<5;i++)
{
s=g;m=1;
for(t=1;t<5;t++)
{
if(a%10==s%10)
{
if(m&&t!=b[0]&&t!=b[1]&&t!=b[2]&&t!=b[3])
{
*j+=1;m=0;b[j-1]=t;
}
if(i==t) *k+=1;
}
s/=10;
}
a/=10;
}
}
现在从中发现错误,在b[j-1]=t中,j是原量,而*j是指针传递原变量,并读写,所以在这里有这个错误,改正即可。
五、用户使用说明
首先运行该游戏,进入开始界面。计算机会提醒你:我有一个数请你猜一猜,然后请输入一个四位数。计算机会提醒你,猜对了几个数,并且有几个数位置也是正确的。然后你在判断哪几个或哪一个是对的,位置也是对的。后面的猜数也是考验你的眼里与脑力,根据计算机的提示,可以采用逐个比较。如:你猜了一个数字:1234,;计算机提示:有2个数是对的,并且有0个位置也是对的。然后你判断,1、2可能是对的;3、4也有可能是对的;所以你可以先尝试着,如1200或3400看到底哪两个是正确的,当然0也可能是对的,所以需要再一次验证。
当然我们每输入一个字都需要按一下回车,然后看到提示再按回车,进行下一步。这样直到猜出正确的数字,恭喜你!然后计算机会提示:again? Y/N,你可以选择Y,接着游戏,也可以选择N进行结束。
六、测试结果
1、调试分析
输入的游戏玩家人数太多时屏幕显示不能控制为一页一页显示,所以为了方便起见,不要输入太多记录,十七左右为最佳。刚开始执行输入函数,按数字顺序输入输完后执行显示功能,数字、字母的位置显示不对,试着在其中增加一些语句,希望能把所需结果按正常顺序显示,但暂时没有成功,最后在老师的帮助下,所需结果能按正常顺序输出了。在前面对猜数字游戏进行需求分析的过程中,已经初步明确了系统的主要功能模块和用户需求,下面将在总体设计的过程中,给出猜数字游戏的模块结构、流程描述以及界面布局,并使得系统的总体设计符合软件工程中总体设计的基本原则。开发与设计的总体思想猜数字游戏是一种大众娱乐游,开发与设计的重点在于游戏供玩家进行猜数字游戏的原始数字的产生和用户每进行猜数字操作之后的游戏提示,这方面的规则设计往往决定了软件运行的正确性和质量。同时,要谨调试失败的原因以免下次犯同类错误
2、测试运行结果截屏及说明
游戏开始界面,可正常工作运行;
图6.1测试结果
然后游戏者可以猜一个四位数,看计算机给出的提示继续猜;
图6.2测试结果
当四位数被完全参与者猜出时,计算机会告诉你猜了多少次,并且会问你,要不要再一次。
图6.3测试结果
七、附录:带注释源程序
#include#include#includevoid panduan(int g,int z,int *k,int *j) //通过k的地址,指针对原变量k、j进行读写
{
int a,b[4],i,t,m,s;
a=z;*j=0;*k=0;b[0]=b[1]=b[2]=b[3]=0;
for(i=1;i<5;i++) //i:原数中的第i位数。个位为第一位,千位为第4位
{
s=g;m=1;
for(t=1;t<5;t++) //人所猜数
{
if(a%10==s%10) //余数比较法,逐个比较{
if(m&&t!=b[0]&&t!=b[1]&&t!=b[2]&&t!=b[3])
{
*j+=1;m=0;b[*j-1]=t; //记录相同数字时,该数字在所猜数字中的位置
}
if(i==t) *k+=1; //位置相同加一
}
s/=10; //从各位到十位,百位,千位,小数点除去
}
a/=10;
}
}
int main()
{
int z,count,g,s,j,k; //j:数字正确的位数 k:位置正确的数 count:一共猜多少次
char ag; //定义字符
srand((unsigned int)time(NULL)); //时间随机种子
z = rand()%10000; // 产生随机数
printf("我有一个四位数的数字,请猜一猜!\n");
for(count=1;;count++)
{
printf("请输入一个四位数:");
scanf("%d",&g); //请人猜一猜
panduan(g,z,&k,&j); //传递k的地址
printf("你猜对了%d个数字,\n",j);
printf("并且在猜对的数字中有 %d 个位置也是正确的.\n",k);
if(k==4)break;
}
printf("恭喜你,猜对了!");
printf("\n");
printf("你用了%d次猜出了这个数.\n",count);
printf("again? Y/N");
scanf(" %c",&ag);
if(ag=='y'||ag=='Y')return main(); // 返回 主函数
return 0;
}
八、参考书目
[1]、郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社
[2]、黄明,梁旭,万洪莉.C语言课程设计.北京:电子工业出版社..6
[3]、谭浩强《C语言习题集与上机指导》高等教育出版社 2月版
[4]、谭浩强主编《C语言程序设计试题汇编》清华大学出版社4月版
[5]、熊锡义主编《C语言程序设计案例教程》大连理工大学出版社09年3月版
[6]、姚合生等《C语言程序设计》-北京:清华大学出版社(高等 学校计算机教材—面向应用与实践系列)
[7]、刘成等《C语言程序设计实验指导与习题集》.北京:中国铁道出版社,4月版
11
厚德 博学 善思 致用
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:c语言猜数字课程设计报告.doc
链接地址:/p-16348583.html