表达式a*(b+c)-d的后缀表达式是:
这题就是考中缀转后缀,拿到题别慌,直接按顺序扫一遍字符:数字字母见一个输出一个,遇到运算符看栈顶优先级,括号特殊处理。关键是记住右括号一出,把栈里直到左括号的东西全弹出来,优先级高的先弹,低的后弹,最后收尾再弹空栈。
最容易栽跟头的就是括号处理,很多人看到右括号就忘了把左括号里面的运算符全弹出来,或者把左括号也弹了,那肯定错;还有就是优先级搞反,乘除比加减高,遇到减号时如果栈顶是乘号,得先弹乘号再压减号,不然顺序就乱了;另外最后结束得把栈里剩下的运算符全弹完,漏一步就少个符号。
这道题考查的是中缀表达式转后缀表达式(逆波兰式),属于栈的经典应用,也是信息学竞赛初赛里年年必出的考点。命题人特别喜欢在括号和优先级交界处挖坑,比如让你把左括号弹出来,或者把优先级低的运算符先弹了,这些都是送分又容易丢分的点。拿到这种题,别去背公式,就按流程走:从左到右扫描每个字符,如果是操作数(字母或数字)直接输出;如果是运算符,先看看栈顶有没有更高优先级的,有就弹,没有就压栈;遇到左括号直接压栈;遇到右括号,就把栈里直到左括号为止的所有运算符全部弹出输出,然后把左括号弹出丢弃。最后扫描完了,栈里剩的运算符全部弹出输出,就得到后缀式了。优先级口诀很简单:乘除高,加减低,括号最高。对于本题 a*(b+c)-d,你按步骤走一遍:a 输出,* 压栈,( 压栈,b 输出,+ 压栈,c 输出,) 一来就把 + 弹出输出,接着把 * 弹出输出,- 压栈,d 输出,结束把 - 弹出,结果就是 abc+*d-,对应选项 B。如果你把括号里的 + 漏弹了,就会得到 abcd*+- 这种错选项;如果把 * 弹早了,就会得到 abc*+d- 这种;最后忘了弹 -,就变成 abc+*d,都不对。这道题在题库里属于高频考点,运算符与表达式一共考过 261 题,覆盖所有级别,其中 2023 年 91 题、2025 年 61 题、2024 年 41 题,近年明显在加量,NOIP 普及组初赛里也稳定出现,2009 年就是 4 题,今年 2026 年还有 14 题,说明这个知识点不会凉,反而在普及组里越来越受重视。栈本身也考得狠,89 题里 NOIP 普及组初赛就有 7 题,基本年年都有。趋势上看,这类题目未来大概率会继续在普及组初赛里出现,而且可能会结合稍微复杂一点的表达式,比如多层括号或者混合更多运算符,但核心思路不变:按规则扫、按优先级弹、括号特殊处理。所以复习时别只背答案,要把转换流程在脑子里过几遍,遇到括号和优先级变化能下意识反应,这才是拿分的关键。