200704033019人机猜数游戏

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

沈阳航空工业学院

课程设计任务书

院系:航空宇航工程学院专业:飞行器设计与工程班级:7403301

学号:200704033019 题目:人机猜数游戏

一、课程设计时间

2008~09第2学期第1周,共计1周,20学时。

二、课程设计内容

用C语言编写程序完成以下任务:

由计算机随机产生一个4位整数,请人猜这四位整数是多少,其过程保存在文件data.txt中。人输入一个四位数后,计算机首先判断其中有几位猜对了,并且对的数字中有几位位置也正确,例如格式为:2A1B表示2个数字猜对,其中1个位置也正确,直到猜对为止。

三、课程设计要求

1. 程序质量:

✧贯彻结构化的程序设计思想。

✧用户界面友好,功能明确,操作方便。

✧用户界面中的菜单至少应包括“产生随机整数”、“猜数”和“退出”3项。

✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。

2. 课程设计说明书:

课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。

四、指导教师和学生签字

指导教师:________ 学生签名:________

五、说明书成绩

六、教师评语

目录

一、需求分析 (1)

二、程序流程图 (2)

三、核心技术的实现说明及相应程序段 (4)

四、课设总结 (7)

五、参考文献 (8)

六、源程序 (8)

一、需求分析

经过对程序设计题目的分析可知,程序主要是将计算机随机给的数字和人所猜的数字逐位进行比较,并将比较后的结果以XAXB的形式显示出来。所以整个程序的设计实现大致分为三两个模块,其中每一个模块对应一个函数,他们的功能分别是:生成随机数,判断数字和储存游戏过程。这几个过程以判断数字为核心,生成随机数和储存过程也是游戏中不可缺少的过程,完善游戏,凸显程序的可记录性,从而完成题目要求。程序中插入了一个数组循环,使游戏过程中生成的四位随机数中不会出现重复数字,从而使游戏更完善更有可玩性,这是一个可以添加的小功能。

1、生成随机数游戏的基础,生成的无重复四位随机数用作提供玩家去猜的判断依据;

2、判断数字游戏的核心部分,接受玩家所猜测而输入的数字并判断输出结果;

3、储存过程主要是按照题目要求将人机猜数过程的数据进行记录保存。

除了以上功能外,程序中还有退出功能,可以在每一次游戏开始或结束时选择退出游戏。

而保存函数可以将游戏的过程随程序的简单路径设定而永久保存在所设定路径D:\\data.txt中。

二、程序流程图

1、程序总体结构图

图1程序总体结构图

2、具体功能框图

(1)生成无重复四位随机数

图2 生成无重复四位随机数(2)判断数字

图3判断数字过程

三、核心技术的实现说明及相应程序段

本程序主要由两个程序段构成,分别是生成无重复四位随机数过程和判断所猜数字过程,按要求的打印菜单过程和保存数据

过程则贯穿在整个程序之中,下面分别进行说明。

1、生成无重复四位数过程

首先由程序创建一个新文件保存路径为"D:\\data.txt",并将录入的数据信息写入该文件当中。然后根据指令开始生成随机数,生成随机数的方法是随机数由系统提出时间数据进行生成,接下来对所生成的随机数进行判断,用一个循环判断该四位数是否有重复,如有重复则重新生成一次,无重复则打印菜单向下进行,该过程结束。具体的程序段如下:

if((fp=fopen("D:\\data.txt","w"))==NULL) /*创建文件并判断无法打开则退出*/

{printf("can not creat the file.");

exit(0);

}

printmenu(); /*打印菜单*/

scanf("%d",&t);

if(t!=1) exit(0);

srand(time(NULL)); /*从系统时间中生成随机数的函数*/

{ stop=2;

while(stop==2)

{ extra=1;

for(i=0;i<=SIZE-1;i++)

a[i]=rand()%10; /*生成四位随机数*/

for(i=0;i<=SIZE-1;i++)

{ for(j=i+1;j<=SIZE-1;j++)

{ if(a[i]==a[j]) extra=2; } /*判断是否为重复数,有重复则跳出*/

}

if(a[0]!=0&&extra==1)

{stop=1;printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]);};

2、判断所猜数字过程

该函数的核心内容是将玩家输入的数字与生成的随机数进行比较判断,并显示得出结果。该过程执行时,首先执行一个while语句,接受玩家输入的其所猜的四位数,并保存数据。利用(int)pow函数将玩家所输入四位数按位存在我定义的数组b[i]中。下面执行一个for循环判断随机数a[i]与输入数b[i]是否对位相同,通过countera来记录相同个数;类似的再执行一个for语句的双循环来判断随机数a[i]与输入数b[j]各位是否有两两相等并通过counterb来记录相同个数。当countera值为4时说明对位全部相同,此时玩家回答正确,关闭游戏;否则,将打印XAXB 的结果显示一作为依据供玩家继续游戏。具体程序段如下:while(counter==1)

{

scanf("%d",&guessnum); /*接受玩家输入的四位数*/

fprintf(fp,"%d\r\n",guessnum);

for(i=0;i<=SIZE-1;i++)

b[i]=guessnum/(int)pow(10,SIZE-1-i)%10; /*将所接受四位数按位存在数组b[i]中*/

countera=0;

for(i=0;i<=SIZE-1;i++)

{ if(a[i]==b[i]) countera++;} /*第一次循环判断对位相同个数*/ counterb=0;

for(i=0;i<=SIZE-1;i++)

{ for(j=0;j<=SIZE-1;j++)

{if(a[i]==b[j]) counterb++;} /*第二次循环判断两两相同个数*/

相关文档
最新文档