●試題二
閱讀下列說明和算法,回答問題1和問題2,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
算法2-1是用來檢查文本文件中的圓括號是否匹配。若文件中存在圓括號沒有對應(yīng)的左括號或者右括號,則給出相應(yīng)的提示信息,如下所示:
文件提示信息
(1+2)
abc)缺少對應(yīng)左括號:第2行,第4列
((def)gx)缺少對應(yīng)左括號:第3行,第10列
(((h)
ij)(k
(1ml)缺少對應(yīng)右括號:第5行,第4列;第4行 ,第1列
在算法2-1中,stack為一整數(shù)棧。算法中各函數(shù)的說明見表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
顯示錯誤信息(缺少對應(yīng)左括號或右括號);
顯示行號row;顯示列號col;
endif
endif
ch<-nextch();
endwhile
if(not empty())
顯示錯誤信息(缺少對應(yīng)左括號或右括號);
while(not empty())
row<-pop();col<-pop();
顯示行號row;顯示列號co1;
endwhile
endif
為了識別更多種類的括號,對算法2-1加以改進后得到算法2-2。算法2-2能夠識別圓括號、方括號和花括號(不同類型的括號不能互相匹配)。改進后,函數(shù)kind(char ch)的參數(shù)及其對應(yīng)的返回值見表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
顯示錯誤信息(缺少對應(yīng)左括號或右括號);
顯示行號row;顯示列號col;
endif
endif
ch<-nextch();
endwhile
if(not empty())
顯示錯誤信息(缺少對應(yīng)左括號或右括號);
while(not empty())
pop();rowpop();colpop();
顯示行號row;顯示列號col;
endwhile
endif
【問題1】
請將【算法2-1】和【算法2-2】中 (1) ~ (7) 處補充完整。
【問題2】
請從下面的選項中選擇相應(yīng)的判斷邏輯填補【算法2-2】中的"判斷條件1"至"判斷條件3"。注意,若"判斷條件2"的邏輯判斷結(jié)果為假,就無需對"判斷條件3"進行判斷。
(a)字符是括號
(b)字符是左括號
(c)字符是右括號
(d)???BR> (e)棧不空
(f)棧頂元素表示的是與當前字符匹配的左括號
(g)棧頂元素表示的是與當前字符匹配的右括號