点扑克牌游戏_第1页
点扑克牌游戏_第2页
点扑克牌游戏_第3页
点扑克牌游戏_第4页
点扑克牌游戏_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

第13章24点扑克牌游戏,前面学习了C语言各方面的知识,本章通过经典游戏“24点扑克牌”的设计与实现来提高读者的学习兴趣,能够对相关知识有较强的综合运用能力。编写程序实现的“24点扑克牌”游戏,就是利用计算机模拟随机发给用户4个数,用户尽量将这4个数利用加减乘除四则运算最后得到24。本章讲述的知识点包括:将中缀表达式转换为后缀表达式的算法的实现。对后缀表达式的求值算法的实现。栈的概念及其基本操作。随机数产生的算法的实现。,13.1游戏描述,“24点扑克牌游戏”是一个很多人从小到大都在玩的游戏,作为老少皆宜的大众游戏,很多人都将它作为孩子学习数学和开发智力的工具。最初是几个人使用一副扑克牌来玩此游戏,基本的游戏规则是:随便从一副扑克牌中拿出四张牌,参与游戏的人将这四张扑克牌上的数字(其中J算11、Q算12、K算13)用加、减、乘、除、四则运算(包括括号)将四个数组成一个表达式,使表达式的结果为24。看谁算得最快,谁就赢了。使用计算机模拟该游戏,就是随机产生4个113之间的整数,由用户输入它们组合后的表达式,计算机计算该表达式的值,判断是否为24。,13.2游戏解析,知道了游戏的基本规则,下面开始分析设计了。大家都知道,我们直接通过键盘输入算术表达式,计算机系统是不会给我们算出表达式的结果的。那么,如何计算出表达式的值呢?经过分析,实现这个游戏有两个关键点,一个是如何处理用户输入的表达式,以便为计算表达式的值作准备,另外一个就是对表达式如何求值。,13.2.1处理用户输入得表达式,现在,将我们平时输入的表达式称为中缀表达式,而计算机存储一般都是后缀表达式。所以,我们要将用户输入的中缀表达式转换为后缀表达式后存储。1算术表达式的形式2将中缀表达式转换为后缀表达式,13.2.2对后缀表达式求值,由于后缀表达式中没有括号,不需判别优先级,计算严格从左向右进行,故计算一个后缀表达式要比计算机一个中缀表达式简单得多。在我们的程序中就是对转换成的后缀表达式进行计算,这样比较方便。对后缀表达式进行求值计算的算法思想是:(1)建立一个栈(STACK类型);(2)从左到右读后缀表达式,读到数字就将它转换为数值压入栈中,读到运算符则从栈中依次弹出两个数分别到num2和num1,然后以“num1运算符num2”的形式计算出结果,再将结果压加栈中;(3)如果后缀表达式未读完,就重复上面过程(2),直到读到结束符“0”为止,最后输出栈顶的数值则为最后表达式的结果。,13.3两个重要函数的实现,通过前面的分析,那么下面如何具体的用C语言实现将中缀表达式转换为后缀表达式的和对后缀表达式进行求值计算的这两个函数呢?,13.4“24点扑克牌游戏”的实现,两个重要算法实现了,那么“24点扑克牌游戏”的实现基本就没有太大问题了。但是为了更好的体现游戏并实现其功能,还要有几部分辅助的函数。,13.4.1栈的基本操作函数的实现,在代码13-1和代码13-2中,大量的用到了栈的相关操作,所以还要在程序中编写相应的函数来实现栈的操作。由于栈的操作都是在一端进行,所以本程序实现栈的存储使用了动态存储的链表形式。我们可以将链表的表头作为栈顶,这样不但可以利用链表头指针就可以很方便实现栈的操作,还有利于空间的合理分配。栈的基本操作主要有判断栈是否为空、入栈、出栈、读取栈顶元素的值和读取栈顶元素的值并出栈。,13.4.2随机发四张扑克牌函数的实现,游戏的玩法在实际中是随便发四张扑克牌,根据这四张牌上的数进行加减乘除运算结果凑成24。我们编写的程序要模拟发牌的过程,这如何解决?很简单,只需要要计算机随机产生四个113之间(扑克牌上的数是113之间)的整数即可。在C语言中,使用random函数就可产生一个随机数。,13.4.3检查输入表达式的正确性函数的实现,由于对用户输入的表达式有特殊的要求(在每个数字结束后要加一个“.”),也为了程序的完整性和安全性,在程序中编写了检查用户输入的表达式是否符合要求的函数。,13.4.4main函数的实现,main函数主要完成的事情就是理清思路,将前面分析设计的函数有机的组织在一起,实现真正的“24点扑克牌”游戏。,13.5小结,本程序中,最主要是实现了中缀表达式转换成后缀表达式和后缀表达式计算

温馨提示

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

评论

0/150

提交评论