表达式 $\texttt{a * (b + c) * d}$ 的后缀形式是( )。
这题就是考中缀变后缀,不用记死规则,你脑子里想运算顺序:先算括号里的 b+c,结果再和 a 乘,最后再乘 d。把每一步运算符号往后挪,自然就得到答案了。
最容易栽跟头的是把最后一步看错,题目明明是两个乘号 a*(b+c)*d,很多同学会惯性思维以为最后是个减号,或者把乘号顺序搞反,算成 a*b*c+d 这种。还有个坑是括号里的 b+c 没加括号就往后挪,变成 abc+*d*,这就不对了,因为乘法优先级高,得先让 b+c 结合。
这道题考查的是表达式的中缀形式转后缀形式(也叫逆波兰式)。说白了,就是把平时我们写算式的方式,改成计算机栈式运算的方式:运算符跟在操作数后面,而且严格按照运算优先级来排。
命题人特别喜欢在括号和同级运算符上挖坑。你看这题,a * (b + c) * d,括号里有个加法,外面连着两个乘法。很多学生看到两个乘号,容易下意识觉得可以随便结合,或者把最后的乘号看成减号(毕竟前面有加减混合的题太多了)。其实这里考的就是你对运算优先级和结合性的敏感度:先算括号,再算乘法,从左到右依次结合。