




已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
,為什么要使用數(shù)組,下面我們引進(jìn)一種新的數(shù)據(jù)類型數(shù)組,應(yīng)用數(shù)組類型解決上述問題,程序就會(huì)變得十分簡單。 應(yīng)用數(shù)組的程序段如下: tot:=0;tot表示總分 for i:=1 to 50 do begin循環(huán)讀入每一個(gè)學(xué)生的成績,并累加它到總分 read(ai); tot:=tot+ai; end; ave:=tot/50;計(jì)算平均分 for i:=1 to 50 do if aiave then writeln(i, ,ai); 如果第i個(gè)同學(xué)成績小于平均分,則輸出,數(shù)組類型定義: type 類型標(biāo)識(shí)符=array下標(biāo)類型1,下標(biāo)類型2, of 元素類型; 其中下標(biāo)類型必須是有序的(整型、字符型、布爾型、枚舉型、子界型等) 逗號(hào)隔開的下標(biāo)類型個(gè)數(shù)表示數(shù)組的維數(shù)。 一維數(shù)組在編程中多用于描述線性關(guān)系,如一組數(shù),一組成績等。 二維數(shù)組在編程中多用于描述二維關(guān)系,如地圖,棋盤、迷宮等。,數(shù)組由具有固定數(shù)目的相同類型的元素按一定的順序排列而成。,一維數(shù)組的定義,格式: type 類型標(biāo)識(shí)符=array下標(biāo)類型 of 元素類型; var 數(shù)組名:類型標(biāo)識(shí)符; 如: type data=array150 of integer; var a,b:data; 注意: 數(shù)組類型和數(shù)組變量是兩個(gè)不同的概念,不能混淆。就數(shù)組而言,程序的執(zhí)行部分使用的不是數(shù)組類型而是數(shù)組變量。如上定義,在程序中data不能在執(zhí)行部分中出現(xiàn)。 也可以將數(shù)組類型定義和變量定義合并在一起: var 數(shù)組名: array下標(biāo)類型 of 元素類型; 如: var a,b:array150 of integer;,在說明部分定義了一個(gè)數(shù)組變量之后,pascal 編譯程序就為所定義的數(shù)組在內(nèi)存空間開辟一串地址連續(xù)的存儲(chǔ)單元。數(shù)組中的各個(gè)元素就共用一個(gè)數(shù)組名( 即該數(shù)組變量名),它們之間是通過下標(biāo)不同以示區(qū)別的。對數(shù)組的操作歸根到底就是對數(shù)組元素的操作。,說明:score數(shù)組共有50個(gè)元素,在內(nèi)存中,這50個(gè)數(shù)組元素共占用50個(gè)連續(xù)的存儲(chǔ)單元,每個(gè)存儲(chǔ)單元中只能存儲(chǔ)一個(gè)整數(shù),占用2個(gè)字節(jié)的存儲(chǔ)空間,因此整個(gè)數(shù)組共占用100個(gè)字節(jié)的存儲(chǔ)空間。第一個(gè)元素對應(yīng)的存儲(chǔ)單元的起始地址稱為數(shù)組首地址。若設(shè)這個(gè)首地址為loc(score1),則數(shù)組中元素i的內(nèi)存地址loc(scorei)可按下式計(jì)算: loc(scorei)= loc(score1)+(i-1)*2 例如:loc(score10)= loc(score1)+18,首地址,score1 score2 score3 score50,數(shù)組名代表的并不是一個(gè)變量,而是一批變量,因而,不能直接整個(gè)數(shù)組讀入,而是要逐個(gè)數(shù)組元素讀入,通常用循環(huán)結(jié)構(gòu)來完成這一功能。 for i:=1 to 10 do read(ai); 從鍵盤讀入數(shù)組元素的值;最常用的方法 for i:=1 to 10 do ai:=i; 數(shù)組元素a1到a10的值分別為1到10;數(shù)據(jù)賦初值 for i:=1 to 10 do ai:=0; 數(shù)組元素清0;最常用的數(shù)據(jù)初始化的方法 for i:=1 to 10 do ai:=random(100); 隨機(jī)產(chǎn)生10個(gè)100以內(nèi)的數(shù),賦給各數(shù)組元素,數(shù)組元素的輸入,和數(shù)組元素的輸入相同,數(shù)組元素的輸出也不能由一個(gè)write語句直接完成。同樣要逐個(gè)數(shù)組元素輸出。通常也用循環(huán)結(jié)構(gòu)來完成這一功能: for i:=1 to 10 do write(ai, ); 數(shù)組元素之間用空格分隔 writeln;,數(shù)組元素的輸出,var a:array 110 of integer; i,s:integer; begin for i:=1 to 10 do read(ai); for i:=10 downto 1 do write(ai, ); writeln; s:=0; for i:=1 to 10 do s:=s+ai; writeln(s=,s); end.,從鍵盤輸入10個(gè)數(shù),將這10個(gè)數(shù)逆序輸出,并求這10個(gè)數(shù)的和,輸出這個(gè)和。,1、讀入一個(gè)含有n個(gè)元素的整型數(shù)組,請找出其中值最大的一個(gè)數(shù)組元素,并指出它的下標(biāo)。,分析:設(shè)置二個(gè)變量max和k,先將第一個(gè)元素的值存入max,并將其下標(biāo)存入k,然后從第二個(gè)元素開始逐個(gè)與max比較,如果max的值比當(dāng)前元素的值小,則把max的值變成當(dāng)前元素的值,并記錄其下標(biāo)于k中。這樣當(dāng)所有元素都與max比較完后,max中的值即是所有元素中的最大值,k中的值便是其下標(biāo)。,var i,k,n,max:integer; a:array 1100 of integer; begin readln(n); for i:=1 to n do read(ai); readln; max:=a1;( ); for i:=( )do if( )then begin ( ); k:=i; end; writeln(max=a , k , =,max); end.,k:=1,2 to n,maxai,max:=ai,2、將數(shù)組a中的各元素按顛倒的次序重放后再輸出。 (約定:在操作時(shí),只能借助于一個(gè)臨時(shí)存儲(chǔ)單元而不得另外開辟數(shù)組),分析:假設(shè)數(shù)組a有n個(gè)整型元素,則a1的值最終要存放在an中,反之a(chǎn)n的值最終要存放在a1中,通過交換二者的賦值可實(shí)現(xiàn)這一目的。類似地,a2應(yīng)與an-1交換,a3應(yīng)與an-2交換,,直到每對要交換的元素對的值都交換過為止。 程序中使用變量i和j存放當(dāng)前要交換賦值的兩個(gè)數(shù)組元素的下標(biāo),開始時(shí),i=1,j=n,每交換賦值一次,則i增加1,同時(shí)j減少1,當(dāng)ij時(shí),交換結(jié)束。,var i,j,n,temp:integer; a:array 1100 of integer; begin readln(n); for i:=1 to n do read(ai); i:=1; j:=n; while ( )do begin temp:=ai; ai:=aj;( ); ( ); ( ) end; for i:=1 to n do write(ai, ); end.,ij,aj:=temp,i:=i+1,j:=j-1,3、讀入一個(gè)十進(jìn)制自然數(shù),要求將其轉(zhuǎn)換成二進(jìn)制數(shù)后輸出。,分析:將十進(jìn)數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),一般采用除二取余法。如果用一個(gè)數(shù)組b來存放二進(jìn)制數(shù),可以依次把所得的余數(shù)存入b0、b1、bn,最后按bn、bn-1、b1、b0的順序輸出這些余數(shù),就得到了所求的二進(jìn)制數(shù)。,例如:,余數(shù):,0,輸出結(jié)果為:11001,0,1,0,1,1,var i,j,n:longint; b:array 031 of 01; begin readln(n); write(n,=(); i:=0; while( )do begin ( ); i:=i+1; 指定下一個(gè)余數(shù)的存放位置 n:=n div 2 產(chǎn)生的商將作為新的被除數(shù) end; for j:=( )do write(bj); writeln()2) end.,n0,bi:=n mod 2,i-1 downto 0,4、輸入一串字符,字符個(gè)數(shù)不超過100,且以“.”結(jié)束,請判斷它們是否構(gòu)成回文。若是回文,則輸出Yes,否則輸出No。,分析:所謂回文指從左到右和從右到左讀一串字符的值是一樣的,如12321,ABCBA,AA等。先讀入要判斷的一串字符(存入數(shù)組letter中),并統(tǒng)計(jì)這串字符的長度,然后首尾字符比較,若相等則取下一對字符再比較,就可以判斷出是否為回文。,var letter:array1100of char; i,j:0100; ch:char; begin read(ch); ( ); while ch. do begin i:=i+1; ( ); read(ch) end;,( ); while (ji)and( )do begin i:=i-1; j:=j+1; end; if ( )then writeln(Yes) else writeln(No); end.,i:=0,letteri:=ch,j:=1,(letterj=letteri),j=i,5、輸入一個(gè)以.結(jié)束的字符串,統(tǒng)計(jì)并輸出其中各小寫字母出現(xiàn)的次數(shù)。,分析:引入一個(gè)下標(biāo)類型為字符子界的數(shù)組num,用于存放字符串中各小寫字母出現(xiàn)的次數(shù)。例如用numa記錄字母a出現(xiàn)的次數(shù)。開始時(shí)應(yīng)將num的每個(gè)元素置成0,當(dāng)讀入一個(gè)ch后,若ch是小寫字母,則讓numch加1。,var num:arrayaz of integer; ch:char; begin for ch:=a to z do( ); read(ch); while ch . do begin if ( )then numch:=numch+1; ( ); end; for ch:=( )do if numch 0 then writeln(ch, ,numch); end.,numch:=0,(ch=a) and (ch=z),a to z,read(ch),6、某賓館有一百個(gè)房間,從 1100編了號(hào)。第一個(gè)服務(wù)員把所有的房間門都打開了,第二個(gè)服務(wù)員把所有編號(hào)是2的倍數(shù)的房間作”相反處理”,第三個(gè)服務(wù)員把所有編號(hào)是3的倍數(shù)的房間再作”相反處理”,以后每個(gè)服務(wù)員都是如此。當(dāng)?shù)?00個(gè)服務(wù)員來過后,問有哪幾扇門是打開的。(所謂的“相反處理”指:原來開著的門關(guān)上,原來關(guān)著的門打開。),分析:可設(shè)置一個(gè)表示門是開的還是關(guān)的標(biāo)志數(shù)組,另外由于有固定的循環(huán)次數(shù),可用for循環(huán)。,const n=100; var a:array1.n of( ); i,j:integer; begin for i:=1 to n do ai:=true; for i:=2 to n do for j:=( )do if( )then aj:=not(aj); for i:=1 to n do if( )then write(i:5); end.,boolean,i to n,j mod i=0,ai=true,7、用篩法求100以內(nèi)的素?cái)?shù)。如:20以內(nèi)的素?cái)?shù)為2、3、5、7、11、13、17、19。,分析:素?cái)?shù)是除了1和它本身以外沒有其它約數(shù)的數(shù)。用篩法求素?cái)?shù)的方法是:用質(zhì)數(shù)篩去合數(shù)。從第一個(gè)素?cái)?shù)2開始,把它的倍數(shù)去掉(置為0)。這樣2以后的第一個(gè)非0數(shù)就一定也是素?cái)?shù),把它的倍數(shù)也刪了,重復(fù)這個(gè)刪數(shù)過程,直到在所找到的素?cái)?shù)之后再也找不到一個(gè)非0數(shù)為止。最后把所有非0數(shù)輸出。,var a:array 1100 of integer; i,j,k:integer; begin for i:=1 to 100 do ai:=i; a1:=0; i:=2; 1不是素?cái)?shù) while i=100 do begin k:=i; while k=100 do begin k:=k+i; ( ); end; ( ); while ai=0 do( ); 查找接下來的第一個(gè)非0數(shù) end; for i:=1 to 100 do if ( )then write(ai, ); end.,ak:=0,i:=i+1,i:=i+1,ai0,8、有一個(gè)有N個(gè)不同整數(shù)的數(shù)列:例如N=4時(shí),有4個(gè)不同整數(shù)的數(shù)列為17,4,16,5。數(shù)列中的第1個(gè)數(shù)17,比它后面的三個(gè)數(shù)都大,則稱數(shù)17的逆數(shù)為3;數(shù)列中的第2個(gè)數(shù)4,比它后面的數(shù)都小,則稱數(shù)4的逆數(shù)為0;同時(shí)記數(shù)列中全部逆數(shù)的和稱為數(shù)列的逆數(shù)。如數(shù)列17,4,16,5的逆數(shù)為:3+0+1+0=4 程序要求:當(dāng)給出N個(gè)不同整數(shù)的數(shù)列后,求出此數(shù)列的逆數(shù)。,分析: 為求得上面問題的解,設(shè)置數(shù)組a:array1n of integer和逆數(shù)計(jì)數(shù)器s,然后用一個(gè)二重循環(huán)求出數(shù)列的逆數(shù)。,const n=10; var i,j,s:integer; a:array1nof integer; begin s:=0; for i:=1 to n do read(ai); for i:=1 to( )do for j:=( )do if aiaj then( ); writeln(s=,s) end.,n-1,i+1 to n,s:=s+1,9、輸入n個(gè)整數(shù)a1、a2、ak、ak+1、an,對其進(jìn)行平移處理后,按ak+1、ak+2、an、a1、a2、ak的順序輸出,其中k是小于n的常數(shù)。,解題思路:將n個(gè)整數(shù)輸入到整型數(shù)組a中,重復(fù)k次下列步驟,完成平移操作; 將a1中的值保存到臨時(shí)單元t中; 將a2-an中的值順序左移一個(gè)位置; 將臨時(shí)單元t中的值存到an中. 步驟是個(gè)循環(huán)過程,操作時(shí)要先把a(bǔ)2中的值移到a1中,然后把a(bǔ)3中的值移到a2中,最后把a(bǔ)n中的值移到an-1中,不可倒過來,否則會(huì)把a(bǔ)1- an中的內(nèi)容都變成an中的值。,const n=8; k=4; var a:array1n of integer; i,j,t:integer; begin for i:=1 to n do read(ai); for i:=( )do begin t:=a1; for j:=2 to n do( ); ( ) end; for j:=1 to n do write(aj, ); end.,1 to k,aj-1:=aj,an:=t,10、已知一個(gè)數(shù)組中的元素按非遞減有序排列。下列程序的功能是刪除數(shù)組中多余的值相同的元素,請完善程序。,var i,j,n:integer; a:array1100of integer; begin read(n); for i:=1 to n do read(ai); ( ); while i=n-1 do if( )then i:=i+1,else begin for j:=( )do aj-1:=aj; ( ); end; for i:=1 to n do write(ai:2); end.,i:=1,aiai+1,i+2 to n,n:=n-1,11、約瑟夫問題:設(shè)有n個(gè)人編號(hào)分別為1n,圍坐在一個(gè)圓桌周圍?,F(xiàn)從第一個(gè)人開始報(bào)數(shù),數(shù)到第m個(gè)人出列,然后從出列的下一個(gè)人重新開始報(bào)數(shù),數(shù)到第m個(gè)人又出列,如此重復(fù),直到所有人都出列為止。輸入n和m,求出出列的順序表。例如當(dāng)n8,m5時(shí),出列的順序表是:5 2 8 7 1 4 6 3。,var a:array110 of boolean; i,j,s,n,m:integer; begin readln(n,m); for i:=1 to n do ai:=true; i:=0; j:=0; s:=0; repeat i:=i+1; if in then( ); if ai then begin ( ); if s=m then begin ( ); write(i:4); ( ); j:=j+1; end; end; until( ); end.,i:=1,s:=s+1,ai:=false,s:=0,j=n,提示:程序中i表示人的編號(hào),j表示已出列的人數(shù),s表示當(dāng)前所報(bào)的數(shù)字,布爾數(shù)組ai用來標(biāo)記第i個(gè)人有沒有出列。,12、給定一串整數(shù)數(shù)列,求出所有的遞增和遞減子序列的數(shù)目。如數(shù)列7、2、6、9、8、3、5、2、1可分為(7,2),(2,6,9),(9,8,3),(3,5),(5,2,1)共5個(gè)子序列,答案就是5。我們稱2,9,3,5為轉(zhuǎn)折元素。,提示:本題的關(guān)鍵在于轉(zhuǎn)折元素的判定。程序中用數(shù)組ai來存放一串整數(shù)數(shù)列,當(dāng)(ai-ai-1)*(ai+1-ai)0時(shí),我們可以認(rèn)為出現(xiàn)了一個(gè)轉(zhuǎn)折元素。程序中用dz和dj兩個(gè)計(jì)數(shù)器來分別統(tǒng)計(jì)遞增數(shù)列和遞減數(shù)列的個(gè)數(shù)。最后輸出dz+dj的值。,const n=9; var a:array1nof integer; i,dz,dj:integer; begin for i:=1 to n do read(ai); dz:=0; dj:=0; if( ) then dz:=1 else dj:=1; for i:=2 to n-1 do begin if( )then begin if ai+1ai then( ); end; end; writeln(total=,dz+dj); end.,a2a1,(ai-ai-1)*(ai+1-ai)0,dj:=dj+1,dz:=dz+1,13、精確計(jì)算n的階乘n?。?n大于小于50) 解題思路:因?yàn)?9!已超出longint類型的表示范圍,所以不能用longint類型來表示n!(也不能用實(shí)數(shù)類型,因?yàn)閷?shí)數(shù)運(yùn)算有誤差)。 可以用一個(gè)一維數(shù)組來表示這個(gè)大數(shù),數(shù)組中每個(gè)元素只存放一個(gè)數(shù)字。因?yàn)?0!小于10的100次方,所以數(shù)組下標(biāo)類型用子界1100。下圖所示的是大數(shù)3628800在數(shù)組中的存儲(chǔ)方法。,0,0,8,8,2,6,3,1 2 99 100,const max=100; 數(shù)組最大下標(biāo) n=20; 計(jì)算20! var a:array1max of 09; 存放大數(shù) i,j,k,x:integer; begin k:=max; ak:=1; 初值為1 for i:=2 to n do 每次將保存在ak-amax中的大數(shù)乘上一個(gè)i begin x:=0; 來自低位的進(jìn)位 for j:=max downto k do,begin x:=x+aj*i; aj:=( ); x:=( ); end; while x0 do 處理最后一位進(jìn)位 begin ( ); ak:=x mod 10; x:=x div 10; end end; for i:=( )do write(ai:1) end.,x mod 10,x div 10,k:=k-1,k to max,max,乘7,0,4,0,5,例14、輸入十個(gè)整數(shù),把這十個(gè)數(shù)按由小到大的順序排列。(選擇排序) 分析:一組整數(shù)放在a1,a2,an-1,an中,先將a1與其后的各元素依次比較,凡比它小的,則與之交換,比較結(jié)束后,則a1中存放的是最小的數(shù);然后將a2與其后各元素再依次比較,凡比它小的,則與之交換,又可得出a2為次小的數(shù);依次類推,最后一次,將an-1與an比較。于是a1,a2,an為一組從小到大的數(shù)。,例如下面對5個(gè)數(shù)進(jìn)行排序,這個(gè)五個(gè)數(shù)分別為8、2、9、10、5。按選擇排序方法,過程如下: 初始數(shù)據(jù) :8 2 9 10 5 第一躺排序:8 2 9 10 5 9 2 8 10 5 10 2 8 9 5 10 2 8 9 5 第二躺排序:10 8 2 9 5 10 9 2 8 5 10 9 2 8 5 第三躺排序:10 9 8 2 5 10 9 8 2 5 第四躺排序:10 9 8 5 2,var a:array110of integer; i,j,t:integer; begin for i:=1 to 10 do read(ai); for i:=( )do 進(jìn)行9趟排序 for j:=( )do 將第i個(gè)數(shù)與其后所有數(shù)比較 if( )then begin aj若比ai小,則與之交換 t:=ai;ai:=aj;aj:=t; end; for i:=1 to 10 do write(ai, ); end.,1 to 9,i+1 to 10,aiaj,例15、輸入十個(gè)整數(shù),把這十個(gè)數(shù)按由小到大的順序排列。(冒泡排序),思想:從左端開始比較相鄰的兩個(gè)數(shù)據(jù)元素的大小。小的浮起,大的沉底。 第一趟:第1個(gè)與第2個(gè)比較,大則交換;第2個(gè)與第3個(gè)比較,大則交換,值最大的數(shù)組元素交換到最后一個(gè)位置上; 第二趟:對前n-1個(gè)數(shù)組元素進(jìn)行同樣的操作,值次大的數(shù)交換到第n-1個(gè)位置上; 依次類推,則完成排序。,第 六 趟 排 序 后,第 五 趟 排 序 后,第 四 趟 排 序 后,第 三 趟 排 序 后,第 二 趟 排 序 后,第 一 趟 排 序 后,初 始 關(guān) 鍵 字,const n=10; var a:array1n of integer; temp,i,j:integer; begin for i:=1 to n do read(ai); for i:=( ) do for j:=( )do if( )then begin temp:=aj;aj:=aj+1;aj+1:=temp; end; for i:=1 to n do write(ai); writeln; end.,1 to n-1,1 to n-i,ajaj+1,二維數(shù)組在編程中多數(shù)用于描述二維的關(guān)系:如地圖、棋盤、城市街道、迷宮等等。而二維數(shù)組元素有兩個(gè)下標(biāo):第一個(gè)下標(biāo)表示該元素在第幾行,第二個(gè)下標(biāo)表示在第幾列。 二維數(shù)組的定義: var a:array110,15 of integer; 中括號(hào)中的兩個(gè)范圍表示二維數(shù)組共有多少行、多少列(第一個(gè)范圍表示行數(shù),第二個(gè)范圍表示列數(shù));如上例,定義了一個(gè)二維數(shù)組a,共有10行5列。,二維數(shù)組,1、輸入一個(gè)m行m列的矩陣,求它的倒置,即對所有的i,j,將ai,j與aj,i交換。,11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44,11 21 31 41 12 22 32 42 13 23 33 43 14 24 34 44,const m=4; type matrix=array1m , 1m of integer; var a:matrix; i,j,t:integer; begin for i:=1 to m do for j:=1 to m do read(ai,j); 二維數(shù)組的輸入 for i:=1 to m do for j:=( )do begin ( ) end; for i:=1 to m do begin for j:=1 to m do write(ai,j, ); writeln; end; 二維數(shù)組的輸出 end.,1 to i-1,t:=ai,j; ai,j:=aj,i; aj,i:=t;,2閱讀程序,寫出運(yùn)行結(jié)果。 var a : array 13, 14 of integer; b: array 14, 13 of integer; x,y: integer; begin for x:=1 to 3 do for y:=1 to 4 do ax,y:=x+y; for x:=4 downto 1 do for y:=1 to 3 do bx,y:=ay,x; writeln(b3,2); end.,2,3,4,5,3,4,5,6,4,5,6,7,5,6,7,4,5,6,3,4,5,2,3,4,3、已知數(shù)組A中,每個(gè)元素AI,J在存貯時(shí)要占3個(gè)字節(jié),設(shè)I從1變化到8,J從1變化到10,分配內(nèi)存時(shí)是從地址SA開始連續(xù)按行存貯分配的。試問A5,8的起始地址為( )。 ASA+141 BSA+180 CSA+222 DSA+225,在邏輯上我們經(jīng)常把二維數(shù)組看成是一張表格,但在計(jì)算機(jī)內(nèi)部,二維數(shù)組的所有元素對應(yīng)的存儲(chǔ)單元是連續(xù)的,與一維數(shù)組的存儲(chǔ)方式在本質(zhì)上是相同的。Pascal編譯程序按行下標(biāo)主順序存放數(shù)組元素,先放第一行上的元素,接著放第二行上的元素,依次把各行的元素放入一串連續(xù)的存儲(chǔ)單元中。,A,4、已知如下N*(N+1)/2個(gè)數(shù)據(jù),按行的順序存入數(shù)組A1,A2,中。其中,第一個(gè)下標(biāo)表示行,第二個(gè)下標(biāo)表示列。 a11 a21 a22 a31 a32 a33 an1 an2 an3 ann 若aij ( ij, j,i=1,2,n)存貯在Ak中,試問k和i,j之間的關(guān)系如何表示?,k:=(i-1)*i/2+j,5、求一個(gè)nn數(shù)陣中的馬鞍數(shù),輸出它的位置。所謂馬鞍數(shù),是指在行上最小而在列上最大的數(shù)。如下:(n=5) 5 6 7 8 9 4 5 6 7 8 3 4 5 2 1 2 3 4 9 0 1 2 5 4 8 則第一行第一列上的數(shù)就是馬鞍數(shù)。,const n=5; var a:array1n,1nof integer; h,l:array1nof integer; min,max,i,j:integer; begin for i:=1 to n do for j:=1 to n do read(ai,j); 輸入數(shù)陣 for i:=1 to n do begin ( ); for j:=2 to n do if ai,jmax then max:=ai,j; lj:=max; 記錄每列最大值 end; for i:=1 to n do for j:=1 to n do if (ai,j=hi)and( ) then writeln(,i,j,):,ai,j); end.,min:=ai,1,max:=a1,j,ai,j=lj,6、閱讀程序,寫出運(yùn)行結(jié)果。 var yh:array15,15of integer; i,j:integer; begin yh1,1:=1; for i:=2 to 5 do begin yhi,1:=1;yhi,i:=1; for j:=2 to i-1 do yhi,j:=yhi-1,j-1 + yhi-1,j; end; for i:=1 to 5 do begin for j:=1 to i do write(yhi,j:3); writeln; end; end.,1,1,1,1,1,2,1,1,3,3,1,1,4,6,4,例N=5時(shí) 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9,7、方陣填數(shù):在一個(gè)N*N的方陣中,填入1,2,N *N個(gè)數(shù),并要求構(gòu)成如下的格式:,分析:可以用N行N列的二維數(shù)組來存放這N*N個(gè)數(shù),用整型變量left,right,up,down表示方陣的左、右、上、下邊界,其初始值分別為1,n,1,n。 重復(fù)執(zhí)行下列操作,直到n*n個(gè)元素都填滿: 先從左往右填up行,然后up值加1; 先從上往下填right列,然后right值減1; 先從右往左填down行,然后down值減1; 先從下往上填left列,然后left值加上。,const maxn=20; var a:array1maxn,1maxn of integer; n , i,j,s,left,right,up,down:integer; begin readln(n); left:=1; right:=n; up:=1; down:=n; ( ); i:=up; while ( )do begin for j:=left to right do begin s:=s+1; ai,j:=s; end; up:=up+1; j:=right; for i:=up to down do begin s:=s+1; ai,j:=s; end;,right:=right-1; i:=down; for j:=right downto left do begin s:=s+1; ai,j:=s; end; down:=down-1; j:=left; for i:=( )do begin s:=s+1; ai,j:=s; end; ( ); i:=up; end; for i:=1 to n do begin for j:=1 to n do write(ai,j:4); writeln; end; end.,s:=0,sn*n,down downto up,left:=left+1,8、奇數(shù)階魔陣 魔陣是用自然數(shù)1,2,3,n2填n階方陣的各個(gè)元素位置,使方陣的每行的元素之和、每列元素之和及主對角線元素之和均相等。奇數(shù)階魔陣的一個(gè)算法是將自然數(shù)數(shù)列從方陣的中間一行最后一個(gè)位置排起,每次總是向右下角排(即Aij的下一個(gè)是Ai+1,j+1)。但若遇以下四種情形,則應(yīng)修正排數(shù)法。 (1) 列排完(即j=n+1時(shí)),則轉(zhuǎn)排第一列; (2) 行排完(即i=n+1時(shí)),則轉(zhuǎn)排第一行; (3) 對An,n的下一個(gè)總是An,n-1; (4) 若Aij已排進(jìn)一個(gè)自然數(shù),則排Ai1,j2。,var a:array199,199of integer; i,j,k,n:integer; begin fillchar(a,sizeof(a),0); readln(n); i:=n div 2+1;( ); ai,j:=1; for k:=2 to n*n do begin if(i=n)and(j=n)then ( ) else begin i:=i mod n +1; j:=j mod n +1; end;,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,j:=n,j:=j-1,i:=i-1,j:=j-2,1.閱讀程序,寫出運(yùn)行結(jié)果。 var a:array15of integer; i,j:integer; begin for i:=1 to 5 do begin ai:=ai+i; for j:=1 to i do aj:=aj+j; end; for i:=1 to 5 do write(ai, ); end. 輸出( ),6 10 12 12 10,一維數(shù)組練習(xí)題,1,2,2,3,4,3,4,6,6,4,5,8,9,8,5,6,10,12,12,10,2、閱讀程序,寫出運(yùn)行結(jié)果。 var a:array014 of integer; s,max,min,i:integer; begin for i:=0 to 14 do read(ai); max:=-maxint; min:=maxint; for i:=0 to 14 do begin s:=ai+a(i+1) mod 15+ a(i+2) mod 15; if smax then max:=s; if smin then min:=s; end; writeln(max); writeln(min); end.,輸入:5 20 1 18 4 16 6 10 15 2 17 3 14 7 13 輸出( ),39 22,15個(gè)數(shù)形成環(huán)狀,分別找出3個(gè)相鄰的數(shù),使其相加之和最大或最小。,26,26,26,39,39,23,23,38,26,32,31,27,34,22,22,34,24,34,25,38,3、閱讀程序,寫出運(yùn)行結(jié)果。 var i,j,f:integer; a:array15of integer; begin for i:=1 to 5 do begin f:=i mod 2; if f=0 then ai:=0 else ai:=1; for j:=1 to i do if f=0 then ai:=ai+j else ai:=ai*j end; for i:=1 to 5 do write(ai:5); end. 輸出( ),1 3 6 10 120,1,1,0,1,3,1,1,2,6,0,1,3,6,10,1,1,2,6,24,120,4、閱讀程序,寫出運(yùn)行結(jié)果。 type compon=(fruit,cheese,suger,flour,egg,wine); 定義枚舉類型 col=arraycompon of real; 定義下標(biāo)類型為compon的數(shù)組類型 const 定義二個(gè)類型為col的數(shù)組常量 wt:col=(100,400,400,50,250,150); p:col=(0.25,0.30,0.20,0.05,0.20,0.15); var i:compon; 枚舉變量i,可用作循環(huán)變量 cp:real; n:integer; begin readln(n); cp:=0; for i:= fruit to wine do cp:=cp+wti*pi ; write(cp*n:8:2); end.,輸入:8 輸出:( ),2400.00,5、閱讀程序,寫出運(yùn)行結(jié)果。 var a:array110 of integer; i,k:integer; begin a1:=1; a2:=1; k:=1; repeat ak+2:=1; for i:=k downto 2 do ai:=ai+ai-1; k:=k+1; until k=6; for i:=1 to k do write(ai, ); writeln; end.,輸出( ),1 5 10 10 5 1,1,1,1,1,2,3,3,1,4,6,4,1,5,10,10,5,1 1 1 1 1,1,6、閱讀程序,寫出運(yùn)行結(jié)果。 const n=8; var a:array1n of integer; i,s,max,b,e,b1:integer; begin for i:=1 to n read(ai); max:=-maxint; s:=0; for i:=1 to n do begin if s=0 then b:=i; s:=s+ai;,if smax then begin b1:=b; max:=s; e:=i; end; if s0 then s:=0; end; writeln(max); writeln(b1, ,e); end. 輸入:3 17 78 44 50 53 80 48 輸出:( ),199 3 7,找出數(shù)組a中最大和的子序列:用max記錄最大和,用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算網(wǎng)絡(luò)安全管理考試試題及答案總結(jié)
- 法學(xué)概論課外活動(dòng)中的試題答案
- 公司戰(zhàn)略與供應(yīng)鏈管理試題及答案
- 網(wǎng)絡(luò)管理員必知法律法規(guī)試題及答案
- 開展創(chuàng)新項(xiàng)目的步驟計(jì)劃
- 網(wǎng)絡(luò)配置管理策略試題與答案
- 2025年東莞市存量房購買合同范本
- 2025年跨平臺(tái)開發(fā)技術(shù)試題及答案
- 橫向形變測試題及答案
- 機(jī)修崗位筆試題及答案
- 園林苗木項(xiàng)目融資計(jì)劃書
- 階梯型獨(dú)立基礎(chǔ)(承臺(tái))配筋率驗(yàn)算
- 醫(yī)院醫(yī)生電子處方箋模板-可直接改數(shù)據(jù)打印使用
- 織金新型能源化工基地污水處理廠及配套管網(wǎng)工程-茶店污水處理廠環(huán)評報(bào)告
- 陜西省2023年中考英語真題(附答案)
- 中醫(yī)內(nèi)科學(xué)-咳嗽課件
- 夏商周考古-鄭州大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 緊固件名稱中英文對照表
- 失眠之中醫(yī)問診單
- 銀行個(gè)人業(yè)務(wù)柜面操作風(fēng)險(xiǎn)點(diǎn)防控手冊(印刷版)模版
- 幼兒園開辟小菜園的教育價(jià)值及實(shí)施策略探究 論文
評論
0/150
提交評論