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

下载本文档

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

文档简介

程序设计说明书

姓名:简正聪

班级:轮机136

学号:202313210626

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<stdio.h>

#include<stdlib.h>〃运用rand函数必需运用此头文件

#include<time.h>

intmain()

{inta;

srand(time(O));〃生成一个种子。整个程序只写一次即可。

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、整体程序流程图:

I

,V

Y-

12345

退

结束程序

3、各个模块

1)主嬉戏模块

①产生随机数:系统随机产生0-9的不重复的四个数,作为嬉戏的原始数字供玩

家进行猜数字嬉戏。

②玩家输入4个数

③判读玩家输入的数字是否有重复,

是:重新输入,否:接着输入。

④判读输入的4个数与原始数比较,提示玩家数值和位置全对的数字个数,和只

有数值但位置不对的数字个数。

⑤判读数字是否全对,

是:提示成功,推断分数是否能进排行榜并记录进入排行榜玩家的得分与姓名,

分数与姓名排序。

否:接着运行。

⑥输入次数加1。

⑦推断输入次数是否等于10。

是:提示失败,退出输入,按随意键返回菜单。

否:返回②接着输入。

流程图:

2)积分榜模块

调用主嬉戏模块中记录的分数和玩家姓名,打印出排行榜,按随意键返回主菜单。

3)帮助信息模块

干脆打印出帮助信息,输入随意键返回主菜单。

4)系统设置模块

①进入子菜单。

②输入选择,1,2,3。

③推断玩家的选择,进入相应的模块,。

1.修改要猜的数字的个数n。

2.修改可以尝试的次数。

3.复原默认值。

4.清除排行榜

0.其它,提示选择错误,返回②。

⑤输入修改的数值。

⑥变量w等于1。

⑦推断W是否等于1

是:返回主菜单。

否:返回主菜单。

系统设置流程图:

5)退出程序模块

玩家在主菜单选择0,q=l,检测推断,q=l,程序运行结束,退出关闭。

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<t;i++)

(

a[i]=rand()%10;〃每次产生0-9范围内随意的一个数随机数并存到数组a中

〃〃限制重复数,,每生成一个数,要与之前已经生成的进行比较,假如有相同的

重新生成,直到不相同

for(j=0;j<i;j++)〃〃限制重复数

(

if(a[j]=a[i])

(

i=T;〃出现重复数,令i=00

a[i]=rand重新产生随机数

2.用户输入数字

for(i=0;i<t;i++)//起先输入

(

scanf&b[i]);

〃推断输入是否有重复

for(j=0;j<i;j++)

(

if(b[j]=b[i])//检测输入的数字是否有重复,原理同1。

(

printf("输入的数字有重复,请重新输入:\n");

i=T;

break;

)

)

)//

3.推断部分

〃推断

cntl=cnt2=0;

〃推断输入的b[i]是否与原始数a[i]相等,即推断数值和位置都相同的数

for(i=0;i<t;i++)

(

if(b[i]=a[i])

(

cntl++;

}

〃推断数值相同但位置不同的数

for(j=0;j<t;j++)//

(

if(i!=j&&b[i]==a[j])

(

cnt2++;

break;

)

)

)

4.成功模块和排序

if(cntl==t)〃成功条件

(

printf("\n恭喜你!猜对了!\n");

printf("你的得分为:%d\n\n/z,100-10*n);//得分

s=100T0*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<x-l;i++)//分数选择排序;大到小

for(j=i+l;j<x;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(z,★第%d名的成果为:%03d”,i+l,g[i]);

printf("玩家:”);

puts(m[i]);〃输出玩家名字

printf;

}

printf(z/");

三帮助模块

Printf函数,干脆输出帮助信息。

四系统设置模块

while(4)〃子菜单循环

(

if(ch=='4')

(

system("cis");

〃打印子菜单

printf("\n①修改要猜的数字的个数(默认为4)\n\n");

printf("②修改可以尝试的次数(默认为10)\n\n");

printf("③返回主菜单\n\n\n");

while(4)〃子菜单循环

(

printf("\n\n请选择你须要的操作:”);

ch3=getch();

if(ch3=='l'||ch3=='2'I|ch3=='3'I|ch4=='4'||ch3=='5')

(

if(ch3==T)选择1

(

system("cls");

printf(“请输入要修改的猜的数字的个数:\n");

while(5)〃限制修改的次数只能为1~10

(

scanf&tl):

if(tl>10)

(printf("输入错误,请输入P10之间的数\n");}

else

(break;}

)

t=tl;//更新次数主嬉戏模块要猜数字的个数

printf("已修改,请按随意键返回主菜单...”);

w=l;〃返回主菜单条件

break;〃跳出子菜单循环

)

if(ch3=='2')〃选择2

{

system("cls");

printf("请输入要修改的尝试次数:\n");

scanf&hl);

h=hl;〃更新主嬉戏模块中的尝试次数

w=I;〃返回主菜单条件

printf("已修改,请按随意键返回主菜单...”);

break;//跳出子菜单循环

)

if(ch3=='3')

(

system("cis");

t=4;h=10;〃复原

w=l;〃返回主菜单条件

printf("已复原默认,请按随意键返回主菜单...”);

break;//跳出子菜单循环

)

if(ch3=='4')

(

system("cis");

for(i=0;i<100;i++)

g[i]=O;〃清除记录

strcpy(m[i],p[i]);〃清除姓名

W=l;〃返回主菜单条件

printf("已清除,请按随意键返回主菜单...”);

break;〃跳出子菜单循环

}

if(ch3=='5')〃选择返回主菜单

(

break;

)

)

else

printfC\n菜单选择错误,请重新选择:\n");

)

//主菜单返回模块

if(w==l)

{

ch2=getch();

)

w=0;〃条件复位

system("cis");

break;〃跳出菜单选择循环while2

〃主菜单返回模块end

五主程序跳出模块

if(q==l)〃推断标记位q是否等于1,跳出二层while2循环,一层循环检测q==l,

(结束程序。

break;〃跳出whilel

六主菜单循环模块

while(1)

(

printfC");〃/显示菜单,详情看源程序。

while(2)〃主菜单选择循环

if(ch==,I'|lch==,2'||ch==,3'IIch==,4')ich==,0')

system(/zcolor7");

////////////////////////////////////////////////

if(ch—1,)〃嬉戏主体

1.主嬉戏模块

}

if(ch='2")

2.积分榜模块

}L

if(ch==3')

3.帮助信息模块

}

if(ch='4')

4.系统设置模块

)

if(ch==O')

。.退出模块

}-----------------

}

else

printfC\n菜单选择错误,请重新选择:\n");

}//while2

if(q==l)

(

break;〃跳出whilel

}//whilel

七随意键返回模块

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置回iT再产生随

机数再进入推断,直到没有随机数为止。

疑难二:

记录玩家姓名时用gets函数,程序没有显示要输入字符干脆显示下个语句。

缘由:

gets函数会首先读取缓存区的内容,而前面的scanf函数在输入完毕后回车

确认会在缓存区留下回车字符,当运行到下面的gets函数时自动输入了回车,接

着就运行下一个语句。

解决方法:

在前面的scanf函数后面家getchO;汲取回车键,或者在后面的gets函数

前加fflush(stdin)函数清除scanf输入时留下的回车缓存。(查百度得出的解

决方法)

疑难三:

排行榜姓名的记录、

解决方法:

分数用数组g[i]记录,选择排序,玩家姓名m[i]跟着跟着g[i]用strcpy函数选择排

序。

第四章

运用状况

各种的功能运行状况展示:

嬉戏初始画面:

1.・

2椽

3—

4

0

嬉戏系统推断算法测试:

有同数字

温馨提示

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

评论

0/150

提交评论