问答题
【说明】
本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式
(A-(B*C+D)*E)/(F+G))
的后缀表示为
ABC*D+E*-FG+/
为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:
数组 IN[]存储中缀表达式;
数组 POLISH[]存储其后缀表达式;
数组 S[]是一个后进先出栈;
函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2:
表2 CHAR | PRIOR(XHAR) |
*/ + - ( ) | 4 3 2 1 |
问答题
【问题1】
填充流程图中①的判断条件。
【正确答案】PRIOR(IN[i]):PRIOR(S[p])
【答案解析】
问答题
【问题2】
写出子程序A的功能,并顺序写出实现该功能的操作
【正确答案】功能:将当前符号IN[i]入栈
操作:p+1->p
IN[i]->S[p]
【答案解析】
问答题
【问题3】
写出子程序B的功能,并顺序写出实现该功能的操作。
【正确答案】功能:出栈
操作:k+1->k
S[p]->POLISH[k]
p-1->p
【答案解析】
问答题
【问题4】
中缀表达式
(A+B-C*D)*(E-F)/G
经该流程图处理后的输出是什么?
【流程图】
【正确答案】AB+CD*-EF-*G/
【答案解析】[解析] 本题考查栈的使用和中序表达式与后缀表达式的互换。