BCSP-X · 2024 BCSP-X 上半年活动基础知识测评(初中组) 第 13 题

选择题 · 答案 C

← 整套速查表 BCSP-X 全部真题

题目

对于表达式 a+b*(c+d)*e 的后缀形式是( )

答案:C

解题思维

这题考中缀转后缀(逆波兰式)。别急着写代码,先在脑子里把运算优先级理清楚:先算括号里的,再乘除,最后加减。按这个顺序把操作数一个个挪到后面,运算符紧跟它对应的两个操作数放前,就能直接写出答案。

常见错误

最容易栽跟头的就是分不清中缀和后缀的区别,或者在转换过程中把运算符和它的操作数顺序搞反了。比如看到 a+b*(c+d)*e,有人会先把乘号写在前面,或者把括号里的 d 和 c 顺序弄反,导致整个式子完全不对。还有的同学会忽略运算顺序,从左到右机械地转换,结果把乘法提前了。记住,后缀式里运算符永远在它操作数的后面,而且必须按照中缀原本的优先级来排。

详细解析(节选)

这道题考查的是中缀表达式转后缀表达式(逆波兰式)的基础能力,属于计算机基础里必会的概念。命题人喜欢用带括号的混合运算来挖坑,因为括号改变了默认优先级,如果学生只背了“左括号进栈,右括号出栈”的口诀,却不懂操作数顺序,很容易选错。拿到这种题,先别动笔,心里过一遍:a+b*(c+d)*e 里,最里面是 c+d,算完这个和,再乘以 e,最后加上 a。所以后缀式里,c 和 d 要先出现,然后 + 号紧跟它们;接着 e 出现,乘号紧跟 cd+ 和 e;最后 a 和 b 出现,加号紧跟它们和前面的结果。

具体推导:扫描到 a,直接输出 a;扫描到 +,栈空,输出 +;扫描到 b,输出 b;扫描到 (,压栈;扫描到 c,输出 c;扫描到 d,输出 d;扫描到 ),弹出栈顶 +,输出 +;扫描到 *,压栈;扫描到 e,输出 e;扫描到 *,弹出栈顶 +(因为优先级相同但先来的先处理),输出 +,再压栈新的 *;扫描到 ),弹出栈顶 *,输出 *;扫描到 +,弹出栈顶 *,输出 *,再压栈新的 +;扫描到 e,输出 e;扫描到 ),弹出栈顶 +,输出 +。最终得到 abcd+*e*+。对照选项,只有 C 符合。

避坑点:很多学生会把括号里的 c+d 写成 dc+,或者把乘号的位置放错,比如写成 abcd+e*+*,这其实是把最后一个乘号提前了,逻辑上完全不对。还有的同学会忽略最外层的加号,直接输出 abcd+*e*,少了一个 +,这也是常见错误。记住,后缀式里每个运算符都必须紧跟它对应的两个操作数,不能乱序。

从考频看,中缀转后缀在 CSP-J/S 和 GESP 中属于高频考点,近五年每年至少出现一次,通常作为第 10-13 题左右的单选题,难度适中,主要考察对优先级和括号的理解。未来大概率会继续以这种带括号的混合运算形式出题,可能会稍微增加一层括号或者把乘除混合得更复杂,但核心思路不变:先括号内,再乘除,最后加减,运算符紧跟操作数。暂无足够依据预测具体年份或题型变化,但掌握这个转换规则是应对这类题的万能钥匙。

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