当前位置:首页 » 编程语言 » 逆波兰c语言

逆波兰c语言

发布时间: 2025-02-25 13:02:18

‘壹’ 将下面的算术运算式表示成逆波兰式(数据结构 c语言版)

a*b*c → **abc
a*b*c+c*d → +**abc*cd
(a+b)*((c-d)*e+f) → *+ab+*-cdef

上面是波兰式,逆波兰式如下:

a*b*c → ab*c*
a*b*c+c*d → ab*c*cd*+
(a+b)*((c-d)*e+f) → ab+cd-e*f+*

写出(a+b)*((c-d)*e+f)转换时栈的变化情况:【注意,右端为栈顶】

读入(,入栈,栈中为(,输出:(空);
读入a,直接输出,栈中为(,输出:a;
读入+,入栈,栈中为(+,输出:a;
读入b,直接输出,栈中为(+,输出:ab;
读入),依次推出栈中的符号,直到遇见一个(【注意括号不输出】,栈中为空,输出:ab+;
读入*,入栈,栈中为*,输出:ab+;
读入(,入栈,栈中为*(,输出:ab+;
读入(,入栈,栈中为*((,输出:ab+;
读入c,直接输出,栈中为*((,输出:ab+c;
读入-,入栈,栈中为*((-,输出:ab+c;
读入d,直接输出,栈中为*((-,输出:ab+cd;
读入),依次推出栈中的符号,直到遇见一个(【注意括号不输出】,栈中为*(,输出:ab+cd-;
读入*,入栈,栈中为*(*,输出:ab+cd-;
读入e,直接输出,栈中为*(*,输出:ab+cd-e;
读入+,【由于此时栈中的*的优先级高于+,所以先将*退栈,然后+入栈】,栈中为*(+,输出:ab+cd-e*;
读入f,直接输出,栈中为*(+,输出:ab+cd-e*f;
读入),依次推出栈中的符号,直到遇见一个(【注意括号不输出】,栈中为*,输出:ab+cd-e*f+;
此时读入已经完毕,栈中还剩一个*,输出:ab+cd-e*f+*
完毕!

以上就是整个从中缀表达式到后缀表达式的过程,栈的变化情况已经都写出来了。

‘贰’ c语言中的后缀表达式是什么意思

转化后的后缀表达式为:abcde/+*+

具体分析:

1、初始化一空栈,用来对符号进出栈使用。

8、栈顶元素“(”出栈,“/”出栈,“+”出栈,“(”出栈,括号配对完成。

9、之后也是依次出栈,最后结果为:abcde/+*+。

(2)逆波兰c语言扩展阅读:

后缀表达式进行计算的通用做法:

可以先建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。

后缀表达式:也叫逆波兰表示法(Reverse Polish notation,RPN,或逆波兰记法),是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。

实际意义:

1、当有操作符时就计算,因此,表达式并不是从右至左整体计算而是每次由中心向外计算一部分,这样在复杂运算中就很少导致操作符错误。

2、堆栈自动记录中间结果,这就是为什么逆波兰计算器能容易对任意复杂的表达式求值。与普通科学计算器不同,它对表达式的复杂性没有限制。

3、逆波兰表达式中不需要括号,用户只需按照表达式顺序求值,让堆栈自动记录中间结果;同样的,也不需要指定操作符的优先级。

4、逆波兰计算器中,没有“等号”键用于开始计算。

5、逆波兰计算器需要“确认”键用于区分两个相邻的操作数。

6、机器状态永远是一个堆栈状态,堆栈里是需要运算的操作数,栈内不会有操作符。

7、教育意义上,逆波兰计算器的使用者必须懂得要计算的表达式的含义。

‘叁’ c语言程序设计,设计一个简单的程序,能完成加减乘除运算,网上搜的答案运行都出现很多错误,解释一下程

1、简单版本的,输入两个数一个操作符:“1 + 2”类似这种,直接获取两个数以及操作符,用switch语句来分别对不同操作符进行操作。
2、复杂版本的,随意输入表达式,可以有括号以及其他运算符,“1+2*8+(6/7)^3”类似这种,有四种解决办法:
2.1、一遍一遍地扫描字符串,优先级越高的运算符越先做,每扫描一次减少一点,直到表达式只剩一个数值。
2.2、将表达式通过栈转换为逆波兰表达式,并计算逆波兰表达式。
2.3、递归求解,使用类似BNF的定义来使用递归将表达式一点一点剥离成小表达式,计算完小表达式后,将多个小表达式综合起来,即为整个表达式的值。
2.4、直接使用lex和yacc来写一个计算器,需要写的代码量很少,自动生成的代码量比较多。
主要就这几种思路,细节问题你可以自己上网查。

热点内容
linuxaes 发布:2025-02-25 16:09:36 浏览:468
linux程序服务 发布:2025-02-25 15:48:30 浏览:736
sqlvss编写器 发布:2025-02-25 15:47:43 浏览:565
安卓平台在哪里下 发布:2025-02-25 15:46:52 浏览:11
网易我的世界电脑版服务器如何改名字 发布:2025-02-25 15:33:19 浏览:791
java多线程聊天室 发布:2025-02-25 15:23:30 浏览:34
安卓怎么弄花漾字 发布:2025-02-25 15:21:01 浏览:823
编译构建 发布:2025-02-25 15:19:18 浏览:670
server存储池 发布:2025-02-25 15:19:06 浏览:638
安卓哪个品牌没广告 发布:2025-02-25 15:16:45 浏览:326