数据结构课程设计(计算24点)

2019-08-30 19:48

《数据结构课程设计》

1 设计题目

计算24点

2 问题描述

有2、3、4、5、6、7、8、9、10、J、Q、K、A共13张牌,编一程序,判断对任意给定的4张牌,能否在进行加、减、乘、除运算后,其运算结果等于24。其中J按11计算,Q按12计算,K按13计算,A按1计算。如果能得到结果24,则输出可得到该结果的计算表达式。

若输入数据符合要求,且经过加、减、乘、除运算后,运行结果能得到24,如输入5,5,5,1,则显示可得到该结果的计算表达式,如5*(5-(1/5))。

若输入数据小于1或者大于13或者不是整数时,提示输入错误。 若输入不能运算出24的数据,如1,1,1,1,则显示经过加、减、乘、除运算后,运行结果不能得到24。

3设计

3.1存储结构设计

由于要储存的数据不多,主要是储存所输入的4个整数,所以采用一维数组(a[4])储存。而计算过程会出现小数,所以数据类型采用浮点型(float)。

3.2主要算法设计

程序采用穷举法,对输入的4个数进行排列,有 4!=24种。用for来循环,if来判断,算法如下。 for (i=0;i<4;i++) for (j=0;j<4;j++) if (j!=i)

1

《数据结构课程设计》

for (k=0;k<4;k++) if (k!=j && k!=i) for (l=0;l<4;l++)

if (l!=i && l!=j && l!=k)

{ calculate(a[i],a[j],a[k],a[l]);}

运算符号有4种,分别是 +、-、*、/,每次从里面选3种出来排列,有4*4*4=64 种情况,也用for来实现,算法如下 for (i=0;i<4;i++) for (j=0;j<6;j++) for (k=0;k<6;k++)

用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) {

sum1=arithmetic(i,a,b); sum2=arithmetic(j,c,d); sum3=sum1*sum2; } if (k==3) {

sum1=arithmetic(i,a,b);

2

《数据结构课程设计》

sum2=arithmetic(j,c,d); 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。算法如下:

void show(int type,int i,int j,int k,float a,float b,float c,float d) {

if (type==1) { if(j==4 || j==5)

{

if (k==4 || k==5)

cout<

cout<<\24\

}

else if (k==4 || k==5)

cout<

}

3

《数据结构课程设计》

else

cout<<\ }

if (type==2 || type==3) {

cout<<\ } }

3.3程序流程框图如图1所示

图 1 算法流程图

4

《数据结构课程设计》

3.4详细设计

代码(见附录 F1 源代码)

4调试报告

4.1 测试用例

首先,测试程序能不能运算出正确的结果,输入数据6,6,6,6,出现了44组符合要求的解。

接着输入数据2,9,7,14,提示输入错误,重新输入2,7,5,13,能得到正确运行结果。

输入4,9,11,13,不能运算得到24,显示“你所输入的数,经过四则运算后,不等于24点”

输入5,5,5,1,这组数据要运算得到24,一定会出现小数,因为只有一种运算,即5*(5 - 1 / 5),程序显示出正确结果。

输入3,3,8,8,这组数据要运算得到24,一定会出现无限循环小数,因为只有一种运算,即8/(8 – 8 / 3),程序显示“你所输入的数,经过四则运算后,不等于24点”,没有输出正确结果。经过分析,问题出现在无限小数上,因为就算能出 24,但并不等于 24,而是很接近 24,所以把 if (fabs(sum3-24)==0) 改为 if(fabs(sum3-24)<0.001)。重新输入3,3,8,8,显示了正确结果。

4.2调试运行结果

程序第一次编译时,有19个错误,都是语法错误,修改后,能通过编译。第一次运行,并不能输出正确结果,主要原因有两个:一个是运算符号的穷举次数不对,另一个是 4个数的运算先后顺序不对。其他的错误有除数不能为零,括号的位置不对。经过修改,调试后,能运算出正确的结果。

输入 3.1测试用例的数据,程序运行成功,运行结果如图2,3,4,5,6所示(见 附录 F2 运行结果)

5


数据结构课程设计(计算24点).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:学校留守儿童心理疏导活动记录表

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: