当前位置:首页 » 编程语言 » 逆波兰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来写一个计算器,需要写的代码量很少,自动生成的代码量比较多。
主要就这几种思路,细节问题你可以自己上网查。

热点内容
怎么查身份证密码 发布:2025-04-22 23:12:07 浏览:206
如何用服务器跑github项目 发布:2025-04-22 23:10:55 浏览:947
ccs编译dsp程序的指令 发布:2025-04-22 23:06:42 浏览:368
映射盘符脚本 发布:2025-04-22 22:55:35 浏览:259
王者荣耀安卓系统怎么转换到苹果 发布:2025-04-22 22:53:29 浏览:986
emobile7服务器地址如何查看 发布:2025-04-22 22:32:51 浏览:763
房间的秘密码是什么 发布:2025-04-22 22:32:43 浏览:121
文件夹前面多了选择框 发布:2025-04-22 22:32:40 浏览:704
迅雷网ftp 发布:2025-04-22 22:30:02 浏览:622
鼠标驱动源码 发布:2025-04-22 22:29:55 浏览:768