自C++24点扑克牌游戏含源码.docx

上传人:b****2 文档编号:2207338 上传时间:2023-05-02 格式:DOCX 页数:18 大小:144.63KB
下载 相关 举报
自C++24点扑克牌游戏含源码.docx_第1页
第1页 / 共18页
自C++24点扑克牌游戏含源码.docx_第2页
第2页 / 共18页
自C++24点扑克牌游戏含源码.docx_第3页
第3页 / 共18页
自C++24点扑克牌游戏含源码.docx_第4页
第4页 / 共18页
自C++24点扑克牌游戏含源码.docx_第5页
第5页 / 共18页
自C++24点扑克牌游戏含源码.docx_第6页
第6页 / 共18页
自C++24点扑克牌游戏含源码.docx_第7页
第7页 / 共18页
自C++24点扑克牌游戏含源码.docx_第8页
第8页 / 共18页
自C++24点扑克牌游戏含源码.docx_第9页
第9页 / 共18页
自C++24点扑克牌游戏含源码.docx_第10页
第10页 / 共18页
自C++24点扑克牌游戏含源码.docx_第11页
第11页 / 共18页
自C++24点扑克牌游戏含源码.docx_第12页
第12页 / 共18页
自C++24点扑克牌游戏含源码.docx_第13页
第13页 / 共18页
自C++24点扑克牌游戏含源码.docx_第14页
第14页 / 共18页
自C++24点扑克牌游戏含源码.docx_第15页
第15页 / 共18页
自C++24点扑克牌游戏含源码.docx_第16页
第16页 / 共18页
自C++24点扑克牌游戏含源码.docx_第17页
第17页 / 共18页
自C++24点扑克牌游戏含源码.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

自C++24点扑克牌游戏含源码.docx

《自C++24点扑克牌游戏含源码.docx》由会员分享,可在线阅读,更多相关《自C++24点扑克牌游戏含源码.docx(18页珍藏版)》请在冰点文库上搜索。

自C++24点扑克牌游戏含源码.docx

自C++24点扑克牌游戏含源码

一、实验设计方案

1、实验内容与目的(简单介绍实验内容,说明实验目的)

实验目的:

实现扑克牌游戏:

对于任意的四个1到13的整数(四张扑克牌),求能算出24的表达式;运算符有()+-*/;若无解则输出相应的信息。

实验内容:

你的具体选择(要详细)

文件输入(input.txt)输出(output.txt),输出全部结果;

——————————————————————————————————————

2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)

本次实验相当于,给出四个数字,要求,在其间添加运算符和括号,使得计算结果等于24。

括号的放置即为决定哪几个数先进行计算。

所以,我们先确定首先进行计算的两个相邻的数,计算完成后,就相当于剩下三个数字,仍需要在它们之间添加符号;然后再决定在这三个数中哪两个相邻的数先计算。

由此,我们就成功解决了数字的运算次序问题,此时不需要再考虑不同运算符号的优先级问题,因为括号的优先级高于加减乘除。

通过循环,我们可以得到第一第二第三次计算的运算符,再通过计算,就可以得出和,若和等于24,即为所求解。

在输出格式中,由于括号的放置共六种情况,故根据计算先后顺序的不同,输出时在不同地方放置括号;

以下为循环计算的流程图:

    

  表示循环获取;

   表示计算数值

以下为计算函数的流程图:

——————————————————————————————————————

二、实验步骤、测试与结果分析

1、源程序的设计(在此附上源程序(cpp文件)清单)

#include

#include<fstream>

#include

usingnamespacestd;

charsign[4]={'+','-','*','/'};

//定义一个全局变量,用于储存加减乘除符号,方便下面符号判断

class game24point

//24点纸牌游戏类

{

private:

double a[4];

ﻩ//为实现精确计算,防止计算结果为小数却被强制转换为整数,采用double变量

public:

game24point();

//构造函数

double calcute(double,double,char);

//计算函数,给出一个符号两个有顺序的数,计算结果

voidsearch();

ﻩ//搜索函数,用于寻找合适的解

void print();

ﻩ//打印得到的四张纸牌的数值

};

game24point:

:

game24point()

{

ﻩcharch[4];

ﻩ//由于纸牌中除了数字还有AJQK等字符,故使用字符数组

ifstreaminfile("input.txt");

if(!

infile)

//若打开失败

{

ﻩcout<<"打开文件input.txt失败!

"<

exit(1);

ﻩ}

for(inti=0;i<4;i++) infile>>ch[i];

//在input文件中读取数据

ﻩcout<<" ##########################################"<<endl;

cout<<"   ##             ##"<<endl;

ﻩcout<<"   ##  正在从input.txt中读取数据  ##"<<endl;

cout<<"   ##            ##"<<endl;

cout<<"  ##########################################"<<endl;

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

if(ch[i]=='A')a[i]=10;

ﻩﻩelseif(ch[i]=='J') a[i]=11;

ﻩﻩelseif(ch[i]=='Q')a[i]=12;

ﻩelseif(ch[i]=='K') a[i]=13;

ﻩelseif(ch[i]=='1')a[i]=1;

ﻩﻩelseif(ch[i]=='2')a[i]=2;

ﻩﻩelseif(ch[i]=='3')a[i]=3;

ﻩelse if(ch[i]=='4')a[i]=4;

ﻩﻩelseif(ch[i]=='5')a[i]=5;

ﻩﻩelseif(ch[i]=='6')a[i]=6;

else if(ch[i]=='7')a[i]=7;

ﻩﻩelseif(ch[i]=='8')a[i]=8;

ﻩelseif(ch[i]=='9') a[i]=9;

else

ﻩﻩ{

ﻩﻩcout<<"第"<

"<

ﻩexit

(1);

ﻩ}

}

//纸牌字符转换为数值

in();

double game24point:

:

calcute(doublea,double b,charindex)

{

ﻩif(index=='+') returna+b;

ﻩ//若为+,则返回相应结果

elseif(index=='-')returna-b;

ﻩelseif(index=='*')returna*b;

ﻩelse if(index=='/')if(b!

=0)return a/b;

//只有当分母不为0时,返回结果

}

voidgame24point:

:

search()

{

ﻩdoubletemp[3],tem[2];

//第一个符号放置后,经过计算后相当于剩下三个数,这个数组用于存储这三个数

doublesum;

ﻩ//求得的和

intjudge=0;

//判断是否找到一个合理的解

ofstreamoutfile("output.txt",ios:

:

app);

//以输出的方式打开文件

if(!

outfile)

//若文件打开失败

ﻩ{

cout<<"打开文件output.txt失败"<

exit

(1);

ﻩcout<<"  ##########################################"<<endl;

ﻩcout<<"   ##       ##"<<endl;

ﻩcout<<" ##正在计算结果,请等待 ##"<

ﻩcout<<" ##         ##"<<endl;

ﻩcout<<" ##########################################"<

ﻩoutfile<<"======================================================================="<<endl;

outfile<<"    ##########################################"<

outfile<<"    ##         ##"<

outfile<<"     ## 本次24点游戏求得结果如下##"<<endl;

ﻩoutfile<<"  ##              ##"<<endl;

outfile<<" ##########################################"<

ﻩfor(inti=0;i<4;i++)

ﻩ//第一次放置的符号

ﻩ{

ﻩﻩfor(int j=0;j<4;j++)

ﻩﻩ//第二次放置的符号

{

ﻩfor(int k=0;k<4;k++)

ﻩﻩﻩ//第三次放置的符号

{

ﻩfor(intm=0;m<3;m++)

ﻩﻩﻩ//首先计算的两个相邻数字,共有3种情况,相当于括号的作用

ﻩﻩﻩ{

ﻩif(a[m+1]==0&&sign[i]=='/') break;

ﻩﻩﻩﻩtemp[m]=calcute(a[m],a[m+1],sign[i]);

ﻩﻩtemp[(m+1)%3]=a[(m+2)%4];

ﻩﻩﻩﻩtemp[(m+2)%3]=a[(m+3)%4];

ﻩﻩ//先确定首先计算的两个数字,计算完成相当于剩下三个数,按顺序储存在temp数组中

ﻩﻩﻩfor(int n=0;n<2;n++)

ﻩ//三个数字选出先计算的两个相邻数字,两种情况,相当于第二个括号

ﻩﻩ{

ﻩﻩﻩif(temp[n+1]==0&&sign[j]=='/') break;

ﻩﻩﻩﻩtem[n]=calcute(temp[n],temp[n+1],sign[j]);

ﻩﻩtem[(n+1)%2]=temp[(n+2)%3];

ﻩﻩ//先确定首先计算的两个数字,计算完成相当于剩下两个数,按顺序储存在temp数组中

ﻩﻩﻩﻩif(tem[1]==0&& sign[k]=='/')break;

ﻩﻩﻩsum=calcute(tem[0],tem[1],sign[k]);

ﻩﻩﻩﻩ//计算和

ﻩﻩﻩ

ﻩﻩﻩﻩif(sum==24)

ﻩﻩ//若和为24

ﻩﻩﻩﻩﻩ{

ﻩjudge=1;

ﻩﻩ//判断符为1,表示已求得解

ﻩif(m==0&&n==0)

ﻩﻩoutfile<<"(("<

ﻩﻩﻩﻩﻩ

ﻩﻩﻩelseif(m==0&&n==1)

ﻩﻩﻩoutfile<<"("<

ﻩﻩﻩﻩ

ﻩﻩﻩﻩelse if(m==1 &&n==0)

ﻩﻩﻩﻩﻩoutfile<<"("<<a[0]<<sign[j]<<"("<

ﻩﻩﻩ

ﻩﻩﻩelseif(m==1&& n==1)

ﻩﻩﻩﻩﻩoutfile<

ﻩﻩﻩﻩﻩ

ﻩﻩﻩelseif(m==2&&n==0)

ﻩﻩﻩﻩoutfile<<"("<<a[0]<<sign[j]<

ﻩﻩﻩ

ﻩﻩﻩﻩﻩﻩelse if(m==2&&n==0)

ﻩﻩﻩoutfile<<a[0]<<sign[k]<<"("<

ﻩﻩﻩ//m=0,1,2n=0,1表示六种括号放置可能,并按照这六种可能输出相应的格式的计算式

ﻩﻩﻩﻩ

ﻩﻩﻩﻩ}

ﻩﻩﻩ}

ﻩﻩ}

ﻩ}

ﻩ}

}

ﻩif(judge==0)outfile<<"这四张扑克牌无法找到一个合理的解"<<endl;

//如果没有找到结果,符号位为0

outfile<<"======================================================================="<

ﻩoutfile<

ﻩout();

cout<<"计算完成,结果已保存在output.txt文件中!

"<<endl;

}

voidgame24point:

:

print()

{

ﻩcout<<"读取成功!

"<<endl;

for(inti=0;i<4;i++)

ﻩ{

cout<<"第"<<i+1<<"张牌"<<a[i]<

ﻩ}

}

intmain(void)

{

ﻩgame24point obj;

ﻩobj.print();

ﻩcout<

obj.search();

cout<<endl;

system("PAUSE");

ﻩreturn0;

}

——————————————————————————————————————

2、实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)

input.txt截图

Exe执行文件截图

 

Output.txt执行截图

 

input.txt 输入截图如下:

 

Jcsy.exe执行截图如下:

output.txt输出截图如下:

input.txt输入截图如下:

jcsy.exe执行截图如下:

Output.txt 输出截图如下:

——————————————————————————————————————

3、实验总结(是否成功解决问题,总结实验中最有价值的内容,程序能够在哪些方面进一步改善,自我评价成败得失)

试验中,我们按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;

通过对例题的学习,我们最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;

编码的速度有一个从慢到快的过程,在本次试验中,我们的速度依然比较慢,这看出我们平时编码比较少,缺乏熟练度,并对算法了解不深入;

但是我们的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需要等待几秒钟。

再以后我们将通过练习基础功,简化程序代码,实现简单代码完善功能的理想。

1.编码要尽量使程序简单,采用最切实可靠的算法,实现封装,不同部分的代码应分工明确,最后由主函数统一调用;

2.编写完成后先自己检查一遍代码,然后由机器检测,找出错误的根源,从不同角度思考如何解决问题;

3.测试时应尽可能输入各种可能情况的数据以确保程序准确无误。

4.应避免任何可能的漏洞,使代码的可用性和可靠性增强。

5.试验中,我按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;

6.通过对例题的学习,我最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;

7.编码的速度有一个从慢到快的过程,在本次试验中,我的速度依然比较慢,这看出我平时编码比较少,缺乏熟练度,并对算法了解不深入;

8.但是我的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需要等待几秒钟。

再以后我将通过练习基础功,简化程序代码,实现简单代码完善功能的理想。

本次试验中,我们先将书上的代码编译通过,通过讨论,认为书上检查异常的方式不便于理解,于是直接采用输出到dos窗口的方式,所以没有使用到utility.h头文件,同时,由于我们电脑上安装的编译系统不方便对.h文件进行调试修改,所以我们采用的cpp文件,在一个cpp文件中写下所有代码。

对于txt文件输出的格式,我们做的稍微人性化,界面简洁,容易区分

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2