四则混合运算和后缀表达式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

///

四则混合运算。

波兰表达式。

逆波兰表达式(后缀表达式)生成算法:

(1)构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。

(2)读入一个用中缀表示法表示的简单算术表达式,为方便起见,认为地在字符串后面加入一个特殊字符“;”,并设其优先级为0。

(3)从左至右扫描该算术表达式的每一个字符,如果该字符是数字,则分析到该数字串的结束并将该数字串加入结果字符串,小数点亦算入数字串。

(4)如果该字符是运算符,则按如下操作:优先级高的放在前面,通过出入栈操作。

如果该字符是左括号“(”,则该字符直接压入运算符栈。

如果该字符是右括号“)”,则把运算符栈顶元素弹出直至第一次遇到左括号。如果该字符是算术运算符且其优先关系高于运算符栈顶的运算符,则将该运算符入栈。

否则,将栈顶的运算符从栈中弹出至结果字符串末尾,直至栈顶运算符的优先级低于当前运算符,并将该字符入栈。

(5)重复上述操作(3)-(4)直至扫描完整个简单算术表达式(遇到特殊字符“;”)。

如:

一般简单表达式:((4+5)*6-5)/2+3*2

逆波兰表达式:4 5 + 6 * 5 - 2 / 3 2 * +

步骤如下:

运算符栈结果字符串

第1步:; ""

第2步:;( ""

第3步:;(( ""

第4步:;(( "4"

第5步:;((+ "4 5"

第6步:;( "4 5 +"

第7步:;(* "4 5 +"

第8步:;(* "4 5 + 6"

第9步:;(- "4 5 + 6 *"

第10步:;(- "4 5 + 6 * 5"

第11步:; "4 5 + 6 * 5 -"

第12步:;/ "4 5 + 6 * 5 -"

第13步:;/ "4 5 + 6 * 5 - 2"

第14步:;+ "4 5 + 6 * 5 - 2 /"

第15步:;+ "4 5 + 6 * 5 - 2 / 3"

第16步:;+* "4 5 + 6 * 5 - 2 / 3"

第17步:;+* "4 5 + 6 * 5 - 2 / 3 2"

第18步:;+ "4 5 + 6 * 5 - 2 / 3 2 *"

第19步:; "4 5 + 6 * 5 - 2 / 3 2 * +"

其中运算符优先级如下:

* / :2

+ - :1

;:0

逆波兰表达式求值算法:

(1)构建一个操作数栈,类型为float;

(2)依次扫描逆波兰表达式的每一项;

(3)如果是数字串则压入操作数栈;

(4)如果是运算符,则从操作数栈顶弹出两个操作数,与运算符进行运算,结果压入操作数栈。

(5)不断重复以上步骤直至扫描完逆波兰表达式。

(6)此时操作数栈必定只剩一个数据,即为逆波兰表达式的值,弹出输出。如:如上表达式计算结果为:30.5.

相关文档
最新文档