c++实现四则运算的方法,是不是有一种将操作数和运算符分开存放,分开后如何计算?
答案:2 悬赏:0 手机版
解决时间 2021-03-04 11:32
- 提问者网友:骨子里的高雅
- 2021-03-04 07:08
c++实现四则运算的方法,是不是有一种将操作数和运算符分开存放,分开后如何计算?
最佳答案
- 五星知识达人网友:枭雄戏美人
- 2021-03-04 08:37
是的,用到了栈这种数据结构,不是一句话能说完的。建议你看看数据结构方面的书。
有两种实现方法:
一、中缀表达式。
设置两个栈,一个存放运算符,另一个栈存放操作数。在进行表达式求值时,编译程序从左到右扫描,每遇到一个操作数,一律进入操作数栈,每遇到一个运算符,则应与运算符栈的栈顶进行比较,若运算符优先级高于栈顶的优先级,则进栈,否则在运算栈中退栈,退栈后,在操作数栈中退出两个元素,然后用运算符栈中退出的栈顶元素进行运算,运算的结果存入操作数栈中,直到扫描完毕。(这种方法比较麻烦,必须考虑运算符的优先级,甚至还要考虑圆括号,需要两个栈)。
二、后缀表达式。
可以先把中缀表达式化为后缀表达式。再用后缀表达式求值,后缀表达式不存在括号,也不存在运算符优先级问题,计算过程完全按照运算符的先后次序进行,比中缀表达式的求值要简单得多。
3/5+8(中缀)->3 5 / 8 +(后缀)
转换规则是:设立一个堆栈,用来存放表达式中的运算符,首先设栈为空,从左到右扫描中缀表达式,每次遇到操作数,直接将其输出,并接着输出一个空格作为分隔符;若遇到一个运算符,则必须与栈顶的运算符进行优先级比较,若运算符级别比栈顶运算符的高,则进栈,否则退出栈顶元素,并直接输出,然后输出一个空格作为分隔符,若扫描时遇到左括号,则进栈,若扫描时遇到右括号,则一直退栈输出,直到退出到左括号为止。
后缀表达式求值:只需从左到右扫描一遍后缀表达式即可。设置一个栈,开始时,栈为空,然后从左到右扫描后缀表达式,若遇操作数,则进栈,若遇运算符,则从栈中退出两个元素,先退出的放到运算符的右边,后退出的放到运算符的左边,运算的结果再进栈,直到后缀表达式扫描完毕。此时栈中只有一个元素即为运算结果。
有两种实现方法:
一、中缀表达式。
设置两个栈,一个存放运算符,另一个栈存放操作数。在进行表达式求值时,编译程序从左到右扫描,每遇到一个操作数,一律进入操作数栈,每遇到一个运算符,则应与运算符栈的栈顶进行比较,若运算符优先级高于栈顶的优先级,则进栈,否则在运算栈中退栈,退栈后,在操作数栈中退出两个元素,然后用运算符栈中退出的栈顶元素进行运算,运算的结果存入操作数栈中,直到扫描完毕。(这种方法比较麻烦,必须考虑运算符的优先级,甚至还要考虑圆括号,需要两个栈)。
二、后缀表达式。
可以先把中缀表达式化为后缀表达式。再用后缀表达式求值,后缀表达式不存在括号,也不存在运算符优先级问题,计算过程完全按照运算符的先后次序进行,比中缀表达式的求值要简单得多。
3/5+8(中缀)->3 5 / 8 +(后缀)
转换规则是:设立一个堆栈,用来存放表达式中的运算符,首先设栈为空,从左到右扫描中缀表达式,每次遇到操作数,直接将其输出,并接着输出一个空格作为分隔符;若遇到一个运算符,则必须与栈顶的运算符进行优先级比较,若运算符级别比栈顶运算符的高,则进栈,否则退出栈顶元素,并直接输出,然后输出一个空格作为分隔符,若扫描时遇到左括号,则进栈,若扫描时遇到右括号,则一直退栈输出,直到退出到左括号为止。
后缀表达式求值:只需从左到右扫描一遍后缀表达式即可。设置一个栈,开始时,栈为空,然后从左到右扫描后缀表达式,若遇操作数,则进栈,若遇运算符,则从栈中退出两个元素,先退出的放到运算符的右边,后退出的放到运算符的左边,运算的结果再进栈,直到后缀表达式扫描完毕。此时栈中只有一个元素即为运算结果。
全部回答
- 1楼网友:酒安江南
- 2021-03-04 09:34
int a,b; char hao; cin>>a>>hao>>b; switch(hao) { case'+' cout<<a+b; break; case'-' cout<<a-b; break; case'*' cout<<a*b; break; case'/' cout<<a/b; break; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯