表达式 $\texttt{a * (b + c) * d}$ 的后缀形式是( )。
这题考中缀转后缀(逆波兰式)。核心就一条:操作数照抄,运算符紧跟其操作数,括号里的先转,同级运算从左到右。拿到 a*(b+c)*d,先盯着括号 b+c 转成 bc+,再依次把乘号放后面,就能锁定答案。
学生最容易犯的错是:1. 把括号里的式子当成整体直接跟乘号,写成 a(bc+)* 这种半中缀半后缀的怪混;2. 忽略同级运算的从左到右顺序,把第二个乘号提前,变成 a b c + d * *,算出来是 a×(b+c)×d 没错但表达式顺序错了;3. 看到选项里有 * 就慌,以为运算符只能跟在操作数后面,结果把 * 塞到 a 前面(选项 C);4. 完全没看括号,凭感觉把 + 放最后(选项 A)。记住:后缀表达式里,每个运算符必须紧挨着它对应的两个操作数,不能隔着其他东西。
这道题考查的是中缀表达式转后缀表达式(逆波兰式)的规则。后缀表达式的核心特点:操作数直接输出,运算符放在它对应的两个操作数之后。好处是计算机从左到右扫一遍就能算,根本不需要括号。
原式:a * (b + c) * d
Step 1:先搞定括号里的 b + c。
Step 2:把 a 乘上括号的结果。
Step 3:再乘 d。
最终后缀式:**a b c + * d ***,对应选项 B。