C语言作业要求及设计说明书初学者.docx
- 文档编号:1215139
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:29
- 大小:775.40KB
C语言作业要求及设计说明书初学者.docx
《C语言作业要求及设计说明书初学者.docx》由会员分享,可在线阅读,更多相关《C语言作业要求及设计说明书初学者.docx(29页珍藏版)》请在冰点文库上搜索。
广州航海学院简正聪
程序设计说明书
姓名:
简正聪
班级:
轮机136
学号:
201313210626
2015-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
#include
intmain()
{ inta;
srand(time(0));//生成一个种子。
整个程序只写一次即可。
a=rand()%10;//生成一个随机数。
printf("%d\n",a);
return0;
}
(2)保证生成的n个数不重复:
可用数组记录生成的数,每生成一个数,要与之前已经生成的进行比较,如果有相同的 重新生成,直到不相同。
三、作业要求
1、每位同学独立完成。
2、开发平台:
VC++6.0,建立Win32ConsoleApplication。
3、提交时间:
第17周周二之前(12月29日)提交。
4、提交内容:
打印版的程序设计说明书和电子版的程序代码。
5、提交具体要求:
(一)程序代码要求:
程序要求能够正常运行,并至少能实现基本功能要求。
完成扩展功能要求将得到较高的分数。
(二)程序设计说明书要求:
(不少于3000字)
(1)正文最好分章节,正文为5号宋体。
(2)内容:
1)概述:
开发环境,各种功能的完成情况(已经实现了哪些功能,哪些功能未实现,或有什么运行错误)。
2)程序概要设计:
程序流程是什么(可画出流程图),有哪些函数,各实现什么功能等。
3)程序详细设计:
关键代码分析(要写详细),在设计中的疑难问题解决。
4)使用情况:
展示各种的功能运行情况(必须有截图说明)
5)总结:
分析程序的优点和不足,遇到的困难及解决的问题,总结自己的收获。
6)参考目录。
6、评分标准:
程序60%,程序设计说明书40%。
凡是发现拷贝、抄袭的(无论抄与被抄者)、程序基本功能未能实现的、说明书不能体现设计过程的均无法通过此课程!
程序设计说明书
第一章概述.......................................3
1.1开发环境...............................3
1.2各种功能完成情.......................3
1.3存在的运行错误...................3
第二章程序概要设计...............................5
2.1整体流程...............................5
2.2整体程序流程图.........................6
2.3各个模块................................7
2.4函数的使用及其实现的功能...............11
第三章程序详细设计.................................12
3.1关键代码分析...............................12
3.2设计过程中的疑难..........................18
第四章使用情况......................................20
第五章总结...........................................27
第六章参考资料......................................27
第一章
概述
1.开发环境:
啊哈C2.0
2.各种功能完成情况:
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、整体程序流程图:
功能主菜单
输入选择
q是否等于1
结束程序
开始游戏
查看积分榜
帮助信息
系统设置
退出程序
no
yes
1
2
3
4
5
其它输入
提示输入错误
判读输入
3、各个模块
1)主游戏模块
①产生随机数:
系统随机产生0-9的不重复的四个数,作为游戏的原始数字供玩家进行猜数字游戏。
②玩家输入4个数
③判读玩家输入的数字是否有重复,
是:
重新输入,否:
继续输入。
④判读输入的4个数与原始数比较,提示玩家数值和位置全对的数字个数,和只有数值但位置不对的数字个数。
⑤判读数字是否全对,
是:
提示胜利,判断分数是否能进排行榜并记录进入排行榜玩家的得分与姓名,
分数与姓名排序。
否:
继续运行。
⑥输入次数加1。
⑦判断输入次数是否等于10。
是:
提示失败,退出输入,按任意键返回菜单。
否:
返回②继续输入。
流程图:
1
Yes
lose
记录
分数
和姓名
并排序
产生随机数a[i]
玩家输入b[i]
b[i]==b[j]?
(输入是否有重复)
b[i]==a[i]?
g[i]>g[5]?
判断分数
游戏次数n加1
b[i]与a[i]
提示
输入id
任意键
提示重新输入
Yes
No
n=10?
No
Yes
No
Yes
Win
Win
q!
=1?
主菜单
No
No
2)积分榜模块
调用主游戏模块中记录的分数和玩家姓名,打印出排行榜,按任意键返回主菜单。
3)帮助信息模块
直接打印出帮助信息,输入任意键返回主菜单。
4)系统设置模块
①进入子菜单。
②输入选择,1,2,3。
③判断玩家的选择,进入相应的模块,。
1.修改要猜的数字的个数n。
2.修改可以尝试的次数。
3.恢复默认值。
4.清除排行榜
0.其它,提示选择错误,返回②。
⑤输入修改的数值。
⑥变量w等于1。
⑦判断w是否等于1
是:
返回主菜单。
否:
返回主菜单。
系统设置流程图:
子菜单
执行输入
玩家输入
1
2
3
其它
提示错误
修改数值
w=1
修改数值
w=1
w!
==1
任意键
主菜单
No
Yes
4
0
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 { a[i]=rand()%10;//每次产生0-9范围内任意的一个数随机数并存到数组a中 ////限制重复数,,每生成一个数,要与之前已经生成的进行比较,如果有相同的 重新生成,直到不相同 for(j=0;j { if(a[j]==a[i]) { i=-1;//出现重复数,令i=0。 a[i]=rand()%10;//重新产生随机数 } } } 2.用户输入数字 for(i=0;i { scanf("%d",&b[i]); //判断输入是否有重复 for(j=0;j { if(b[j]==b[i])//检测输入的数字是否有重复,原理同1。 { printf("输入的数字有重复,请重新输入: \n"); i=-1; break; } } }// 3.判断部分 //判断 cnt1=cnt2=0; //判断输入的b[i]是否与原始数a[i]相等,即判断数值和位置都相同的数 for(i=0;i { if(b[i]==a[i]) { cnt1++; } //判断数值相同但位置不同的数 for(j=0;j { if(i! =j&&b[i]==a[j]) { cnt2++; break; } } } 4.胜利模块和排序 if(cnt1==t)//胜利条件 { printf("\n恭喜你! 猜对了! \n"); printf("你的得分为: %d\n\n",100-10*n);//得分 s=100-10*n;//计算得分 g[x]=s;//数组记录得分 if(g[x]>g[5])//判断分数是否进入前5名 { printf("恭喜你进入前五名,请输入你的名称(能力有限,仅仅支持英文名,按回车确认): \n"); fflush(stdin);//清除scnaf留下的回车缓存方法2在scanf后面加getch// gets(m[x]);数组记录玩家的姓名 } x++;//游戏胜利次数 /////分数和玩家姓名排序 for(i=0;i { for(j=i+1;j { 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)\n\n"); printf("②修改可以尝试的次数(默认为10)\n\n"); printf("③返回主菜单\n\n\n"); while(4)//子菜单循环 { printf("\n\n请选择你需要的操作: "); 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; } } else printf("\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("color7"); //////////////////////////////////////////////// if(ch=='1')//游戏主体 1.主游戏模块 { } if(ch=='2') 2.积分榜模块 { } if(ch=='3') 3.帮助信息模块 { } if(ch=='4') 4.系统设置模块 { } if(ch=='0') 0.退出模块 { } } else printf("\n菜单选择错误,请重新选择: \n"); }//while2 if(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输入时留下的回车缓存。 (查百度得出的解决方法) 疑难三:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 作业 要求 设计 说明书 初学者