题目
使用栈计算后缀表达式“8 3 2 * + 7 -”,最终结果是()。
题目类型:原创高频练习题
用途:用于帮助理解程序员相关考点和答案解析,不等同于官方真题。
正确答案
A
依次压入8、3、2;遇*计算3×2=6并压回;遇+计算8+6=14;压入7后遇-,计算14-7=7。
选项分析
A
正确。表达式对应8+(3×2)-7。
B
错误。运算次序或中间结果处理有误。
C
错误。可能遗漏最后一次减法或算错乘法。
D
错误。没有按照后缀表达式的运算符位置执行。
本题为什么容易错
后缀表达式没有括号,看起来陌生,但它其实已经把运算顺序写死了。看到运算符就只处理栈顶最近的两个数。
先看结论
简短答案
后缀表达式8 3 2 * + 7 -的计算结果是多少,正确答案是 A(7)。依次压入8、3、2;遇*计算3×2=6并压回;遇+计算8+6=14;压入7后遇-,计算14-7=7。
解析
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 7 | 本题正确答案 | 正确。表达式对应8+(3×2)-7。 | 看到题干核心场景时优先联想到它 |
| 9 | 本题干扰项 | 错误。运算次序或中间结果处理有误。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 13 | 本题干扰项 | 错误。可能遗漏最后一次减法或算错乘法。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 21 | 本题干扰项 | 错误。没有按照后缀表达式的运算符位置执行。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 9:错误。运算次序或中间结果处理有误。
- 13:错误。可能遗漏最后一次减法或算错乘法。
- 21:错误。没有按照后缀表达式的运算符位置执行。
复习
知识点详解
后缀表达式从左向右扫描,操作数入栈;遇二元运算符时,先弹右操作数,再弹左操作数,计算后将结果压回。扫描结束时栈内应只剩最终结果。
备考速记
数字进栈,符号开算;先弹右边,后弹左边。
操作数顺序在操作数顺序场景中的作用
后缀表达式无需括号和优先级判断,适合基于栈的解释执行。若运算符元数不同,还要按一元或二元规则弹出相应数量的操作数。
拓展
同类题怎么考
- 计算给定后缀表达式的值。
- 判断表达式求值应使用哪种数据结构。
操作数顺序在程序员软考中的考法
每次只做一个局部动作,不要先把后缀表达式凭感觉改写;减法写成‘第二次弹出-第一次弹出’。
解题思路
把每次运算后的栈写出来:8,3,2→8,6→14→14,7→7。中间结果清楚,选A。
考点定位
弹栈时第一个弹出的是右操作数,第二个才是左操作数。加法乘法不易暴露顺序错误,减法除法最能检查这一点。
易错提醒
- 减法时用先弹出的数减后弹出的数。
- 计算后忘记把中间结果压回栈。
- 遇数字后立即运算,没有等到运算符。
备考提示
- 草稿上画一列栈,每读一个记号更新一次。
- 专门用含减法和除法的题检查左右操作数顺序。
你可能还想了解
- 后缀表达式怎么计算?
- 减法时弹栈顺序是什么?
- 为什么后缀表达式不需要括号?
本文小结
后缀表达式依次得到3×2=6、8+6=14、14-7=7,最终结果为7。