【正文】
表達式中可包含三種括號:圓括號“(”和“)”;方括號“[”和“]”以及花括號“{”和“}”,且這三種括號可按任意的次序嵌套使用,試利用棧的運算,判別給定的表達式中所含括號是否正確配對出現(xiàn)。分析:如果括號只有一種,比如說是“(”和“)”,則判斷是否正確匹配可以這樣進行:用一個計數(shù)器T來記錄左括號與右括號比較的情況,初始時T=0,表達式從左向右掃描,如果遇到左括號則T←T+1,遇到右括號則T←T1,中間如果出現(xiàn)T0的情況,說明右括號的個數(shù)大于左括號的個數(shù),匹配出錯;掃描結束時,如果T0,說明左右括號的個數(shù)不相等,匹配出錯。但本題的括號有三種,這里用??梢暂^好地解決,方法如下: (1)將“(”,“[”,“{”定為左括號,“)”,“]”,“}”定為右括號,建一個棧來存放左括號,初始時,棧為空; (2)從左向右掃描表達式,如果是左括號,則將其壓入棧中;如果是右括號則(a)棧頂是與該右括號匹配的左括號,則將它們消去,重復(2)(b)棧頂?shù)淖罄ㄌ柵c該右括號不匹配,則匹配錯誤; (3)掃描結束時,若棧非空,則匹配錯誤。計算四個數(shù):由鍵盤輸入正整數(shù)A,B,C,D(1=A,B,C,D=10);然后按如下形式排列:A□B□C□D=24;在四個數(shù)字之間的□處填上加,減,乘,除四種運算之一(不含括號),輸出所有滿足條件的計算式子。若不能滿足條件,則打印“NORESULT!“。分析:A,B,C,D四個數(shù)的位置已經(jīng)固定,因此只需將+,,*,/四種運算符依次放入三個□中,窮舉所有可能的情況,再計算表達式的值即可。第四節(jié) 數(shù)組數(shù)組是大家非常熟悉的,我們可以把它看成是一個長度固定的線性表。本節(jié)在研究數(shù)組的一些處理方法的同時,還將介紹一些特殊的數(shù)組的存儲和處理。例一、矩陣填數(shù):給出N*N的矩陣,要求用程序填入下列形式的數(shù): 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1解:Pascal程序:Program lt7_4_1;uses crt;const max=10;var a:array[1..max,1..max] of integer; n:integer;procedure work1; var i,j:integer; begin for i:=n downto 1 do for j:=n downto 1 do a[i,j]:=(ni)*n+(nj+1); end;procedure print; var i,j:integer; begin writeln; for i:=1 to n do begin for j:=1 to n do write(a[i,j]:5); writeln; end; end;begin clrscr; write(39。N=39。);readln(n); work; print;end.例二、在一個矩陣(N*N)中,若上三角中的元素全部為零,如下圖所示:為了節(jié)省空間,可用一個一維數(shù)組來表示這個矩陣。如右圖 1 0 0可表示成為:(1 2 3 3 0 4),在此種方法下,編程完成兩個 2 3 0矩陣的加法。 3 0 4Program lt7_4_2;uses crt;const max=1000;var a,b,c:array[1..max] of integer; n:integer;procedure read_data; var i:integer; begin write(39。N=39。);readln(n); write(39。A:39。); for i:=1 to n*(n+1) div 2 do read(a[i]); write(39。B:39。); for i:=1 to n*(n+1) div 2 do read(b[i]); end;procedure add; var i:integer; begin for i:=1 to n*(n+1) div 2 do c[i]:=a[i]+b[i]; end;procedure print; var i,j,t:integer; begin t:=1; for i:=1 to n do begin for j:=1 to n do if ji then write(39。039。:5) else begin write(c[t]:5);inc(t);end; writeln; end; end;begin clrscr; read_data; add;print; writeln(39。Press any key to exit...39。); repeat until keypressed;end.分析:本題應弄清楚下三角形矩陣中壓縮存儲及矩陣的加法運算法則。練習四數(shù)組的鞍點:己知數(shù)組X(M,N)中的所有元素為互不相等的整數(shù),編一個程序,先從每一行元素中找出最小的數(shù),然后再從這些最小的數(shù)中找出最大的數(shù)。打印出這最大的數(shù)和它在數(shù)組中的下標。稀疏矩陣:所謂的稀疏矩陣是指矩陣中的非0元素很少的一種矩陣,對于這種矩陣,可以用一個三元組表來存儲非0元素,從而達到壓縮存儲,節(jié)省空間的目的。具體方法如下:假設v是稀疏矩陣A中第i行第j列的一個非0元素,那么該非0元素可以用一個三元組(i,j,v)表示;請編一個程序,從文件中讀入一個用三元組表表示的稀疏矩陣,然后輸出該稀疏矩陣的轉置矩陣。(文件第一行為:M,N,K,分別表示稀疏矩陣的行和列以及非0元素的個數(shù),以下K+1行是K個三元組)蛇形填數(shù):給一個N*N矩陣按下列方式填數(shù)。 1 3 4 10 11 2 5 9 12 19 6 8 13 18 20 7 14 17 21 2415 16 22 23 25