●试题二
阅读下列说明和算法,回答问题1和问题2,将解答填入答题纸的对应栏内。
【说明】
算法2-1是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如下所示:
文件提示信息
(1+2)
abc)缺少对应左括号:第2行,第4列
((def)gx)缺少对应左括号:第3行,第10列
(((h)
ij)(k
(1ml)缺少对应右括号:第5行,第4列;第4行 ,第1列
在算法2-1中,stack为一整数栈。算法中各函数的说明见表4。
【算法2-1】
将栈stack置空,置EOF 为false
ch<-nextch();
while(not EOF)
k<-kind(CH);
if(k== (1) )
push( (2) );push( (3) );
elseif(k== (4) )
if(not empty())
pop();pop();
else
显示错误信息(缺少对应左括号或右括号);
显示行号row;显示列号col;
endif
endif
ch<-nextch();
endwhile
if(not empty())
显示错误信息(缺少对应左括号或右括号);
while(not empty())
row<-pop();col<-pop();
显示行号row;显示列号co1;
endwhile
endif
为了识别更多种类的括号,对算法2-1加以改进后得到算法2-2。算法2-2能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(char ch)的参数及其对应的返回值见表5。
【算法2-2】
将栈stack置空,置EOF为false
ch<-nextch();
while(not EOF)
k<-kind(ch);
if(k>0)
if(判断条件1)
push( (5) );push( (6) );push( (7) );
elseif(判断条件2and判断条件3)
pop();pop();pop();
else
显示错误信息(缺少对应左括号或右括号);
显示行号row;显示列号col;
endif
endif
ch<-nextch();
endwhile
if(not empty())
显示错误信息(缺少对应左括号或右括号);
while(not empty())
pop();rowpop();colpop();
显示行号row;显示列号col;
endwhile
endif
【问题1】
请将【算法2-1】和【算法2-2】中 (1) ~ (7) 处补充完整。
【问题2】
请从下面的选项中选择相应的判断逻辑填补【算法2-2】中的"判断条件1"至"判断条件3"。注意,若"判断条件2"的逻辑判断结果为假,就无需对"判断条件3"进行判断。
(a)字符是括号
(b)字符是左括号
(c)字符是右括号
(d)栈空
(e)栈不空
(f)栈顶元素表示的是与当前字符匹配的左括号
(g)栈顶元素表示的是与当前字符匹配的右括号