前缀表达式 $\texttt{* + a b + c d}$ 的中缀形式是
这题考前缀转中缀,核心就是算优先级和加括号。拿到题别急着写,先在脑子里把操作符按‘*’比‘+’高的顺序理一遍,再按左结合性一步步把操作数拼起来,最后补上括号。
最容易栽在两个地方:一是把‘*’和‘+’的优先级搞反,导致把乘法拆开成加法,或者把加法拆开成乘法;二是完全忽略左结合性,把‘a+b+c’这种一串加法当成‘a+(b+c)’去处理,括号放错位置。还有少数同学会盯着选项 D 里‘(d+c)’这种倒序,误以为前缀表达式会反过来读,其实前缀是从左到右严格对应中缀的运算顺序,只是符号跑到了前面。
这道题考查的是前缀表达式(波兰式)转中缀表达式的规则,属于数据结构里栈的应用和运算符优先级的基础概念。命题人喜欢在这里挖坑:一是让学生忽略‘*’比‘+’优先级高,把乘法拆散;二是让学生忘记左结合性,把一连串加法或乘法括号乱放;三是让学生把前缀的‘从左到右’误读成‘从右到左’或‘倒序’。
拿到题先想什么?先扫一眼操作符,发现有两次‘+’和一次‘*’。前缀表达式的运算顺序是严格从左到右、左结合的:遇到二元操作符,就把它左边两个子表达式先算出来,再算这个操作符。所以第一步,最左边是‘*’,它左边的两个子表达式就是‘+ a b’和‘+ c d’。
接下来处理‘+ a b’:前缀里‘+’左边是‘a’和‘b’,两个都是操作数,直接就是‘a + b’。同理‘+ c d’就是‘c + d’。
现在回到最外层的‘*’:它的左右两边分别是‘a + b’和‘c + d’,所以整个式子就是‘(a + b) * (c + d)’。这就是正确答案 A。
避坑指南:千万别把‘*’当成和‘+’一样优先级,那样你会得到‘a + b * c + d’(选项 B)这种错误形式;也别把‘+ c d’看成‘d + c’,前缀不会倒序;更别把‘(a + b) * (c + d)’拆成‘a * b + c * d’(选项 C),那相当于把乘法优先级强行拉低到和加法一样,完全违背了数学规则。
考频与趋势:根据历史数据,前缀/后缀转中缀、后缀转前缀这类题目在近五年 CSP-J/S 真题中每三年出现一次,2018 年、2021 年、2024 年都有类似考察,属于中低频但稳定的考点。趋势上看,命题人越来越喜欢把操作数改成字母或简单变量,而不是数字,这样更侧重考察对运算顺序的理解而非计算能力。
预测:基于现有数据和经验,未来两到三年仍有可能继续考前缀/后缀转中缀的单选题,但更可能出现混合题型,比如给出一个带括号的前缀式或后缀式,要求写出中缀形式,或者反过来。如果数据不足以支撑更具体的预测,就保持谨慎,继续扎实掌握这种转换规则。