admin 管理员组

文章数量: 1184232


2023年12月19日发(作者:oracle数据库分组查询语句)

程序设计说明书姓名:***班级:轮机136学号:************2023-12-27

AHA-C语言程序设计大作业要求一、作业目的

1、驾驭用C语言进行程序设计的基本方法 。2、娴熟驾驭window限制台应用程序的编写。3、初步完成一个应用程序的设计、编码、调试,了解程序设计过程,熬炼实际应用实力。二、作业内容

猜数字嬉戏:计算机随机生成没有重复的n个数,用户从键盘输入揣测的数。每猜一次,电脑给出提示信息。假如用户输入的数跟计算机生成的数,数值和位置都完全相等,则胜出。基本功能要求:1.随机生成没有重复的4个数。(每个数字在0-9范围内)。2.用户从键盘输入4个不重复的数,程序能对用户输入的数与随机生成的数进行匹配,并给出提示信息:“有 x个数数值和位置都相同!有 y个数数值相同,但位置不同。”3.限制用户的尝试次数为10次。4.计算、输出并保存用户的得分,计分规则:总分是100分,每失败一次扣10分。5.有操作菜单,能依据不同选择运行不同功能:1:起先嬉戏!2:查看上次成果!3:输出帮助信息!0:退出程序!扩展功能要求:1.对用户输入的数字进行检查,假如用户输入重复的数,给出提示,要求重新输入。2.能对嬉戏进行设置:在操作菜单中增加相应的选项:“4:系统设置”。(1)修改要猜的数字的个数n,依据修改后的n值,计算机可随机生成n个数,用户进行n个数的揣测嬉戏。(2)修改可以尝试的次数。3.若嬉戏胜出且成果在前五名,可输入并记录对应的用户姓名,并添加到积分榜中。操作菜单中相应选项改为“2:积分榜!”,用于把积分榜中保存的前五名成果及用户姓名显示出来。4.能对积分榜的成果进行排序和输出。提示:(1)生成一个0~9的随机数,运用rand函数:#include#include //运用rand函数必需运用此头文件#includeint main(){int a; srand(time(0)); //生成一个种子。整个程序只写一次即可。

}a=rand()%10; //生成一个随机数。 printf("%dn",a);return 0; (2)保证生成的n个数不重复:可用数组记录生成的数,每生成一个数,要与之前已经生成的进行比较,假如有相同的重新生成,直到不相同。三、作业要求

1、每位同学独立完成。2、开发平台:VC++ 6.0,建立Win32 Console Application。3、提交时间:第17周周二之前(12月29日)提交。4、提交内容:打印版的程序设计说明书 和 电子版的程序代码。5、提交具体要求:(一)程序代码要求:程序要求能够正常运行,并至少能实现基本功能要求。完成扩展功能要求将得到较高的分数。(二)程序设计说明书要求:(不少于3000字)(1)正文最好分章节,正文为5号宋体。(2)内容:1)概述:开发环境,各种功能的完成状况(已经实现了哪些功能,哪些功能未实现,或有什么运行错误)。2)程序概要设计:程序流程是什么(可画出流程图),有哪些函数,各实现什么功能等。3)4)5)程序具体设计:关键代码分析(要写具体),在设计中的疑难问题解决。运用状况:展示各种的功能运行状况(必需有截图说明)总结:分析程序的优点和不足,遇到的困难及解决的问题,总结自己的收获。6)6、评分标准:程序60%,程序设计说明书40%。参考书目。凡是发觉拷贝、抄袭的(无论抄与被抄者)、程序基本功能未能实现的、说明书不能体现设计过程的均无法通过此课程!

程序设计说明书第一章 概述.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3其次章

2.1

第三章

第四章

第五章

第六章

1.1 开发环境.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. .

1.2 各种功能完成情.

.

.

.

.

.

.

.

.

. .

.

.

.

.

.

.

.

.

. . . .

1.3 存在的运行错误. . . . . . . . . . . . . . . . . . .

程序概要设计.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

整体流程.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2.2 整体程序流程图.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2.3 各个模块.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

2.4 函数的运用及其实现的功能.

.

.

.

.

.

.

.

.

.

.

.

.

. .

程序具体设计.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3.1关键代码分析.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3.2设计过程中的疑难.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

运用状况.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

总结.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

参考资料.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3335567727

第一章概述1.开发环境:啊哈C2.02.各种功能完成状况:1)、嬉戏操作菜单。2)、基本的嬉戏功能:用户从键盘输入4个不重复的数,程序能对用户输入的数与随机生成的数进行匹配,并给出提示信息:“有 x个数数值和位置都相同!有 y个数数值相同,但位置不同。3)、积分榜功能:记录前五名玩家分数和姓名,按分数从高到低输入。4)、帮助信息功能:给出用户猜数字的嬉戏规则和嬉戏中相关提示的含义。5)、系统修改功能:能玩家能自行修改要猜的嬉戏数字个数和尝试次数。6)、退出程序功能:玩家在主菜单中退出程序。7)、输入数字检查:假如用户输入重复的数,给出提示,要求重新输入。8)、返回功能:完成嬉戏或者完成设置后,玩家按随意键返回主菜单。9)、错误提示功能:在选择菜单时按其他键则提示选择错误,要求重新选择。10)清除排行榜功能。3.存在的运行错误:嬉戏起先,假如用户在输入数字时误操作输入了字母符号或者其他字符则程序就陷入死循环。

其次章程序概要设计1、整体流程①程序显示主菜单。②提示玩家输入选择,并输入。1)嬉戏主体。2)查看积分榜。3)帮助信息。4)系统设置。0)退出程序。③推断玩家的输入,进入相应的模块,其它选择则提示选择错误并返回②④推断变量q是否等1。1)等于1,结束程序。2)不等于,返回①。

2、整体程序流程图:功能主菜单提示输入错误输入选择判读输入12起先嬉戏查看积分榜345

帮助信息

系统设置

退出程序其它输入noq是否等于1

yes结束程序3、各个模块

1)主嬉戏模块①产生随机数:系统随机产生0-9的不重复的四个数,作为嬉戏的原始数字供玩家进行猜数字嬉戏。②玩家输入4个数③判读玩家输入的数字是否有重复,是:重新输入,否:接着输入。④判读输入的4个数与原始数比较,提示玩家数值和位置全对的数字个数,和只有数值但位置不对的数字个数。⑤判读数字是否全对,是:提示成功,推断分数是否能进排行榜并记录进入排行榜玩家的得分与姓名, 分数与姓名排序。否:接着运行。⑥输入次数加1。⑦推断输入次数是否等于10。是:提示失败,退出输入,按随意键返回菜单。否:返回②接着输入。流程图:

1产生随机数a[i]玩家输入b[i]提示重新输入b[i]= = b[j] ?(输入是否有重复)Nob[i]与a[i]

YesNon=10 ?Yes提示b[i] = = a[i] ?Yesg[i] > g[5] ?推断分数YesWin记录分数和姓名并排序No嬉戏次数n 加1NoWin输入idlose随意键q!=1 ?No主菜单2)积分榜模块

调用主嬉戏模块中记录的分数和玩家姓名,打印出排行榜,按随意键返回主菜单。3)帮助信息模块 干脆打印出帮助信息,输入随意键返回主菜单。4)系统设置模块 ① 进入子菜单。 ② 输入选择,1,2,3。③ 推断玩家的选择,进入相应的模块,。1.修改要猜的数字的个数n。2.修改可以尝试的次数。3.复原默认值。4.清除排行榜0.其它,提示选择错误,返回②。⑤输入修改的数值。⑥变量w等于1。⑦推断w是否等于1是:返回主菜单。否:返回主菜单。

系统设置流程图:子菜单玩家输入提示错误执行输入12340其它修改数值修改数值w=1w=1w!==1

YesNo随意键主菜单5)退出程序模块玩家在主菜单选择0,q=1,检测推断,q=1,程序运行结束,退出关闭。

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):清除scanf输入时留下的回车缓存。

第三章程序具体设计1、关键代码分析:一 主体嬉戏部分:1. 原始随机数的产生srand((unsigned)time(NULL)); //时间种子for(i=0;i

3.推断部分//推断 cnt1=cnt2=0;

//推断输入的b[i]是否与原始数a[i]相等,即推断数值和位置都相同的数for(i=0;i

{if(b[i]==a[i]){cnt1++; }//推断数值相同但位置不同的数for(j=0;j

if(g[x]>g[5])//推断分数是否进入前5名

{ printf("恭喜你进入前五名,请输入你的名称(实力有限,仅仅支持英文名,按回车确认):n"); fflush(stdin); //清除scnaf留下的回车缓存 方法2在scanf后面加getch// gets(m[x]);数组记录玩家的姓名} x++;//嬉戏成功次数/////分数和玩家姓名排序

for(i=0;i

{ if(g[j]>g[i]) {temp=g[i];g[i]=g[j];g[j]=temp;

strcpy(temp2,m[i]); //姓名跟着g[i]交换 strcpy(m[i],m[j]);strcpy(m[j],temp2);}}}二 排行榜模块//调用在主嬉戏模块以排序好分数数组和分名字数组干脆打印显示for(i=0;i<5;i++) {//输出分数 printf(" ★第%d名的成果为:%03d ",i+1,g[i]); printf("玩家:");puts(m[i]);//输出玩家名字 printf("n");} printf(" ");三 帮助模块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'||ch3=='2'||ch3=='3’||ch4==’4’||ch3==’5’){if(ch3=='1') 选择1{system("cls");printf("请输入要修改的猜的数字的个数:n"); while(5)//限制修改的次数只能为1~10{scanf("%d",&t1);if(t1>10){printf("输入错误,请输入1~10之间的数n");}else{break;} }t=t1;//更新次数主嬉戏模块要猜数字的个数printf("已修改,请按随意键返回主菜单...");w=1;//返回主菜单条件break;//跳出子菜单循环}if(ch3=='2') // 选择2{system("cls");printf("请输入要修改的尝试次数:n");scanf("%d",&h1);h=h1;//更新主嬉戏模块中的尝试次数w=1;//返回主菜单条件printf("已修改,请按随意键返回主菜单...");break;//跳出子菜单循环}if(ch3=='3') {system("cls");t=4;h=10;//复原 w=1;//返回主菜单条件 printf("已复原默认,请按随意键返回主菜单..."); break;//跳出子菜单循环 } if(ch3=='4') {system("cls");for(i=0;i<100;i++){g[i]=0;//清除记录strcpy(m[i],p[i]);//清除姓名

}

w=1;//返回主菜单条件printf("已清除,请按随意键返回主菜单...");break;//跳出子菜单循环 }if(ch3=='5') //选择返回主菜单{break;}}elseprintf("n菜单选择错误,请重新选择:n");}//主菜单返回模块if(w==1){ch2=getch();}w=0;//条件复位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"); ////////////////////////////////////////////////if(ch=='1')//嬉戏主体{1.主嬉戏模块}if(ch=='2'){

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(); //输入随意字符system("cls");

break;//跳出菜单选择循环}2、设计过程中的疑难:疑难一:限制重复数的设计,起先时都陷入类似以下代码的错误思路中:错误思路代码 :①for(i=0;i<4;i++){for(j=0;j<4;j++) { while((i!=j) && (a[i]==a[j])) { a[j]=rand()%10; } }}②for(i=0;i<4;i++){ a[i]=rand()%10; for(j=0;j<4;j++)////限制重复数 {if(a[j]==a[i]) a[i]=rand()%10; }}

错误缘由:

出现重复数,与之前的数对比,没有使i置回来,a[i]=rand()%10产生随机数就进入下次i++,这样a[i]=rand()%10产生随机还是会产生与之前的数相同的数。解决方法:产生下个随机数时,进入推断,若为重复数 使i置回i-1(i=-1),再产生随机数再进入推断,直到没有随机数为止。疑难二:记录玩家姓名时用gets函数,程序没有显示要输入字符干脆显示下个语句。 缘由:gets函数会首先读取缓存区的内容,而前面的scanf函数在输入完毕后回车确认会在缓存区留下回车字符,当运行到下面的gets函数时自动输入了回车,接着就运行下一个语句。 解决方法:

在前面的scanf函数后面家getch();汲取回车键,或者在后面的gets函数前加fflush(stdin)函数清除scanf输入时留下的回车缓存。 (查百度得出的解决方法)疑难三:排行榜姓名的记录、解决方法: 分数用数组g[i]记录,选择排序,玩家姓名m[i]跟着跟着g[i]用strcpy函数选择排序。

第四章运用状况各种的功能运行状况展示:嬉戏初始画面:嬉戏系统推断算法测试:

提示重复数:假如连续四次输入错误将出现如下结果,并出现提示:

排行榜记录功能展示:

系统功能展示:子菜单:输入修改:

错误提示:修改成功:

帮助信息:退出程序:

第五章总结程序缺点:程序还不够简练,没有用到一些高级的函数,比如函数的调用,还有排行榜模块可以用结构体定义一个函数来记录玩家的分数和姓名。定义的变量过多,编写时易混淆。优点:主体结构明确,各个模块分工明确,程序语句排版清楚明确,简洁读懂。遇到的困难及解决的问题:编写过程中遇到问题,可以说是数不胜数,比如像前面的所说的的限制重复数,排行榜的排序问题,此外还有主嬉戏的推断部分等等。虽然遇到的困许多,但是经过不断的思索和总结,遇到的问题都基本上解决了。收获:猜数字嬉戏的看似简洁,却须要能对C语言学问进行应用。尤其是循环语句和数组要进行大量的应用。首先,这次的大作业让我把以前学习到的学问得到巩固和进一步的提高相识,对已有学问有了更进一步的理解和相识,再次,我在课程设计中遇到了许多的问题,通过自己钻研,逐个击破。当然,通过这次的大作业,我也发觉了自身的许多不足之处。

此外,当自己能把所学的学问转换为有用的东西时,心中却不知何时有了一种莫名的动力,在电脑前面一坐就是好几个小时。这一次的大作业,不仅使我巩固了以前所学过的学问,更使我获得了许多在书本上所没有学到过的学问。通过这次课程设计使我的逻辑实力得到了提高,正如书本封面写这乔布斯的那句话,“每个人都应当学会如何编程,因为它教会你如何思索”。

最终,好的学习方法在学习中许多时候都起着至关重要的作用!尤其是在这次嬉戏设计过程中,深深地体会到,擅长总结是学习过程中不行缺少的重要的一个环节。每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的调试和运行状况,随时总结,找到自己的错误与不足之处,这样所编写的程序才能逐步提高。第六章参考资料1.《啊哈C!》2.《c语言经典编程282例》


本文标签: 输入 程序 菜单 嬉戏