C语言作业,计算三个数字间的加减乘除,三个数字两个运算符两个括号,考虑优先级

 我来答
百度网友8e773d301
2013-11-05 · TA获得超过328个赞
知道小有建树答主
回答量:76
采纳率:0%
帮助的人:104万
展开全部

所谓后缀表达式,就是将a @ b写成 a b @
其中前者是我们日常生活中的中缀表达式,后面的就是后缀表达式。
例如7*8 化为 7 8 *
例如6-9 化为 6 9 -
例如5*(3+2),化成后缀表达式就是5 3 2 + *
可知后缀表达式无括号。
然后依次扫描符号,数字就直接进栈,遇到运算符就将前两个数字出栈、运算后结果再进栈:
例如5 3 2 + *
扫描5——>5
扫描3——>5 3
扫描2——>5 3 2
扫描+——>5 5
扫描*——>25


所以你现在要解决的问题是如何将中缀表达式转化成后缀表达式。
这个依然是通过栈来实现。
从左到右扫描,遇到数字直接输出,遇到符号比较优先级进栈或输出(优先级大的进栈,小的或相等的直接输出。其中左括号优先级大于乘除大于加减),遇到左括号则进栈,遇到右括号则将栈内左括号之内的符号都输出,遇到末尾就将栈内的所有符号都输出。
例如5*(3+2)

扫描5 直接输出
扫描* 进栈(栈内:*)
扫描( 进栈(站内:* ()
扫描3 直接输出
扫描+ +的优先级小于(的优先级,进栈,(栈内:* ( +)
扫描2 直接输出
扫描) 将站内(之前的全部输出,即输出了+
扫描到末尾,将栈内所有东西全部输出,即输出了*
综上,输出了5 3 2 + *


你可以看这个链接http://zhidao.baidu.com/question/552455212079542532.html?oldq=1

也是我回答的

a1012144015
2013-11-05 · TA获得超过6415个赞
知道大有可为答主
回答量:9038
采纳率:40%
帮助的人:1353万
展开全部
那建议用栈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式