CSP-S 提高级 · CSP 2020 提高级第一轮 第 12 题

选择题 · 答案 D · 考点:栈(stack)、运算符与表达式

← 整套速查表 CSP-S 提高级 全部真题

题目

表达式 a*(b+c)-d 的后缀表达形式为( )。

答案:D

考点

栈(stack) 讲解 →栈(stack) 真题汇总 →运算符与表达式

解题思维

这题考中缀转后缀,核心就两点:操作数顺序不变,运算符按优先级从栈里‘挤’出来。拿到题先圈出运算符,按优先级从高到低处理,遇到括号就只管弹出直到左括号。

常见错误

最容易错的是把乘号提前了,像选A那样写成abc*+d-,其实乘法优先级最高,但括号里的加法要先算,所以加号得在乘号前面。还有学生会把后缀当成分数式子读,把减号当成减数放后面,忽略后缀里运算符紧跟两个操作数的规则。

详细解析(节选)

这道题考查的是中缀表达式转后缀表达式(逆波兰式),属于栈的经典应用,也是编译原理里语法分析的基础。命题人喜欢在这种纯概念单选题里挖坑,往往不是考复杂计算,而是考你对优先级和括号作用的理解是否透彻——比如容易把括号内的运算顺序搞错,或者把后缀表达式当成前缀/中缀来读。

先把中缀表达式 a*(b+c)-d 拆解:操作数是 a、b、c、d,运算符是 *、+、-。后缀表达式的特点是操作数顺序不变,运算符紧跟它需要的那两个操作数。转换时我们用一个栈来暂存运算符,规则很简单:遇到操作数直接输出;遇到左括号入栈;遇到右括号就把栈里运算符全弹出来直到遇到左括号(左括号只起标记作用,不输出);遇到普通运算符,就把栈顶所有优先级不低于它的运算符先弹出来,再把当前运算符压栈。

优先级记住口诀:乘除 > 加减。括号里的内容要优先算,所以遇到左括号直接入栈,直到右括号才把里面所有运算符吐出来。现在一步步走: 1) a 输出 → a; 2) * 栈空直接压栈 → [*]; 3) ( 压栈 → [*, (]; 4) b 输出 → ab; 5) + 栈顶是 (,直接压栈 → [*, (, +]; 6) c 输出 → abc; 7) ) 触发弹出,把 + 弹出,左括号丢弃 → abc+,栈剩 [*]; 8) - 此时栈顶 * 优先级高于 -,先把 * 弹出 → abc+*,再压 - → [ - ]; 9) d 输出 → abc+*d; 10) 结束,把栈里剩下的 - 弹出 → abc+*d-。

得到后缀表达式 abc+*d-,对应选项 D。验证一下:abc+*d- 读作先算 b+c,再和 a 相乘,最后减去 d,完全符合原式。

常见陷阱:选项 A abc*+d- 错在把乘号提前,忽略了括号内加法优先;选项 B 是前缀式;选项 C 顺序混乱。后缀表达式里操作数顺序永远和中缀一致,这是硬规则,不能变。技巧上,可以把表达式想象成一棵二叉树,后缀其实就是后序遍历,这样记忆更直观。

从考频看,‘运算符与表达式’在题库里共考过 261 题,覆盖 9 个级别,2023 年突然飙到 91 题,2024、2025 年分别 41、61 题,说明这类基础概念题近年热度很高,命题人倾向于用短小精悍的单选题考查基本功。‘栈’单独考过 89 题,2024 年也达到 25 题的高点,两者常一起出现。未来可能继续以这种‘给一个简单中缀,选后缀’的形式高频出现,也可能结合代码实现或更复杂的括号嵌套来考,但目前数据不足以精确预测变体。总之,这类题重在理解规则而非复杂计算,只要把优先级和括号作用吃透,几乎不会出错。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断