可以用栈来检查算术表达式中的括号是否匹配。分析算术表达式时,初始栈为空,从左到右扫描字符,遇到字符“(”就将其入栈,遇到“)”就执行出栈操作。对算术表达式“(a+b*(a+b))/c)+(a+b)”,检查时, (1) ;对算术表达式“((a+b/(a+b)-c/a)/b”,检查时, (2) 。这两种情况都表明所检查的算术表达式括号不匹配。
(2) ()
A.栈为空却要进行出栈操作
B.栈已满却要进行入栈操作
C.表达式处理已结束,栈中仍留下有字符“(”
D.表达式处理已结束,栈中仍留下有字符“)”
参考答案:C
解析:
栈是先进后出的线性表。 对算术表达式“(a/b*(a+b))/c)+(a+b)”进行括号检查时,操作顺序为:
①遇到第1个左括号,进行入栈操作。栈中有1个左括号。
②遇到第2个左括号,进行入栈操作。栈中有2个左括号。
③遇到第1个右括号,进行出栈操作。栈中有1个左括号。
④遇到第2个右括号,进行出栈操作。栈中没有左括号。
⑤遇到第3个右括号,进行出栈操作。但此时为空栈,无法进行出栈操作。 表达式检查结束。
第1空的正确答案为选项A。
对算术表达式“((a+b/(a+b)-c/a)几”进行括号检查时,操作顺序为:
①遇到第1个左括号,进行入栈操作。栈中有1个左括号。
②遇到第2个左括号,进行入栈操作。栈中有2个左括号。
③遇到第3个左括号,进行入栈操作。栈中有3个左括号。
④遇到第1个右括号,进行出栈操作。栈中有2个左括号。
⑤遇到第2个右括号,进行出栈操作。栈中有1个左括号。
表达式检查结束。栈中依然还有左括号,表示表达式不匹配,第2空的正确答案为选项C。