C程序设计 24点小游戏文档格式.docx
- 文档编号:21521916
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:12
- 大小:145.09KB
C程序设计 24点小游戏文档格式.docx
《C程序设计 24点小游戏文档格式.docx》由会员分享,可在线阅读,更多相关《C程序设计 24点小游戏文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
for(k=0;
k<
k++)
if(k!
=j&
&
k!
for(l=0;
l<
l++)
if(l!
=i&
l!
=k)
{calculate(a[i],a[j],a[k],a[l]);
}
用if来判断括号的类型,然后作出不同顺序的运算。
括号有两对,主要有两种类型:
一种是()()型,如(a+b)*(c+d);
另一种是(())型,继续细分又有4种类型,如下a*(b*(c+d)),(a*(b+c))*d,a*((b+c)*d),((a+b)*c)*d。
算法如下
if((!
(i==3&
b==0))&
(!
(j==3&
c==0))&
(k==3&
d==0)))
{
sum1=arithmetic(i,a,b);
sum2=arithmetic(j,sum1,c);
sum3=arithmetic(k,sum2,d);
}
if(k==2)
sum2=arithmetic(j,c,d);
sum3=sum1*sum2;
if(k==3)
{
if(sum2!
=0)
sum3=sum1/sum2;
在输入方面,按要求,数据类型是1至13的整数,符合则进行运算,不符合则重新输入。
用if语句来实现,如下
if(a[i]<
1||a[i]>
13||a[i]!
=int(a[i]))
在输出方面,运算结果等于24就输出,利用调用的参数判断输出形式,有5种:
(a+b)*(c+d),a*(b*(c+d)),(a*(b+c))*d,a*((b+c)*d),((a+b)*c)*d。
算法如下:
voidshow(inttype,inti,intj,intk,floata,floatb,floatc,floatd)
if(type==1){
if(j==4||j==5)
if(k==4||k==5)
cout<
<
d<
sign[k]<
"
("
c<
sign[j]<
a<
sign[i]<
b<
))=24"
endl;
else
))"
=24"
elseif(k==4||k==5)
cout<
(("
)"
)=24"
else
=24"
if(type==2||type==3)
cout<
2.3程序流程框图
程序流程框图如图2-3所示:
图2-3
3程序调试
3.1测试用例
开始运行时的页面如图4-1所示:
图4-1
首先,测试程序能不能运算出正确的结果,输入数据6,6,6,6,出现了44组符合要求的解,如图4-2所示。
接着输入数据2,9,7,14,提示输入错误,重新输入2,7,5,13,能得到正确运行结果,如图4-2所示。
输入4,9,11,13,不能运算得到24,显示“你所输入的数,经过四则运算后,不等于24点”,如图4-3所示。
输入5,5,5,1,这组数据要运算得到24,一定会出现小数,因为只有一种运算,即5*(5-1/5),程序显示出正确结果,如图4-4所示。
3.2调试运行结果
程序第一次编译时,有19个错误,都是语法错误,修改后,能通过编译。
第一次运行,并不能输出正确结果,主要原因有两个:
一个是运算符号的穷举次数不对,另一个是4个数的运算先后顺序不对。
其他的错误有除数不能为零,括号的位置不对。
经过修改,调试后,能运算出正确的结果。
3.1运行的结果如图:
图4-2
图4-3
图4-4
图4-5
4心得体会
通过这次课程设计,让我对一个程序的数据结构有更全面更进一步的认识,根据不同的需求,采用不同的数据存储方式,不一定要用栈,二叉树等高级类型,有时用基本的一维数组,只要运用得当,也能达到相同的效果,甚至更佳,就如这次的课程设计题目----计算24点,通过用for的多重循环,结合if判断,舍弃多余的循环,提高了程序的运行效率。
在编写这个程序的过程中,我服习了之前学的基本语法,更加深刻的认识到循环是大部分程序的基本要素。
结合了这学期学的数据结构,分析算法的时间复杂度,不断改进算法,更加巩固了之前学的知识,比以前更能灵活运用。
此次写的程序还有很大的发展空间,可以通过循环,重复输入数据,多次计算24点。
还可以通过设计,让程序能计算出任意结果,不单是24。
在输出方面,为提高运行效率,可以设计只输出一组解。
在输入方面,放宽数据类型,例如,可以运算负数,小数等。
还可以输入多个数,不局限在4个数。
随着数量增加,循环增加,为提高运行效率,可以考虑更改数据类型。
此次课程设计,我受益匪浅,巩固旧知识的同时,学习了新的知识。
更重要的是,它使我对数据结构产生了浓厚的兴趣,对编写程序更有信心。
附件:
源程序清单
#include<
iostream.h>
math.h>
intcheck;
//标志能否运算出24
floatarithmetic(intflag,floatm,floatn)//进行四则运算
switch(flag)//判断运算符号,返回相对应的运算结果
case0:
return(m+n);
case1:
return(m-n);
case2:
return(m*n);
case3:
if(n==0)
return10000;
//除数为0,则返回10000,使之不能运算出24
return(m/n);
case4:
return(n-m);
case5:
if(m==0)
return(n/m);
default:
return0;
//利用参数type选择输出形式,利用参数i,j,k确定输出的运算符号
charsign[6];
//定义运算符号数组
sign[0]='
+'
;
sign[1]='
-'
sign[2]='
*'
sign[3]='
/'
sign[4]='
//减法不符合交换律
sign[5]='
//除法不符合交换律
if(type==1)//根据括号的类型做不同的输出
if(j==4||j==5)//减法和除法
if(k==4||k==5)//a*(b*(c+d))形式
))=24"
else//(a*(b+c))*d形式
=24"
elseif(k==4||k==5)//a*((b+c)*d)形式
)=24"
else//((a+b)*c)*d形式
if(type==2||type==3)//(a+b)*(c+d)形式
voidcalculate(floata,floatb,floatc,floatd)//进行加、减、乘、除运算
inti,j,k;
floatsum1,sum2,sum3;
//储存3次两两运算的结果
for(i=0;
i++)//"
+-*/"
4个运算符号选3个,有4*4*4=64种
6;
j++)//3种运算符排列有3!
=6种
if((!
d==0)))//括号的类型为(())
//3为做除法运算的标志,除数为0时,跳过
//a,b做以i为标志的运算,然后把值赋给sum1
//sum1,c做以j为标志的运算,然后把值赋给sum2
//sum2,d做以k为标志的运算,然后把值赋给sum3
if(fabs(sum3-24)<
0.001)//判断能否运算出24,出现小数时,能够包含在内
check++;
//标志能运算出24
show(1,i,j,k,a,b,c,d);
//输出运算出24的表达式
if(k==2)//()*()
0.001)//出现小数时,能够包含在内
show(2,i,j,k,a,b,c,d);
if(k==3)//括号的类型为()()
if(sum2!
sum3=sum1/sum2;
show(3,i,j,k,a,b,c,d);
voidmain()
inti,j,k,l,m=0;
floata[4];
//储存所输入的4个整数
while(m==0)
m=1;
"
请输入4个1--13的整数:
for(i=0;
i++)
{
cin>
>
a[i];
if(a[i]<
=int(a[i]))//判断是否为符合要求的整数
if(m!
{
输入错误,请重新输入!
}
m=0;
}
i++)//4的排列4!
=24,每中情况调用calculate
=i)//第2数和第1个数不能重复
=i)//第3数和第1,2个数不能重复
=k)//第4数和第1,2,3个数不能重复
calculate(a[i],a[j],a[k],a[l]);
//调用calculate函数,进行进行加、减、乘、除运算
if(check==0)//不能运算出24
{cout<
你所输入的数,经过四则运算后,不等于24点"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计 24点小游戏 程序设计 24 小游戏