C语言程序课程设计猜数字游戏Word文件下载.docx
- 文档编号:19766071
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:14
- 大小:94.69KB
C语言程序课程设计猜数字游戏Word文件下载.docx
《C语言程序课程设计猜数字游戏Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序课程设计猜数字游戏Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
确定算法的主要流程,在此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。
上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。
静态检查主要有两种途径:
(1)用一组测试数据手工执行程序;
(2)通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。
二.基础题
题目
用选择法对10个数进行排序。
有一个已排好序的数组。
现输入一个数,要求按原来的规律插入到原数组中。
解题思路
程序的主要功能是对数组元素用排序函数按从小到大的顺序进行排序。
先定义一个10个元素的一维数组a[10],然后从电脑输入10个数(也就是对数组赋值),然后使用一次fun()函数,对这10个数进行排序;
然后再定义一个11个元素的一维数组b[11],同时再从电脑输入一个数同a[10]一起赋值给b[11],然后再使用fun()函数,重新排序的到最后的有顺序的一组数据。
流程图
子函数流程图如图1所示:
图1基础题子函数流程图
主函数流程图如图2所示:
图2基础题主函数流程图
源代码
基础题源代码见附录A。
运行及测试结果
运行及测试结果如图3所示:
图3基础题运行及测试结果截图
三.改错题
#include<
>
intfun()
{
inta[3][3],sum;
inti,j;
____;
for(i=0;
i<
3;
i++)
for(j=0;
j<
j++)
scanf("
%d"
a[i][j]);
}
sum=sum*a[i][i];
printf("
累乘积=%d\n"
sum);
main()
fun();
程序的功能:
这是一个求3*3矩阵主对角线元素累乘积的程序。
程序分析:
可以看出源程序中,先声明了一个子函数,并定义子函数fun()累乘积函数(这个函数就是先定义了一个3*3的二维数组,然后从键盘输入数值对这个二维数组进行了数组赋初值,赋值过程中使用了for循环语句,然后利用for循环语句对主角线的元素做每个数的乘积,最后是输出这个累乘积。
)。
最后就是主函数main(),主函数中使用一次子函数fun()。
错误分析
错误一:
原程序中对sum没有设置初值,应设置为“sum=1;
”;
错误二:
scanf()函数中没有使用地址运算符,应在数组前加“&
”
错误三:
子函数也没设返回值,返回值应为“returnsum;
”。
改错后的源代码
改错后的源代码见附录B。
运行及测试结果如图4所示:
图4改错题运行及测试结果截图
四.综合题
设计课题四:
猜数字游戏
一.问题描述
该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。
玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。
A表示位置正确且数字正确,B表示数字正确而位置不正确。
如果4A0B,表示游戏成功。
每次猜错会有提示,如果八次都未猜对,游戏失败,显示正确答案。
按任意键可以返回主菜单。
主要应运数组和循环实现改功能。
(对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能,如:
破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。
)
二.功能要求
1.游戏显示这样的菜单:
(1)随机产生数据
(2)用户输入数据
(3)退出游戏
2.游戏成功与否都能返回主菜单
三.算法提示
1.数据结构:
数组
2.用简单的程序设计方法
四.测试数据
测试数据:
3792
第一次输入:
1234
0A2B
第二次输入:
5678
0A1B
第三次输入:
0867
第四次输入:
9786
1A1B
第五次输入:
1794
2A0B
第六次输入:
2793
2A2B
第七次输入:
3792
4A0B
游戏成功!
!
五.其它
对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能,如:
设计思路
此游戏程序通过不断输入以及逐渐数位对应的方法,一步一步的缩小猜测范围最终猜测出机器内已经存储的数字,达到健脑益智的效果。
这种策略非常直接——每次都猜可能答案中的一个。
例如:
首先猜测1234,
如果得到的反馈是2A2B那么可能的答案包括1256125753265236等等。
根据简单策略,下一次就猜1256,因为1256是所有可能答案中最小的数字。
简单策略是程序运行速度非常快,缺点是所猜测的次数较多。
利用主函数调用子函数来实现模块化程序设计。
将游戏的每一个功能设计成一个子函,数调用完成游戏。
主要分为两大模块:
随机模式和用户模式。
猜数字游戏的主要功能,由系统自动产生4个随机排列的整数,或者由用户输入4个不同的整数,并给用户8次机会猜测数字的数值和排列顺序。
如果用户在8次之内没有猜出正确的结果,则提示用户游戏失败,否则提示用户猜数字成功。
可以对系统在实现系统基本功能后,完善系统的其它功能,如:
主程序流程图如图5所示:
图5主程序流程图
源代码见附录C。
开始界面如图6所示:
图6开始界面结果截图
使用说明界面如图7所示:
图7使用说明界面截图
成功进行了一次游戏如图8所示:
图8完整一次游戏截图
总结
C程序课程设计是理论和实际的结合,通过这次程序的设计,提高了我的c语言水平,比如,查阅资料的重要性,对程序的整体性把握。
而且对整体的掌控,还有对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,积累了经验,但是当自己根据此思路设计出程序时,程序的运行出现了一些问题,这些问题出现时,我通过查阅资料,并且和同学交流,最终经过几次的修改,运行结果和期待的相同。
通过这次的课程设计,我感觉到自己的C语言知识很少,这次题目,可以让我掌握更多的知识,更好的了解c程序的编译过程,分析阶段,我的分析思路如下,进行面向对象的需求分析,系统设计,画出相应需求分析图,流程图,有了流程图,可以让我更好的理解这个程序的设计方法。
我还感觉到上机操作的重要性,以前我只是在书上看,而没有过多的上机操作,就算一个程序能写出来,上机操作的结果也未必正确,有时候自己对一个程序信心十足,但是如果上机操作,那么就有很多问题,并且遇到错误不要灰心,要一步一步的改,直到能运行出正确的结果为止,还有就是借助资料的重要性,一道题如果不会作,我们要借助资料来对比和解决,学习是一个不断完善的过程,要正视自己的不足之处,遇到不足的之处,要自己完善,比如,我体会到自己c语言知识知道的很少,在以后,我要学习和完善自己的C语言知识,还有,自己的实际操作太少,在以后学习C程序设计的过程中,要注重实际操作,而不只是在书上看看就完了。
参考文献
[1]谭浩强着.C程序设计(第四版).北京:
清华大学出版社,2010
[2]蔡志明着.指针的艺术.中国水利水电出版社,2009
[3]谭浩强编着.C程序设计(第三版).北京:
清华大学出版社,2005
[4]谭浩强着.C程序设计教程.北京:
清华大学出版社,2007
[5]谭浩强着.C语言程序设计(第2版).北京:
清华大学出版社,2008
[6]谭浩强编着.C程序设计题解与上机指导(第三版).北京:
[7]谭浩强编着.C++程序设计.清华大学出版社,2004
[8]谭浩强着.C程序设计(第四版)学习辅导.北京:
[9]陈明编着.计算机导论.北京:
清华大学出版社,2009
[10]C编写组编.常用C语言用法速查手册.北京:
龙门书局,1995
附录
附录A
voidmain()
{
voidfun(inta[],intn);
inta[10],i,k,b[11];
请输入十个数:
\n"
);
10;
i++)
scanf("
&
a[i]);
}
fun(a,10);
始游戏\n\n"
printf("
\t\t\t\t2.使用说明\n\n"
\t\t\t\t3.退出游戏\n\n"
\t\t\t请输入(1-3):
"
fflush(stdin);
choice=getchar();
}
while(choice!
='
1'
&
choice!
2'
3'
switch(choice)
{
case'
:
{
game();
break;
}
system("
cls"
printf("
\t\t\t\t欢迎使用本程序\n\n\n"
游戏说明:
输入%d位数字,输入后会有提示XAYB,X表示有几个数字与答案数字相同且位置相同。
\n"
MANY);
Y表示有几位数字与答案数字相同但位置不正确。
答案数字是5764,如果输入5481,则会提示1A1B。
祝你愉快!
\n\n"
按任意键返回主目录……\n"
getch();
确定要退出吗(y/n):
fflush(stdin);
ch=getchar();
if(ch=='
y'
||ch=='
Y'
exit(0);
else
continue;
}
}
while
(1);
/*游戏部分*/
voidgame()
intguess[MANY],answer[MANY];
inttimes,i,m,j;
intkey;
time_tt;
charwantplay,temp;
srand((unsigned)time(&
t));
do
{
/*生成MANY个随机数*/
do
u=0;
for(i=0;
MANY;
guess[i]=rand()%10;
same(guess);
}
while(u);
printf("
请输入%d位不相同的数:
for(times=1;
times<
=TIME_OUT+1;
times++)
{
/*超过限定数次*/
if(times==(TIME_OUT+1))
{
正确答案是:
for(m=0;
m<
m++)
printf("
guess[m]);
\n猜了%d次都没猜中"
TIME_OUT);
第%d次:
times);
/*玩家输入*/
temp=getchar();
answer[j]=temp-48;
/*temp是char型*/
/*检查输入有没有重复*/
same(answer);
if(u)
{
printf("
你输入的数字有重复,请重新输入\n"
continue;
ab(answer,guess);
/*判断输入数字正确的个数*/
if(a==MANY)
恭喜!
你猜对了"
break;
else
%dA%dB\n"
a,b);
还想玩吗(y/n):
fflush(stdin);
wantplay=getchar();
if(wantplay=='
||wantplay=='
)
system("
menu();
}
while(wantplay=='
/*判断输入的数或生成的数有没有重复的函数*/
voidsame(intnum[])
inti,j;
for(i=0;
MANY-1;
for(j=i+1;
j++)
if(num[i]==num[j])
u=1;
/*提示XAYB的函数*/
voidab(intanswer[],intguess[])
a=b=0;
if(answer[i]==guess[j])
if(i==j)
a++;
else
b++;
/*主函数*/
voidmain()
menu();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 课程设计 数字 游戏