C语言作业要求及设计说明书初学者_第1页
C语言作业要求及设计说明书初学者_第2页
C语言作业要求及设计说明书初学者_第3页
C语言作业要求及设计说明书初学者_第4页
C语言作业要求及设计说明书初学者_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序设计说明书姓名:简正聪班级:轮机136学号:2013132106262015-12-27一、作业目的1、 掌握用C语言进行程序设计的基本方法。2、 熟练掌握window控制台应用程序的编写。3、 初步完成一个应用程序的设计、编码、调试,了解程序设计过程,锻炼实际应用能力。二、作业内容猜数字游戏:计算机随机生成没有重复的n个数,用户从键盘输入猜测的数。每猜一次,电脑给出提示信息。如果用户输入的数跟计算机生成的数,数值和位置都完全相等,则胜出。基本功能要求:1. 随机生成没有重复的4个数。(每个数字在0-9范围内)。2. 用户从键盘输入4个不重复的数,程序能对用户输入的数与随机生成的数进行匹配

2、,并给出提示信息:“有 x个数数值和位置都相同!有 y个数数值相同,但位置不同。”3. 控制用户的尝试次数为10次。4. 计算、输出并保存用户的得分,计分规则:总分是100分,每失败一次扣10分。5. 有操作菜单,能根据不同选择运行不同功能:1:开始游戏!2:查看上次成绩!3:输出帮助信息!0:退出程序!扩展功能要求:1. 对用户输入的数字进行检查,如果用户输入重复的数,给出提示,要求重新输入。2. 能对游戏进行设置:在操作菜单中增加相应的选项:“4:系统设置”。(1) 修改要猜的数字的个数n,根据修改后的n值,计算机可随机生成n个数,用户进行n个数的猜测游戏。(2) 修改可以尝试的次数。3.

3、 若游戏胜出且成绩在前五名,可输入并记录对应的用户姓名,并添加到积分榜中。操作菜单中相应选项改为“2:积分榜!”,用于把积分榜中保存的前五名成绩及用户姓名显示出来。4. 能对积分榜的成绩进行排序和输出。提示:(1)生成一个09的随机数,使用rand函数:#include<stdio.h>#include<stdlib.h> /使用rand函数必须使用此头文件#include<time.h>int main()int a;srand(time(0); /生成一个种子。整个程序只写一次即可。a=rand()%10; /生成一个随机数。 printf("

4、%dn",a);return 0;(2)保证生成的n个数不重复:可用数组记录生成的数,每生成一个数,要与之前已经生成的进行比较,如果有相同的重新生成,直到不相同。三、作业要求1、 每位同学独立完成。2、 开发平台:,建立Win32 Console Application。3、 提交时间:第17周周二之前(12月29日)提交。4、 提交内容:打印版的程序设计说明书和电子版的程序代码。5、 提交具体要求:(一) 程序代码要求:程序要求能够正常运行,并至少能实现基本功能要求。完成扩展功能要求将得到较高的分数。(二) 程序设计说明书要求:(不少于3000字)(1) 正文最好分章节,正文为5号

5、宋体。(2) 内容:1) 概述:开发环境,各种功能的完成情况(已经实现了哪些功能,哪些功能未实现,或有什么运行错误)。2) 程序概要设计:程序流程是什么(可画出流程图),有哪些函数,各实现什么功能等。3) 程序详细设计:关键代码分析(要写详细),在设计中的疑难问题解决。4) 使用情况:展示各种的功能运行情况(必须有截图说明)5) 总结:分析程序的优点和不足,遇到的困难及解决的问题,总结自己的收获。6) 参考目录。6、 评分标准:程序60%,程序设计说明书40%。凡是发现拷贝、抄袭的(无论抄与被抄者)、程序基本功能未能实现的、说明书不能体现设计过程的均无法通过此课程!程序设计说明书第一章概述.3

6、1.1 开发环境. .31.2 各种功能完成情.31.3 存在的运行错误.3第二章程序概要设计.52.1 整体流程.52.2 整体程序流程图.62.3 各个模块.7函数的使用及其实现的功能.11第三章程序详细设计.12.12设计过程中的疑难.18第四章使用情况.20第五章 总结.27第六章参考资料.27第一章概述1. 开发环境:啊哈2. 各种功能完成情况:1)、游戏操作菜单。2)、基本的游戏功能:用户从键盘输入4个不重复的数,程序能对用户输入的数与随机生成的数进行匹配,并给出提示信息:“有 x个数数值和位置都相同!有 y个数数值相同,但位置不同。3)、积分榜功能:记录前五名玩家分数和姓名,按分

7、数从高到低输入。4)、帮助信息功能:给出用户猜数字的游戏规则和游戏中相关提示的含义。5)、系统修改功能:能玩家能自行修改要猜的游戏数字个数和尝试次数。6)、退出程序功能:玩家在主菜单中退出程序。7)、输入数字检查:如果用户输入重复的数,给出提示,要求重新输入。8)、返回功能:完成游戏或者完成设置后,玩家按任意键返回主菜单。9)、错误提示功能:在选择菜单时按其他键则提示选择错误,要求重新选择。10)清除排行榜功能。3. 存在的运行错误:游戏开始,如果用户在输入数字时误操作输入了字母符号或者其他字符则程序就陷入死循环。第二章程序概要设计1、整体流程 程序显示主菜单。 提示玩家输入选择,并输入。1)

8、 游戏主体。2) 查看积分榜。3) 帮助信息。4) 系统设置。0) 退出程序。 判断玩家的输入,进入相应的模块,其它选择则提示选择错误并返回 判断变量q是否等1。1) 等于1,结束程序。2) 不等于,返回。2、整体程序流程图:功能主菜单输入选择q是否等于1 结束程序开始游戏 查看积分榜 帮助信息 系统设置退出程序noyes12345其它输入提示输入错误判读输入3、各个模块1) 主游戏模块 产生随机数:系统随机产生0-9的不重复的四个数,作为游戏的原始数字供玩家进行猜数字游戏。 玩家输入4个数 判读玩家输入的数字是否有重复,是:重新输入,否:继续输入。 判读输入的4个数与原始数比较,提示玩家数值

9、和位置全对的数字个数,和只有数值但位置不对的数字个数。 判读数字是否全对,是:提示胜利,判断分数是否能进排行榜并记录进入排行榜玩家的得分与姓名, 分数与姓名排序。否:继续运行。 输入次数加1。 判断输入次数是否等于10。是:提示失败,退出输入,按任意键返回菜单。否:返回继续输入。流程图: 1Yeslose记录分数和姓名并排序产生随机数ai玩家输入bibi= = bj ?(输入是否有重复)bi = = ai ?gi > g5 ?判断分数游戏次数n 加1bi与ai 提示输入id任意键提示重新输入YesNon=10 ?NoYesNoYesWinWinq!=1 ?主菜单NoNo2)积分榜模块调用

10、主游戏模块中记录的分数和玩家姓名,打印出排行榜,按任意键返回主菜单。3)帮助信息模块直接打印出帮助信息,输入任意键返回主菜单。4)系统设置模块 进入子菜单。 输入选择,1,2,3。 判断玩家的选择,进入相应的模块,。1 修改要猜的数字的个数n。2 修改可以尝试的次数。3 恢复默认值。4 清除排行榜0. 其它,提示选择错误,返回。 输入修改的数值。 变量w等于1。 判断w是否等于1是:返回主菜单。否:返回主菜单。系统设置流程图:子菜单执行输入玩家输入123其它提示错误修改数值w=1修改数值w=1w!=1 任意键主菜单NoYes405)退出程序模块玩家在主菜单选择0,q=1,检测判断,q=1,程序

11、运行结束,退出关闭。4、函数的使用及其实现的功能1) while 函数:利用whie函数进入死循环,进行一系列的操作,当条件满足时跳出while,主要用来实现菜单的返回效果。2) for函数:用来产生多个原始数和给玩家输入多个数字,分数的比较等。3) scanf函数:用来输入0-9的数。4) getch:字符输入不带回显,用来实现菜单的选择。5) strcpy函数:用来实现玩家姓名排行榜的排序。6) rand():产生随机数。7) srand(unsigned)time(NULL):利用系统时钟设定种子,给rand()函数产生不同的种子,以用来产生多个随机数。8) fflush(stdin):

12、清除scanf输入时留下的回车缓存。第三章程序详细设计1、关键代码分析:一 主体游戏部分:1.原始随机数的产生srand(unsigned)time(NULL);/时间种子for(i=0;i<t;i+)ai=rand()%10;/每次产生0-9范围内任意的一个数随机数并存到数组a中/限制重复数,每生成一个数,要与之前已经生成的进行比较,如果有相同的重新生成,直到不相同for(j=0;j<i;j+)/限制重复数if(aj=ai) i=-1;/出现重复数,令i=0。ai=rand()%10;/重新产生随机数 2.用户输入数字 for(i=0;i<t;i+)/开始输入scanf(&

13、quot;%d",&bi);/判断输入是否有重复 for(j=0;j<i;j+)if(bj=bi)/检测输入的数字是否有重复,原理同1。printf("输入的数字有重复,请重新输入:n");i=-1; break;/3. 判断部分/判断 cnt1=cnt2=0;/判断输入的bi是否与原始数ai相等,即判断数值和位置都相同的数for(i=0;i<t;i+)if(bi=ai)cnt1+;/判断数值相同但位置不同的数for(j=0;j<t;j+)/if(i!=j && bi=aj)cnt2+;break; 4. 胜利模块和排序i

14、f(cnt1=t)/胜利条件 printf("n恭喜你!猜对了!n");printf("你的得分为:%dnn",100-10*n);/得分s=100-10*n;/计算得分gx=s;/数组记录得分 if(gx>g5)/判断分数是否进入前5名printf("恭喜你进入前五名,请输入你的名称(能力有限,仅仅支持英文名,按回车确认):n");fflush(stdin);/清除scnaf留下的回车缓存 方法2在scanf后面加getch/gets(mx);数组记录玩家的姓名x+;/游戏胜利次数/分数和玩家姓名排序for(i=0;i<

15、x-1;i+)/分数选择排序;大到小for(j=i+1;j<x;j+)if(gj>gi)temp=gi;gi=gj;gj=temp; strcpy(temp2,mi); /姓名跟着gi交换strcpy(mi,mj);strcpy(mj,temp2);二 排行榜模块/调用在主游戏模块以排序好分数数组和分名字数组直接打印显示for(i=0;i<5;i+) /输出分数 printf(" 第%d名的成绩为:%03d ",i+1,gi);printf("玩家:");puts(mi);/输出玩家名字 printf("n"); p

16、rintf(" ");三 帮助模块Printf函数,直接输出帮助信息。四 系统设置模块while(4)/子菜单循环if(ch='4')system("cls");/打印子菜单printf("n修改要猜的数字的个数(默认为4)nn");printf("修改可以尝试的次数(默认为10)nn");printf("返回主菜单nnn");while(4)/子菜单循环printf("nn请选择你需要的操作:");ch3=getch();if(ch3='1'

17、|ch3='2'|ch3='3|ch4=4|ch3=5)if(ch3='1')选择1system("cls");printf("请输入要修改的猜的数字的个数:n"); while(5)/限制修改的次数只能为110scanf("%d",&t1);if(t1>10)printf("输入错误,请输入110之间的数n");elsebreak; t=t1;/更新次数主游戏模块要猜数字的个数printf("已修改,请按任意键返回主菜单.");w=1;/返

18、回主菜单条件break;/跳出子菜单循环if(ch3='2')/选择2system("cls");printf("请输入要修改的尝试次数:n");scanf("%d",&h1);h=h1;/更新主游戏模块中的尝试次数w=1;/返回主菜单条件printf("已修改,请按任意键返回主菜单.");break;/跳出子菜单循环if(ch3='3')system("cls");t=4;h=10;/恢复 w=1;/返回主菜单条件 printf("已恢复默认,

19、请按任意键返回主菜单."); break;/跳出子菜单循环 if(ch3='4') system("cls");for(i=0;i<100;i+)gi=0;/清除记录strcpy(mi,pi);/清除姓名 w=1;/返回主菜单条件printf("已清除,请按任意键返回主菜单.");break;/跳出子菜单循环 if(ch3='5') /选择返回主菜单break;elseprintf("n菜单选择错误,请重新选择:n");/主菜单返回模块if(w=1)ch2=getch();w=0;/条件

20、复位system("cls");break;/跳出菜单选择循环while2/主菜单返回模块end五主程序跳出模块if(q=1)/判断标志位q是否等于1,跳出二层while2循环,一层循环检测q=1, 结束程序。break;/跳出while1六主菜单循环模块while(1) printf("") ;/显示菜单,详情看源程序。while(2)/主菜单选择循环if(ch='1'|ch='2'|ch='3'|ch='4'|ch='0') system("color 7&qu

21、ot;); /if(ch='1')/游戏主体游戏模块if(ch='2')if(ch='3')3.帮助信息模块if(ch='4')4.系统设置模块if(ch='0')0.退出模块else printf("n菜单选择错误,请重新选择:n");/while2if(q=1)break;/跳出while1/while1 七任意键返回模块while/主菜单或子菜单循环,详情见源程序。 /代表任意模块printf("请按任意键返回主菜单.");ch2=getch(); /输入任意字符sys

22、tem("cls");break;/跳出菜单选择循环2、设计过程中的疑难:疑难一:限制重复数的设计,开始时都陷入类似以下代码的错误思路中:错误思路代码 :for(i=0;i<4;i+)for(j=0;j<4;j+) while(i!=j) && (ai=aj)aj=rand()%10;for(i=0;i<4;i+)ai=rand()%10; for(j=0;j<4;j+)/限制重复数if(aj=ai) ai=rand()%10; 错误原因:出现重复数,与之前的数对比,没有使i置回来,ai=rand()%10产生随机数就进入下次i+,这

23、样ai=rand()%10产生随机还是会产生与之前的数相同的数。解决方法:产生下个随机数时,进入判断,若为重复数 使i置回i-1(i=-1),再产生随机数再进入判断,直到没有随机数为止。疑难二:记录玩家姓名时用gets函数,程序没有显示要输入字符直接显示下个语句。原因:gets函数会首先读取缓存区的内容,而前面的scanf函数在输入完毕后回车确认会在缓存区留下回车字符,当运行到下面的gets函数时自动输入了回车,接着就运行下一个语句。解决方法:在前面的scanf函数后面家getch();吸收回车键,或者在后面的gets函数前加fflush(stdin)函数清除scanf输入时留下的回车缓存。 (查百度得出的解决方法)疑难三:排行榜姓名的记录、解决方法: 分数用数组gi记录,选择排序,玩家姓名mi跟着跟着gi用strcpy函数选择排序。第四章使用情况各种的功能运行情况展示:游戏初始画面:游戏系统判断算法测试:提示重复数:如果连续四次输入错误将出现如下结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论