问答题


阅读以下算法说明和C程序,根据要求回答问题1和问题2。
【说明】
【算法4-1】的功能是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者右括号,则给出相应的提示信息,如图1-18所示。


在【算法4-1】中,slack为一整数栈。算法中各函数的说明如表1-11所示。
表1-11 各函数的功能说明表
函 数 名 函数功能
push(int i) 将整数i压入栈stack中
Pop() stack的栈顶元素出栈
Empty() 判断stack栈是否为空。若为空,函数返回1,否则函数返回0
Nextch() 读取文本文件中的下一个字符,并返回该字符的ASCII值,将字符所在的行号及字符在行中的位置分别存储到变量row和col中,若遇到文件结束符,则将变量EOF置为true
Kind(charch) 判断字符ch是左括号还是右括号,若是左括号,函数返回1:若是右括号,函数返回2;若两者都不是,函数返回0

【算法4-1】
将栈stack置空,置EOF为false
Ch<-nextch();
while(not EOF)
  k←kind(ch);
  if (k == (1) ) {
    push( (2) );
    push( (3) );}
  else if( k == (4) )
    if(not empty()){
      pop();
      pop();)
    else{
  显示错误信息(缺少对应左括号或右括号):
  显示行号row:显示列号col:)
    End if
  End if
  Ch<-nextch();
end while
if(not empty())
  显示错误信息(缺少对应左括号或右括号):
  While(not empty()){
  row<-pop();
  col<-pop():
  显示行号row:显示列号col;)
  End while
End if
  为了识别更多种类的括号,对【算法4-1】加以改进后得到【算法4-2】。【算法4-2】能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(charch)的参数及其对应的返回值如表1-12所示。
                                    表1-12 函数kind(charch)的参数及其对应的返回值
ch ( ) { } [ ] 其他
返回值 1 2 3 4 5 6 7
【算法4-2】
将栈stack置空,置EOF为false
Ch<-nextch();
while(not EOF){
k<- kind(ch);
if(k > 0)
if(判断条件1){
push( (5) );
push( (6) );
push( (7) );}
else if(判断条件2 and判断条件3){
pop();
pop();
pop();}
else {
显示错误信息(缺少对应左括号或右括号);
显示行号row;显示列号col;)
end if
end if
ch <- nextch();)
end while
if(not empty()){
显示错误信息(缺少对应左括号或右括号);
While(not empty()){
Pop();
row <- pop():
col <- pop();
显示行号row;显示列号col;))
end while
end if 【问题2】 请从以下选项中选择相应的判断逻辑填写【算法4-2】中的“判断条件1”至“判断条件3”。注意,如“判断条件2”的逻辑判断结果为假,则无须对“判断条件3”进行判断。 判断条件1: (8) 判断条件2: (9) 判断条件3: (10) 【供选择的答案】
A.栈顶元素表示的是与当前字符匹配的左括号
B.栈顶元素表示的是与当前字符匹配的右括号
C.字符是左括号
D.字符是右括号
E.栈不空F.栈空G.字符是括号

【参考答案】

(8)C或字符是左括号 (9)E或栈不空 (10)A或栈顶元素的是与当前字符匹配的左括号试题4[要点解析] 这是一道......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)