FORTRAN語(yǔ)言第7章(共8章).ppt_第1頁(yè)
FORTRAN語(yǔ)言第7章(共8章).ppt_第2頁(yè)
FORTRAN語(yǔ)言第7章(共8章).ppt_第3頁(yè)
FORTRAN語(yǔ)言第7章(共8章).ppt_第4頁(yè)
FORTRAN語(yǔ)言第7章(共8章).ppt_第5頁(yè)
已閱讀5頁(yè),還剩138頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

FOTRAN77/90程序設(shè)計(jì),土木工程學(xué)院 2008.11,第一節(jié) 數(shù)組概念,第二節(jié) 數(shù)組的說明與引用,第三節(jié) 數(shù)組元素的存儲(chǔ)結(jié)構(gòu),第四節(jié) 數(shù)組的輸入輸出,第五節(jié) 數(shù)組應(yīng)用-程序舉例,第七講 數(shù)組,第一節(jié) 數(shù)組的概念,前面章節(jié)涉及的問題都是比較簡(jiǎn)單,編寫的程序也不復(fù)雜,這些程序的一個(gè)突出特點(diǎn)是所處理的數(shù)據(jù)量非常少,采用的數(shù)據(jù)類型都是簡(jiǎn)單的內(nèi)部數(shù)據(jù)類型,使用的變量都是普通變量。然而在實(shí)際的科研數(shù)值計(jì)算中,往往遇到的是一些涉及大量數(shù)據(jù)的復(fù)雜問題,如:,?思考:輸入某班50個(gè)學(xué)生的成績(jī),統(tǒng)計(jì)平均成績(jī)以及高于平均分學(xué)生的人數(shù)。 定義50個(gè)變量存放各個(gè)學(xué)生的成績(jī)? 定義1個(gè)變量,循環(huán)讀入各個(gè)學(xué)生的成績(jī),同時(shí)累計(jì)50個(gè)學(xué)生的總成績(jī),進(jìn)而求出平均成績(jī); 當(dāng)統(tǒng)計(jì)高于平均分學(xué)生人數(shù)時(shí),再次輸入50個(gè)成績(jī)?,不合適,可以,不合適,解決方法:使用數(shù)組!,第一節(jié) 數(shù)組的概念,求解100元一次方程組。 求解高階微分方程。 計(jì)算5050階矩陣的轉(zhuǎn)置矩陣。 對(duì)某班30名學(xué)生的學(xué)習(xí)成績(jī)進(jìn)行排序處理。 以上問題都要涉及幾十、幾百、幾千,甚至上萬個(gè)數(shù)據(jù),如果在程序中采用簡(jiǎn)單的內(nèi)部數(shù)據(jù)類型和變量來求解這類問題,其難度將大大增加,甚至無法設(shè)計(jì)和編寫程序。,第一節(jié) 數(shù)組的概念,在輸入數(shù)據(jù)時(shí),用不同的名字引用每一個(gè)存儲(chǔ)單元比較煩瑣。如果有100個(gè)數(shù)需要處理,將需要一個(gè)長(zhǎng)的輸入語(yǔ)句,其中每個(gè)變量被列出一次。,第一節(jié) 數(shù)組的概念,簡(jiǎn)單變量是用來代表一個(gè)數(shù)據(jù);而把具有相同類型的一批數(shù)據(jù)看成是一個(gè)整體,叫做數(shù)組。給數(shù)組取一個(gè)名字叫數(shù)組名,所以數(shù)組名代表一批數(shù)據(jù),數(shù)組中的每一個(gè)數(shù)據(jù)稱為數(shù)組元素,它可通過順序號(hào)(下標(biāo))來區(qū)分。,一、變量與數(shù)組的區(qū)別,第一節(jié) 數(shù)組的概念,只要給出數(shù)組名和下標(biāo)就可以表示某一數(shù)組元素。例如: 一個(gè)班30個(gè)學(xué)生的FORTRAN語(yǔ)言課程成績(jī)組成一個(gè)數(shù)組G,每個(gè)學(xué)生的成績(jī)可表示為: G(1),G(2),G(3),G(i),G(30),例:30個(gè)學(xué)生4門課程的成績(jī) S(1,1),S(1,2),S(1,3),S(1,4) S(2,1),S(2,2),S(2,3),S(2,4) S(30,1),S(30,2),S(30,3),S(30,4),在上例中,區(qū)分G數(shù)組的元素需要一個(gè)順序號(hào)(下標(biāo)),故稱為一維數(shù)組;而區(qū)分S數(shù)組的元素需要兩個(gè)順序號(hào),故稱為二維數(shù)組,其中第一個(gè)下標(biāo)代表元素所在行號(hào),第二個(gè)下標(biāo)為該元素所在列號(hào)。,一、變量與數(shù)組的區(qū)別,二、數(shù)組的分類,引入數(shù)組以后,讓一批同類型數(shù)據(jù)共享一個(gè)名字,不必為每一對(duì)象都取一個(gè)名字。數(shù)組元素是按順序號(hào)連續(xù)存放的,我們可以用循環(huán)語(yǔ)句控制下標(biāo)的變化,這給在同一方式下處理多個(gè)同類型數(shù)據(jù)帶來極大方便。例如:,第一節(jié) 數(shù)組的概念,REAL P(5),AVER !定義P數(shù)組 DO I=1,5 READ(*,*)P(I) !輸入成績(jī)并存入P數(shù)組 AVER=AVER+P(I) !求成績(jī)之和 ENDDO AVER=AVER/5 !求平均成績(jī),一、數(shù)組說明的內(nèi)容,第二節(jié) 數(shù)組的說明與引用,程序中所有數(shù)組都要先說明該數(shù)組的名字、類型、維數(shù)及大小,以便編譯系統(tǒng)給數(shù)組分配相應(yīng)的存儲(chǔ)單元。 1)數(shù)組名:數(shù)組和變量一樣,也用標(biāo)識(shí)符來命名; 2)數(shù)組的類型:數(shù)組的類型由數(shù)組元素的類型來決定; 3)數(shù)組的維數(shù):為了區(qū)分?jǐn)?shù)組元素所需順序號(hào)(下標(biāo))的個(gè)數(shù); 4)數(shù)組的大小:數(shù)組中包含數(shù)組元素的個(gè)數(shù),由數(shù)組每維下標(biāo)的上界和下界來決定。,一、數(shù)組說明的內(nèi)容,數(shù)組名、數(shù)組的維數(shù)和每一的上、下界的定義要用到數(shù)組說明符。其一般形式為: 數(shù)組名(維說明符 ,維說明符),維說明符的個(gè)數(shù)就是數(shù)組的維數(shù)。 維說明符至少1個(gè),最多7個(gè)。,維說明符的一般形式為: 維下界: 維上界 維下界與維上界之間用“ :”分隔,下界為1時(shí),可省略不寫。維下界與維上界都只能是整型表達(dá)式。維界表達(dá)式的值必須是整數(shù)值,而且維上界的值必須大于維下界的值。,一、數(shù)組說明的內(nèi)容,維說明符的一般形式為: 維下界: 維上界 在維界表達(dá)式中,允許出現(xiàn)整型常量、整型變量或者星號(hào)“ * ”。不允許出現(xiàn)函數(shù)或數(shù)組元素。 如果在維界表達(dá)式中出現(xiàn)整型變量名,則該數(shù)組稱作可調(diào)數(shù)組。如果出現(xiàn)星號(hào)“ * ”,則只能用星號(hào)作為維的上界,這樣的數(shù)組叫做假定大小的數(shù)組。 可調(diào)數(shù)組和假定大小數(shù)組只能出現(xiàn)在子程序,不允許在主程序中使用。,說明方法一:用DIMENSION說明數(shù)組 DIMENSION 數(shù)組說明符 ,數(shù)組說明符 例:DIMENSION A(1:5), B(-1:2),二、數(shù)組說明的方法,第二節(jié) 數(shù)組的說明與引用,注意:1)DIMENSION語(yǔ)句是非執(zhí)行語(yǔ)句,必須放在程序單位的可執(zhí)行語(yǔ)句之前; 2)用DIMENSION語(yǔ)句只說明了數(shù)組的名字、維數(shù)、大小等特性,但不能說明數(shù)組的數(shù)據(jù)類型。此時(shí),數(shù)組類型的說明方法與變量名相同。 如無特別指明,數(shù)組的類型服從IN規(guī)則 用類型說明語(yǔ)句指明數(shù)組的類型,說明方法二:用類型說明語(yǔ)句說明數(shù)組 類型說明關(guān)鍵字 數(shù)組說明符,數(shù)組說明符 例: INTEGER A(1:5), B(-1:2),用類型說明語(yǔ)句可以直接說明數(shù)組的全部特性。,二、數(shù)組說明的方法,CHARACTER*8 NAME(30) REAL SCORE(5, 30) 說明了字符型數(shù)組NAME,數(shù)組元素的長(zhǎng)度為8,還有實(shí)型數(shù)組SCORE。,說明方法三:同時(shí)使用DIMENSION和類型說明語(yǔ)句說明數(shù)組 其一般形式為:類型符,DIMENSION(維說明符):數(shù)組名 例:INTEGER , DIMENSION(1:5) : A, B(-1:2),C,DIMENSION屬性統(tǒng)一說明大小,名字后個(gè)別說明大小 個(gè)別優(yōu)于統(tǒng)一,REAL(4), DIMENSION(1:3,1:4) : D=0 上例中說明了三個(gè)整型一維數(shù)組A,B,C,一個(gè)二維實(shí)型數(shù)組D,其中A,C各含有5個(gè)元素,B含有4個(gè)元素;D中含有12個(gè)元素。 在說明數(shù)組時(shí),可以在數(shù)組名后面給出維說明,這時(shí)以該數(shù)組名后的維說明為準(zhǔn)。,二、數(shù)組說明的方法,DIMENSION A(1:5), B(-1:2),C(1:3,1:4) INTEGER A,B REAL C,三、數(shù)組元素的引用,數(shù)組元素是通過數(shù)組元素名來引用的。數(shù)組元素名的一般形式是,數(shù)組名(下標(biāo)表達(dá)式,下標(biāo)表達(dá)式) 其中:下標(biāo)表達(dá)式為整型表達(dá)式,如果不是整型,則自動(dòng)取整之后再使用;下標(biāo)表達(dá)式的個(gè)數(shù)必須等于該數(shù)組的維數(shù),每個(gè)下標(biāo)表達(dá)式的值必須在相應(yīng)的維下界到維上界之間。,第二節(jié) 數(shù)組的說明與引用,注意:1、數(shù)組元素表示數(shù)組中每個(gè)成份的值,數(shù)組元素名表示數(shù)組元素的名字。但在實(shí)際使用中,數(shù)組元素與數(shù)組元素名并不加區(qū)分。由于數(shù)組元素名是用數(shù)組名后面帶下標(biāo)表示的,所以數(shù)組元素名叫下標(biāo)變量。下標(biāo)變量可以和簡(jiǎn)單變量等同使用。,三、數(shù)組元素的引用,注意:2、數(shù)組元素名與數(shù)組說明符的區(qū)別 REAL A(3,3) S1=A(1,1)+A(1,2)+A(1,3) S2=A(2,1)+A(2,2)+A(2,3) S3=A(3,1)+A(3,2)+A(3,3),兩個(gè)語(yǔ)句中都有A(3,3),由于它出現(xiàn)在兩個(gè)不同類型的語(yǔ)句中,所以含義截然不同。REAL語(yǔ)句中的A(3,3)是數(shù)組說明符,其含義是定義了一個(gè)實(shí)型二維數(shù)組,有9個(gè)元素。賦值語(yǔ)句中A(3,3)是數(shù)組元素名。,三、數(shù)組元素的引用,注意:3、在F77中,除了在I/O語(yǔ)句中之外,其他場(chǎng)合不允許對(duì)數(shù)組進(jìn)行整體操作,只能對(duì)數(shù)組的元素逐個(gè)進(jìn)行操作。但在F90中,允許對(duì)數(shù)組進(jìn)行整體操作。 REAL A(4,5) A(1:,:)=100.0 A(:,1:5:2)=470.0,是一個(gè)三元表達(dá)式,可作為數(shù)組元素 的下標(biāo)表達(dá)式。其含義是從1變化到 5,每次增加2。三元表達(dá)式更一般的 形式如下:,下標(biāo)三元組法:每一維是下標(biāo)三元組e1:e2:e3或常量 例如二維數(shù)組:數(shù)組名(行三元組或常量,列三元組或常量) e1:起始下標(biāo)值,缺省為下界d1 e2:終止下標(biāo)值 ,缺省為上界d2 e3:步長(zhǎng)值,缺省間隔為1,例:片段A(3:6)所含的元素為: A(3),A(4), A(5), A(6) 例: INTEGER,DIMENSION(6:50):A 則下列片段含有的元素為哪些? A(10:30:1) A(:20:5) A(8:10),第二節(jié) 數(shù)組的說明與引用,例:integer,dimension(11,6,4):B 片段B(6:11:2 , 5, 2:3)包含的元素為:,5為常量,B(6,5,2),B(6,5,3) B(8,5,2),B(8,5,3) B(10,5,2),B(10,5,3) 注意: 片段包含的元素不一定連續(xù) 片段將組成一個(gè)新的數(shù)組,第二節(jié) 數(shù)組的說明與引用,高級(jí)語(yǔ)言編譯系統(tǒng)為一個(gè)數(shù)組分配一片連續(xù)的內(nèi)存單元,每個(gè)存儲(chǔ)單元存放一個(gè)數(shù)組元素。 對(duì)于一維數(shù)組按下標(biāo)從小到大的順序存放,第三節(jié) 數(shù)組元素的存儲(chǔ)結(jié)構(gòu),INTEGER A(5),A(1),A(2),A(3),A(4),A(5),對(duì)于二維以上數(shù)組FORTRAN規(guī)定:數(shù)組元素在內(nèi)存中是按列的順序連續(xù)存放的。,INTEGER B(3,4),INTEGER B (3,4),A(1,1),A(2,1),A(3,1),A(1,2),A(2,2),A(3,2),A(1,4),A(2,4),A(3,4),第三節(jié) 數(shù)組元素的存儲(chǔ)結(jié)構(gòu),在組織數(shù)組I/O時(shí),對(duì)數(shù)組元素存儲(chǔ)時(shí)的排列順序要有清楚的了解。,第四節(jié) 數(shù)組的輸入輸出,一、使用DO循環(huán)輸入輸出數(shù)組元素,此方式的特點(diǎn)是:對(duì)于輸入,每執(zhí)行一個(gè)輸入語(yǔ)句輸入一個(gè)數(shù)組元素值;對(duì)于輸出,每執(zhí)行一個(gè)輸出語(yǔ)句輸出一個(gè)元素值。,將輸入輸出語(yǔ)句放在DO循環(huán)中,利用循環(huán)控制變量作為數(shù)組元素的下標(biāo)來控制數(shù)組元素的輸入或輸出。,REAL A(4,5) DO I=1,4 DO J=1,5 READ(*,*) A(I,J) ENDDO ENDDO,每輸入一個(gè)數(shù)要按一次回車鍵,A數(shù)組的20個(gè)數(shù)要輸入20次。,第四節(jié) 數(shù)組的輸入輸出,一、使用DO循環(huán)輸入輸出數(shù)組元素,DO I=1,5 DO J=1,4 WRITE(*,*) A(J,I) ENDDO ENDDO END,A數(shù)組共輸出20行,DO I1,100,2,WRITE(*,*) A(I),ENDDO, 用戶可以自已控制輸入和輸出次序以及個(gè)數(shù),DO K50,1,1,WRITE(*,*) M(K),ENDDO,把M數(shù)組的50個(gè)元素按逆序打印出來,將奇數(shù)(1, 3, , 99) 下標(biāo)的元素輸出,一、使用DO循環(huán)輸入輸出數(shù)組元素,DO I1,20,5,READ(*,*) A(I), A(I+1), A(I+2), A(I+3), A(I+4),這樣每次循環(huán)一次則可輸入5個(gè)數(shù),每個(gè)數(shù)之間用逗號(hào)分隔。,ENDDO, 可以多設(shè)置一些輸入項(xiàng)或輸出項(xiàng),例:,一、使用DO循環(huán)輸入輸出數(shù)組元素,第四節(jié) 數(shù)組的輸入輸出,二、以數(shù)組名作為輸入輸出項(xiàng),這種方式是要對(duì)整個(gè)數(shù)組的所有元素進(jìn)行輸入輸出操作,元素的個(gè)數(shù)和元素的操作次序都不能由自己控制,必須是對(duì)整個(gè)數(shù)組進(jìn)行操作。,READ (*,*) X(1),X(2) ,X(3) ,X(4) ,X(10),WRITE (*,8) X(1),X(2) ,X(3) ,X(4) ,X(10),注:對(duì)于二維數(shù)組采用數(shù)組名方式進(jìn)行輸入和輸出時(shí),因?yàn)槎S數(shù)組元素的存儲(chǔ)是按列存放,所以,在輸出時(shí)是按存儲(chǔ)順序來打印的。,例:,INTEGER Y(2,3),READ (*,*) Y,WRITE (*,7) Y,7 FORMAT (1X,3i8),END,假設(shè)Y數(shù)組的各元素值為:10 11 12,20 21 22,從鍵盤輸入各元素的值為:10,20,11,21,12,22,執(zhí)行打印語(yǔ)句的打印結(jié)果是,10 20 11,21 12 22,如果要打印出與數(shù)組的實(shí)際結(jié)構(gòu)相符的結(jié)果,最好用隱DO方式,即:,WRITE(*,7) (Y(I,J),J=1,3),I=1,2),打印結(jié)果為:10 11 12,20 21 22,INTEGER,DIMENSION(3,3):A READ(*,*) A WRTIE(*,10) A 10 FORMAT(1X,3I5) END,第四節(jié) 數(shù)組的輸入輸出,二、以數(shù)組名作為輸入輸出項(xiàng),數(shù)組元素按照它們?cè)趦?nèi)存中的排列順序輸入輸出。該方式要特別注意數(shù)據(jù)的組織。,當(dāng)執(zhí)行READ語(yǔ)句時(shí),從鍵盤依次鍵入賦給A的數(shù)據(jù)就可以了,但輸出A的數(shù)據(jù)時(shí)注意按“列”存儲(chǔ)的原則,對(duì)二維以上數(shù)組要注意這個(gè)問題。比如從鍵盤輸入:1,2,3,4,5,6,7,8,9,1 4 7 2 5 8 3 6 9,三、利用隱含DO循環(huán)控制數(shù)組元素的輸入輸出,隱DO循環(huán)只能用于輸入和輸出語(yǔ)句以及DATA語(yǔ)句中,它可以按要求來指定數(shù)組中需要輸入或輸出的部分,并且可以人為地規(guī)定輸入或輸出格式。,隱式DO循環(huán)實(shí)際上是一種帶控制循環(huán)變量的DO循環(huán),但簡(jiǎn)化成只有DO循環(huán)的第一句,并且把關(guān)鍵字DO隱去。隱式DO循環(huán)的一般形式如下: I = m1, m2, m3 其中,m1表示循環(huán)的初值;m2表示循環(huán)的終值;m3表示循環(huán)的增量。如果省略本項(xiàng)目,則默認(rèn)為1。,隱式DO循環(huán)不是一種可以獨(dú)立存在的語(yǔ)句。它只能作為輸入輸出列表的一個(gè)組成部分,用來控制重復(fù)讀寫的次數(shù)。它的應(yīng)用形式如下: (I/O列表, 循環(huán)變量名 = 循環(huán)初值, 循環(huán)終值, 循環(huán)增值),也就是把I/O列表與循環(huán)控制部分一起用括號(hào)括起,中間用逗號(hào)分開,稱為隱式DO循環(huán)列表,寫在讀寫語(yǔ)句后面作為讀寫對(duì)象。,三、利用隱含DO循環(huán)控制數(shù)組元素的輸入輸出,WRITE(*,*)(A,B,N=1,5),WRITE(*,*)A,B, A,B, A,B, A,B, A,B,(1) 單重隱DO結(jié)構(gòu) (iotable,i=e1,e2 ,e3 ),當(dāng)e31時(shí),可省略,例:,INTEGER x(5),READ(*,*) (x(I),I1,5) READ(*,*) x(1), x(2), x(3), x(4) ,x(5),可將5個(gè)元素的值一次性輸入,每個(gè)數(shù)之間用逗號(hào)分隔,也可以分若干次輸入,WRITE(*,*) (x(I),I1,20) WRITE (*,*) x(1), x(2), x(20),將20個(gè)元素按標(biāo)準(zhǔn)格式輸出,WRITE(*,*) (x(I),I1,5) WRITE(*,*) x(1), x(2), x(3), x(4) , x(5),輸出X數(shù)組中的部分元素,WRITE(*,*) (x(I),I1,20,2) WRITE(*,*) x(1), x(3), x(19),有選擇地輸出X數(shù)組中的元素,注:當(dāng)只需要給X數(shù)組中的前N個(gè)元素輸入值時(shí),可以寫成 READ(*,*) N, (X(I),I1,N),但N不能放在隱含DO循環(huán)內(nèi),以下語(yǔ)句是錯(cuò)誤的:READ(*,*) (N, X(I),I1,N),因?yàn)樵谶M(jìn)入循環(huán)之前,循環(huán)終值N必須有確定的值。,(2) 雙重隱DO結(jié)構(gòu),(iotable,j=e1,e2,e3),I=p1,p2,p3),內(nèi)層隱 DO循環(huán),外層隱 DO循環(huán),READ(*,*)( B(I,J),J1,3),I1,2),例:,相當(dāng)于執(zhí)行下面語(yǔ)句:,READ(*,*) B(1,1), B(1,2), B(1,3), B(2,1), B(2,2), B(2,3),輸入數(shù)據(jù)時(shí),你可以一次輸入完畢,也可以分成若干次來輸入,WRITE(*,*)( B(I,J),J1,3),I1,2),例:,輸出數(shù)據(jù)時(shí),打印成一行,也可用格式的方式,將其打印成二行,WRITE(*,10) (B(I,J), J=1,3),I=1,2),10 FORMAT (10X,3I6),READ(*,*)((A(I,J),J=1,3),I=1,2) 行在外按行序,一個(gè)READ語(yǔ)句一行輸入:1,2,3,4,5,6 與外觀一致的輸入輸出格式 READ(*,*)((A(I,J),J=1,3),I=1,2) 格式隱DO輸入:1 2 3 4 5 6 DO I=1,2 READ(*,*)(A(I,J),J=1,3) ENDDO 行顯DO列隱DO的輸入:1,2,3 4,5,6,輸入格式:一行輸入,輸入格式:與外觀一致,第四節(jié) 數(shù)組的輸入輸出,要注意使用DO循環(huán)和隱DO循環(huán)在控制數(shù)組I/O時(shí),在I/O格式上的差異。如:,第四節(jié) 數(shù)組的輸入輸出,WRITE(*,*) (A(I),I=2,14,3),DO I=2,14,3 WRITE(*,*) A(I) ENDDO,DO循環(huán)控制執(zhí)行一次輸出語(yǔ)句,就要輸出一行(一條記錄),且每行上僅有一個(gè)數(shù)組元素的值;而執(zhí)行一次隱DO循環(huán)的輸出語(yǔ)句,就把數(shù)組A的若干個(gè)元素同時(shí)輸出到一行上,即它等價(jià)于WRITE(*,*) A(2), A(5), A(8), A(11), A(14)。,WRITE(*,(1X,F6.2) (A(I),I=2,14,3),例:編寫程序,形成以下形式的二維數(shù)組。,分析:從數(shù)組元素的取值分析,元素的值與其下標(biāo)值有一種對(duì)應(yīng)關(guān)系。如果數(shù)組元素的兩個(gè)下標(biāo)用i、j表示,當(dāng)ij時(shí)數(shù)組元素值為1;當(dāng)ij時(shí),數(shù)組元素值為i-j+1。,INTEGER A(5,5) DO I=1,5 DO J=1,5 IF(I=J)THEN A(I,J)=1 ELSE A(I,J)=I-J+1 ENDIF ENDDO ENDDO,WRITE(*,10) & (A(I,J), J=1,5),I=1,5) FORMAT(1x,5I6) END,A(I,J)=1 IF(ij)A(I,j)=I-J+1,第五節(jié) 給數(shù)組賦初值,DATA語(yǔ)句是專門給變量、數(shù)組和字符子串賦初值的,其一般格式為:,nlist:由變量名、數(shù)組名、數(shù)組元素名和字符子串組成. 名字之間以逗號(hào)(,) 分隔 clist:常數(shù)和符號(hào)常數(shù)組成. 整數(shù)數(shù)據(jù)項(xiàng)間以 , 分隔 每項(xiàng)數(shù)據(jù)與寫上與無符號(hào)數(shù)字,代表說常數(shù)重復(fù)r次,nlist 與clist按從左到右的順序一一對(duì)應(yīng)。,變量表列,初值表,1格式:DATA nlist /clist/,nlist/clist/,3與賦值語(yǔ)句的區(qū)別,2功能 給變量、數(shù)組、數(shù)組元素和字符子串提供初值。,4例:,DATA I,R,D,C/1.2,0.3,3.0DO,(4.0,5.0)/ 等價(jià)于 DATA I/1/,R/2.0/,D/3.0DO/,C/(4.0,5.0)/ DATA I/1/ DATA R/2.0/ DATA D/3.0DO/ DATA C/(4.0,5.0)/,有S和K數(shù)組需賦初值,DIMENSION S(5),K(2,3),DATA S/1.2,2.3,3.0,4.5,2.8/,K/1,2,3,4,5,6/,DATA (S(I),I1,5)/1.2,2.3,3.0,4.5,2.8/,(K(I,J),J1,3),I1,2)/1,3,5, 2, 4, 6/,DATA S,K/1.2,2.3,3.0,4.5,2.8,1,2,3,4,5,6/,DIMENSION S(5),K(2,3),DIMENSION S(5),K(2,3),5注意:,(1) 變量表列中的變量與初值表中的常量在個(gè)數(shù)、類型等方面要一一對(duì)應(yīng)。,例如,下列各DATA語(yǔ)句都是錯(cuò)誤的: DATA A, B, C/2.0, 5.8/ DATA A, B, C/2.0, 5.6, 3.5, 10.0/ DATA I, K, X/3.6, 4.5, 4.5 /,初值表中的數(shù)據(jù)個(gè)數(shù)少于變量表列中變量的個(gè)數(shù),初值表中的數(shù)據(jù)個(gè)數(shù)多于變量表列中變量的個(gè)數(shù),變量表列中的前兩個(gè)變量是整型,而初值表中的前兩個(gè)常量為常數(shù),即它們的類型不一致。,若K的初值是10,C的初值是“ FORTRAN 77”,A數(shù)組有4個(gè)元素,或DATA k,C,A/10, FOTRAN77,1.23,0.5,3.3,1.45/,(1) 變量表中變量的個(gè)數(shù)與對(duì)應(yīng)的初值個(gè)數(shù)必須相同,(2) 變量的類型與初值的類型必須按順序一一對(duì)應(yīng),(2) 在初值表中如果有n個(gè)連續(xù)的常量相同,則可以簡(jiǎn)寫為: n常量,例如,DATA語(yǔ)句 REAL A(3,2),B DATA A,B/1.0, -1.0, 0.0, 0.0, -1.0, -1.0, -1.0/ 可以寫成 DATA A, B/1.0, -1.0, 20.0, 3-1.0/,(20.0表示兩個(gè)連續(xù)的0.0, 31.0也表示三個(gè)連續(xù)的1.0) 但特別要注意,31.0不能寫成3(1.0),因?yàn)?3(1.0)是一個(gè)表達(dá)式。,若M數(shù)組有100個(gè)元素,它的前50個(gè)元素的初值為0,后50個(gè)元素的初值是1,表示如下:,DATA (M(I),I1,50)/50*0/,(M(I),I51,100)/50*1/,DIMENSION M (100),或者 DATA (M(I),I1,50),(M(I),I=51,100)/50*0 ,50*1/,或者 DATA M/50*0,50*1/,下列DATA語(yǔ)句都是錯(cuò)誤的: DATA A, B, C, Y, Z/1.0, 1.0, 20.0, 2(1.0)/ 在此語(yǔ)句中,2(1.0),原意可能是表示兩個(gè)連續(xù)的1.0,但實(shí)際上這是一個(gè)表達(dá)式; DATA X, Y, Z/1.0/3.0, 1.32.5, 4.01.234/ 在此語(yǔ)句中,初值表中出現(xiàn)了三個(gè)表達(dá)式1.0/3.0、 1.32.5與4.01.234。 正確寫法是 DATA X, Y, Z/0.3333333, 3.25, 2.766/,(3) 在初值表中不允許出現(xiàn)任何形式的表達(dá)式。,例如,在一個(gè)程序單位中依次下三個(gè)DATA語(yǔ)句: DATA A, B, C, /1.0, 2.0, 3.0/ DATA K, S, B/10, 4.0, 5.0/ DATA A, K, B/2.4, 6, 10.0/ 其中變量A分別在第一和第三個(gè)DATA語(yǔ)句中賦了初值, 此時(shí)以第三個(gè)DATA語(yǔ)句中賦的初值為準(zhǔn),即變量A的最后初值為2.4。 同樣的道理,變量K的最后初值為6,變量B的最后初值為10.0。,(4) 如果在一個(gè)程序單位中有多個(gè)DATA語(yǔ)句給同一變量初值,則以最后一個(gè)DATA語(yǔ)句中所賦的初值為準(zhǔn)。,(5) FORTRAN77中DATA語(yǔ)句的作用是賦初值,它本身不是可執(zhí)行語(yǔ)句。,系統(tǒng)在對(duì)FORTRAN77源程序進(jìn)行編譯的過程中就完成了這個(gè)賦初值的操作。并且,用DATA語(yǔ)句為變量賦初值后,在程序中還可以對(duì)賦過初值的變量重新賦值。,靜態(tài)數(shù)組優(yōu)點(diǎn)是存儲(chǔ)分配算法簡(jiǎn)單,運(yùn)行速度快,缺點(diǎn)是存儲(chǔ)開銷較大。 在元素個(gè)數(shù)不確定時(shí),為考慮最壞情況,靜態(tài)數(shù)組聲明的很大,導(dǎo)致浪費(fèi)。 動(dòng)態(tài)數(shù)組優(yōu)點(diǎn)是存儲(chǔ)開銷小,缺點(diǎn)是存儲(chǔ)分配算法復(fù)雜,運(yùn)行速度慢。 示例:統(tǒng)計(jì)學(xué)生成績(jī),人數(shù)不定。 PROGRAM example871 !使用靜態(tài)數(shù)組程序 INTEGER score(100),i,j,n,x REAL : av,sum=0.0 WRITE(*,“(1X,請(qǐng)輸入班級(jí)學(xué)生人數(shù):,)”) READ*,n WRITE(*,“(1X,請(qǐng)輸入,I3,名學(xué)生成績(jī):)”) n READ*,(score(i),i=1,n) DO i=1,n sum=sum+score(i) ENDDO av=sum/n WRITE(*,“(1X,該班學(xué)生平均成績(jī)是:,F5.1)“) av END,第六節(jié) 動(dòng)態(tài)數(shù)組,第六節(jié) 動(dòng)態(tài)數(shù)組,PROGRAM example872 !使用動(dòng)態(tài)數(shù)組程序 INTEGER,DIMENSION(:),ALLOCATABLE : score(:) INTEGER i,j,n,x REAL : av,sum=0.0 WRITE(*,“(1X,請(qǐng)輸入班級(jí)學(xué)生人數(shù):,)”) READ*,n ALLOCATE(score(n) WRITE(*,“(1X,請(qǐng)輸入,I3,名學(xué)生成績(jī):)”) n READ*,(score(i),i=1,n) DO i=1,n sum=sum+score(i) ENDDO av=sum/n WRITE(*,“(1X,該班學(xué)生平均成績(jī)是:,F5.1)“) av END PROGRAM,使用動(dòng)態(tài)數(shù)組,需進(jìn)行聲明。聲明時(shí)不指定大小。 一般格式: 類型聲明符,DIMENSION(:,:),ALLOCATABLE:數(shù)組名,數(shù)組名 或者 類型聲明符,ALLOCATABLE : 數(shù)組名(:,:),數(shù)組名(:,:) 示例: INTEGER,DIMENSION(:),ALLOCATABLE : num,score REAL,DIMENSION(:,:),ALLOCATABLE : A,B INTEGER,ALLOCATABLE : num(:),score(:) REAL,ALLOCATABLE : A(:,:),B(:,:),第六節(jié) 動(dòng)態(tài)數(shù)組,動(dòng)態(tài)數(shù)組聲明后,使用ALLOCATE語(yǔ)句為分配存儲(chǔ)空間,指定維下界和上界。 一般格式: ALLOCATE(數(shù)組名(維說明符),數(shù)組名(維說明符) ALLOCATE語(yǔ)句維說明符中的下界和上界可以是整型變量或整型表達(dá)式。 ALLOCATE語(yǔ)句中指定數(shù)組維數(shù)與聲明的數(shù)組維數(shù)相同,否則產(chǎn)生語(yǔ)法錯(cuò)誤。 ALLOCATE通過狀態(tài)變量獲得執(zhí)行狀態(tài),若成功,則狀態(tài)為0,否則為錯(cuò)誤號(hào)。 示例: INTEGER,DIMENSION(:),ALLOCATABLE : num ! num為一維動(dòng)態(tài)數(shù)組 REAL,DIMENSION(:,:),ALLOCATABLE : arr ! arr為二維動(dòng)態(tài)數(shù)組 CHARACTER*10,ALLOCATABLE : book(:,:,:),name(:) !定義三維和一維動(dòng)態(tài)數(shù)組 n=4; m=5; READ *,k ALLOCATE(num(5),arr(n,m),book(35,4,k),name(n+m+k) ALLOCATE(num(n),arr(-5:n,m:m+10),book(m,n,k) ALLOCATE(num(n),arr(-5:n,m:m+10),book(m,n,k) ALLOCATE(num(:n),arr(-5:n,m:m+10),book(m+1,n+2,k+3),STAT=ierr),為動(dòng)態(tài)數(shù)組分配存儲(chǔ)空間,8.7 動(dòng)態(tài)數(shù)組/示例,例從鍵盤輸入數(shù)目不確定的一批正整數(shù),將這批整數(shù)保存在數(shù)組中,然后反序輸出這批整數(shù)。分別采用靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組編寫程序?qū)崿F(xiàn)之。 !使用靜態(tài)數(shù)組程序 PROGRAM static_array PARAMETER(max=200) INTEGER : i, n=0, array(max) READ *,i DO WHILE (i.NE.-1) n=n+1 array(n)=I READ *,i ENDDO PRINT *,data_number=,n PRINT *,(array(i),i=n,1,-1) END,第八章 數(shù)組及經(jīng)用,!使用動(dòng)態(tài)數(shù)組程序 PROGRAM dynamic_array INTEGER,ALLOCATABLE : array(:) INTEGER : i,n=0,m READ *, m ALLOCATE(array(m) READ *,i DO WHILE (i.NE.-1) n=n+1 array(n)=i READ *,i,ENDDO PRINT *,data_number=,n PRINT *,(array(i),i=n,1,-1) END,DEALLOCATE(ARRAY) END,例1 輸入10個(gè)整數(shù),并按輸入時(shí)的逆序輸出,每行5個(gè)數(shù)。,PROGRAM MAIN IMPLICIT NONE INTEGER,DIMENSION(10):A READ*,A WRITE(*,(5I3) A(10:1:-1) END 或WRITE(*, (5I3) (A(I),I=10,1,-1),一批數(shù)據(jù)的處理引入數(shù)組,程序結(jié)構(gòu): 單位定義 說明所有數(shù)組 輸入數(shù)組 數(shù)組的處理 輸出數(shù)組 END,第五節(jié) 數(shù)組的應(yīng)用,蘇州科技大學(xué)計(jì)算中心,第八章 數(shù)組及應(yīng)用,輸入數(shù)據(jù):以行為主輸入 12 個(gè)矩陣數(shù)據(jù),每行輸入一個(gè)數(shù)據(jù): 12.5 23.8 54.2 78.9 92.4 45.3 0 24.4 84.2 32.8 72.8 43.2 輸出結(jié)果:輸出轉(zhuǎn)置后數(shù)組: 12.5 92.4 84.2 23.8 45.3 32.8 54.2 0.0 72.8 78.9 24.4 43.2,第五節(jié) 數(shù)組的應(yīng)用,使用隱含DO循環(huán)輸入輸出數(shù)組,蘇州科技大學(xué)計(jì)算中心,第八章 數(shù)組及應(yīng)用,輸入數(shù)據(jù):輸入 5 名學(xué)生的成績(jī),每行輸入多個(gè)成績(jī): 85,94,78,51,35 輸入第奇數(shù)個(gè)學(xué)生新成績(jī): 11,33,55 輸出結(jié)果: 5名學(xué)生的最新成績(jī)是: 11.0, 94.0, 33.0, 51.0, 55.0 更新前平均成績(jī)是: 68.60 更新后平均成績(jī)是: 48.80,REAL A(0:9,0:9) DO I=0,9 DO J=0,9 A(i,j)=SQRT(10.*I+J) ENDDO ENDDO WRITE(*,10)(I,I=0,9) 10 FORMAT(7X,10(I1,6x) DO I=0,9 WRITE(*,20)I,(A(I,J),J=0,9) 20 FORMAT(1X,I1,2X,10(F5.3,2X) ENDDO END,按如下格式打印100以內(nèi)整數(shù)的平方根表。,例計(jì)算N個(gè)測(cè)試數(shù)據(jù)的平均值和標(biāo)準(zhǔn)偏差。測(cè)試數(shù)據(jù)個(gè)數(shù)不定。 解:已知:N個(gè)測(cè)試數(shù)據(jù)data為:X1,X2,X3,Xn。從鍵盤輸入。實(shí)型。 求:平均值Xa和標(biāo)準(zhǔn)偏差Xs。實(shí)型。 平均值計(jì)算公式為: Xa=(X1+X2+X3+Xn)/N 標(biāo)準(zhǔn)偏差計(jì)算公式為:Xs= 測(cè)試數(shù)據(jù)用一個(gè)一維數(shù)組X表示,平均值用變量Xa表示,標(biāo)準(zhǔn)偏差用變量Xs表示。測(cè)試數(shù)據(jù)個(gè)數(shù)不確定,假設(shè)最大個(gè)數(shù)max為50,實(shí)際個(gè)數(shù)為N。從鍵盤輸入數(shù)據(jù),數(shù)據(jù)以非數(shù)值字符為結(jié)束標(biāo)志。 輸入數(shù)據(jù):25.32,18.35,44.78,57.39,85.2,A 輸出結(jié)果:測(cè)試數(shù)據(jù): 25.32 18.35 44.78 57.39 85.20 平均值 : 46.21 標(biāo)準(zhǔn)偏差: 26.74,例已知8個(gè)無序整數(shù),將這組整數(shù)由小到大(或由大到?。┡判颉?解:已知:無序整數(shù)A,數(shù)組,用DATA語(yǔ)句賦初值。數(shù)據(jù)個(gè)數(shù)為N,假定N=8。 求:將一組無序整數(shù)A從小到大排序。 采用選擇法排序?;舅枷耄簭牡?個(gè)數(shù)據(jù)起在N個(gè)待排序數(shù)據(jù)中選擇一個(gè)最小數(shù),將最小數(shù)與第1個(gè)數(shù)據(jù)交換,稱該步為第1趟排序;在從第2個(gè)數(shù)據(jù)起在剩余的N-1個(gè)數(shù)據(jù)中選擇一個(gè)次最小數(shù),將次最小數(shù)與第2個(gè)數(shù)據(jù)交換,稱該步為第2趟排序;依次類推,直到在從第N-1個(gè)數(shù)據(jù)起在剩余的2個(gè)數(shù)據(jù)中選擇一個(gè)較小數(shù),將較小數(shù)與第N-1個(gè)數(shù)據(jù)交換,稱該步為第N-1趟排序,直至排序任務(wù)完成,得到一組有序數(shù)據(jù)。 排序前數(shù)據(jù): 51 34 37 54 72 12 58 40 排序后數(shù)據(jù): 12 34 37 40 51 54 58 72,排序過程示意如圖所示。,a(1,1),a(1,2),.,a(1,p) . a(i,1),a(i,2),.,a(i,p) . a(m,1),a(m,2),.,a(m,p),b(1,1) b(1, j) b(1,n) b(2,1) b(2, j) b(2,n) . b(p,1) b(p, j) b(p,n),A矩陣(m*p),B矩陣(p*n),C(i, j)=a(i,1)*b(1, j)+a(i,2)*b(2, j)+a(i,p)*b(p, j),Sum=0 DO k = 1 , p A的列數(shù)或B的行數(shù) Sum = Sum + a(i, k) * b(k, j) ENDDO c(i, j) = Sum,i,j,例 矩陣乘法:(矩陣A和B相乘時(shí),A的列數(shù)應(yīng)和B的行數(shù)相等.),Sum=0 DO k = 1 , p A的列數(shù)或B的行數(shù) Sum = Sum + a(i, k) * b(k, j) ENDDO c(i, j) = Sum,DO i=1 , m DO j=1 , n,ENDDO ENDDO,a(1,1),a(1,2),.,a(1,p) . a(i,1),a(i,2),.,a(i,p) . a(m,1),a(m,2),.,a(m,p),b(1,1) b(1, j) b(1,n) b(2,1) b(2, j) b(2,n) . b(p,1) b(p, j) b(p,n),A矩陣(m*p),B矩陣(p*n),i,j,例 矩陣乘法:(矩陣A和B相乘時(shí),A的列數(shù)應(yīng)和B的行數(shù)相等.),楊輝三角形實(shí)際是由二項(xiàng)式(X+Y)n展開式各項(xiàng)的系數(shù)構(gòu)成,第i行就是(X+Y)i展開式的各項(xiàng)系數(shù)。從右圖可看出三角形中各元素的規(guī)律。除第一列和主對(duì)角線元素全為1外,其余元素是它的上行的前一列元素與上一行本列元素之和。如果將這些數(shù)看成一個(gè)10行10列的數(shù)組(上三角視為全零),i表示行,j表示列,則有,例:打印揚(yáng)輝三角,1 1 1 2 1 1 3 3 1 1 4 6 4 1 ,INTEGER,DIMENSION(10,10): A DO I=1,10 A(I,I)=1 A(I,1)=1 ENDDO DO I=3,10 DO J=2,I-1 A(I,J)=A(I-1,J-1)+A(I-1,J) ENDDO ENDDO DO K=1,10 WRITE(*,(10I6))(A(K,J),J=1,K) ENDDO END,例:打印揚(yáng)輝三角,1 1 1 2 1 1 3 3 1 1 4 6 4 1 ,注意打印格式,打印“魔幻方陣。魔幻方陣是指方陣的每一行、每一列、對(duì)角線元素之和均相等,其值為n(n2+1)/2,n代表方陣的行數(shù)和列數(shù)。一個(gè)n階奇數(shù)方陣由1到n2個(gè)自然數(shù)構(gòu)成。其組成規(guī)律是: (1)將1放在第1行的中間一列; (2)由1開始依次從左下到右上方向放連續(xù)數(shù),如m放在A(i,j),則m+1放在A(i-1,j+1); (3)如果i-1n,則j+1為1; (5)如果A(i-1,j+1)已放數(shù),則將數(shù)放在A(i+1,j)中。 以下是五階魔幻方陣: 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9,例:在一有序數(shù)列中,插入一數(shù),使插 PARAMETER(N=30) 入后的數(shù)列仍然有序. INTEGER A(N) A 3 , 5 , 11, 22, 28, 56, 76, 88 READ*,N1 X=45 READ*,(A(I),I=1,N1) 第一步,先找插入的位置P READ*,X P=1 P=1 DO WHILE(X.GT.A(P).AND.P.LE.N1) DO WHILE(X.GT.A(P).AND.P.LE.N1) P=P+1 P=P+1 END DO END DO 第二步,完成插入 DO I=N1,P,-1 DO I=N1,P,-1 A(I+1)=A(I) A(I+1)=A(I) END DO; A(P)=X END DO N1=N1+1 A(P)=X N1=N1+1 PRINT*,(A(I),I=1,N1) END,例:求二維數(shù)組的鞍點(diǎn),即該點(diǎn)在行上最小,列上最大。 求第I行最小元素的程序段為: Q=1 DO J=2,N IF(A(I,Q).GT.A(I,J)Q=J END DO 求第Q列最大元素的程序段為: P=1 DO K=2,M IF(A(P,Q).LT.A(K,Q)P=K END DO 如果P=I,說明元素A(P,Q)是鞍點(diǎn),Subroutine sub(a,m,n,l) Logical :L=.FALSE. Real a(m,n) Integer p,q Do I=1,m Q=1 DO J=2,N IF(A(I,Q).GT.A(I,J)Q=J END DO P=1 DO K=2,M IF(A(P,Q).LT.A(K,Q)P=K END DO If(p.eq.I)then print*, p,q,是鞍點(diǎn) L=.true. End do End Subroutine sub,例如:輸入一個(gè)45的矩陣,求其鞍點(diǎn) Parameter(m=4,n=5) Real,dimension(m:n):a Logical:L=.false. Read*,(a(I,j),j=1,5),I=1,4) !按行輸入 Call sub(a,m,n,L) If(.not.L)print*,沒有鞍點(diǎn) end,例 1,第五節(jié) 數(shù)組的應(yīng)用,選擇排序法的原理很簡(jiǎn)單,步驟如下: 1)找出全部N個(gè)數(shù)據(jù)中最小的一個(gè),把它和數(shù)列的第1個(gè)數(shù)字交換位置。 2)找出剩下N1個(gè)數(shù)據(jù)中最小的一個(gè),把它和數(shù)列的第2個(gè)數(shù)字交換位置。 3)找出剩下N2個(gè)數(shù)據(jù)中最小的一個(gè),把它和數(shù)列的第3個(gè)數(shù)字交換位置。 4),一直做到只剩下一個(gè)數(shù)據(jù)為止 。 下面以3 ,2, 5 ,1,4這組數(shù)字闡述選擇排序法的排序過程:,例 1,第一輪掃描 3,2, 5,1,4,發(fā)現(xiàn)1最小,把它跟第1個(gè)數(shù)字交換位置,數(shù)據(jù)變成1,3,2, 5,4。,第二輪掃描 掃描的數(shù)據(jù)為剩下的3,2, 5,4,發(fā)現(xiàn)2最小,把它跟第2個(gè)數(shù)字交換位置,數(shù)據(jù)變成1,2,3,5,4。,第三輪掃描 掃描的數(shù)據(jù)為剩下的3,5,4,發(fā)現(xiàn)3最小,把它跟第3個(gè)數(shù)字交換位置,數(shù)據(jù)變成1,2,3,5,4。,第四輪掃描 掃描的數(shù)據(jù)為剩下的5,4,發(fā)現(xiàn)4最小,把它跟第4個(gè)數(shù)字交換位置,數(shù)據(jù)變成1,2,3,4,5。,PARAMETER(N=5) INTEGER A(N),TEMP DATA A/3,2,5,1,4/ DO I=1, N MIN=A(I) DO J=11, N IF(MINA(J)THEN TEMP=A(J) A(J)=A(I) A(I)=TEMP MIN=A(I) ENDIF ENDDO ENDDO PRINT*,A END,! 暫時(shí)令A(yù)(I)是最小值,! 發(fā)現(xiàn)A(I)不是最小,! 把A(I)、A(J) 這兩個(gè)數(shù)值交換,例 1,第五節(jié) 數(shù)組的應(yīng)用,冒泡排序法的步驟: 1)從第1個(gè)數(shù)字開始,依序把兩個(gè)相鄰的數(shù)值互相比較大小。如果前一個(gè)數(shù)字比后一個(gè)數(shù)字大,就把它們的位置互相交換。 2)一直做到每一對(duì)相鄰的數(shù)字都比較過后才結(jié)束這一輪的工作。 3)回到第1步,再做下一循環(huán)的比較。如果有N個(gè)數(shù)字要排序,就需要重復(fù)N1次的掃描工作。 下面以3 ,2,5 ,1,4這組數(shù)字闡述冒泡排序的過程:,例 1,第一輪掃描:,經(jīng)過第一輪掃描后,會(huì)找出最大的數(shù)值5,并把它放在數(shù)值的最后面。 第二輪掃描:,在第二輪掃描中,可以不去比較數(shù)列的最后一個(gè)數(shù)字,因?yàn)樵诘谝惠喼?,就已?jīng)確定它是數(shù)列中的最大數(shù)值。如果硬是要比較的話,仍然可以排列出正確的結(jié)果,只不過會(huì)降低程序效率。在這一輪掃描中,可以找出數(shù)列的第2大數(shù)值,并且把它放在數(shù)列的倒數(shù)第2個(gè)位置上。,例 1,第三輪掃描:,這一輪中,不需再比較3,4的大小,因?yàn)樵谏弦惠喼?,就已?jīng)確立了43的事實(shí)。因?yàn)?是數(shù)列中第2大的數(shù)字,而最大的數(shù)字又已經(jīng)排在4的后面。同樣地,在這一輪掃描中,確立了數(shù)列的第3大數(shù)值是3,并且把它安置在數(shù)列的倒數(shù)第3個(gè)位置上。 第四輪掃描:,雖然表面上看起來已經(jīng)排序完畢,但是還是要經(jīng)過這一輪的掃描后才能確定。因?yàn)樵谶@次掃描后才會(huì)確定數(shù)列的第4大數(shù)值。而找出第4大數(shù)值后,因?yàn)榭偣仓挥?個(gè)數(shù)字,最小的數(shù)值也會(huì)跟著找出來,排序結(jié)束。 可以由上面的過程看到,冒泡排序法可以想像成是讓重的東西向下沉,輕的東西向上浮。等到狀態(tài)穩(wěn)定,就會(huì)得到排序結(jié)果。,PARAMETER(N=5) INTEGER A(N),TEMP DATA A/3,2,5,1,4/ DO I=N-1, 1, -1 DO J=1, I IF(A(J)A(J+1)THEN TEMP=A(J) A(J)=A(J+1) A(J+1)=TEMP ENDIF ENDDO ENDDO PRINT*,A END,! 開始做N1次的掃描,! 一對(duì)一對(duì)的來比較,I之后的數(shù)字不用比較,! 如果A(J)A(J+1)就把這兩個(gè)數(shù)值交換,例 1,49,38,65,97,13,76,27,49,第五節(jié) 數(shù)組的應(yīng)用,49,38,65,97,13,76,27,49,例 1,38,49,65,97,13,76,27,49,例 1,38,49,65,97,13,76,27,49,例 1,38,49,65,97,13,76,27,49,例 1,38,49,65,97,13,76,27,49,例 1,38,49,65,76,13,97,27,49,例 1,38,49,65,76,13,97,27,49,例 1,38,49,65,76,97,13,27,49,例 1,38,49,65,76,97,13,27,49,例 1,38,49,65,76,27,13,97,49,例 1,38,49,65,76,27,13,97,49,例 1,38,49,65,76,27,13,49,97,例 1,38,49,65,76,27,13,49,97,例 1,DO j=1, n-1 if (a(j)a(j+1) then 交換 a(j),a(j+1) end if ENDDO,38,49,65,76,27,13,49,97,38,49,65,76,27,13,49,例 1,38,49,65,76,27,13,49,97,38,49,65,76,27,13,49,例 1,38,49,65,76,27,13,49,97,38,49,65,76,27,13,49,例 1,38,49,65,76,27,13,49,97,38,49,65,76,27,13,49,例 1,38,49,65,76,27,13,49,97,38,49,65,76,27,13,49,例 1,38,49,65,76,27,13,49,97,38,49,65,13,27,76,49,例 1,38,49,65,76,27,13,49,97,38,49,65,13,27,76,49,例 1,38,49,65,76,27,13,49,97,38,49,65,13,76,27,49,例 1,38,49,65,76,27,13,49,97,38,49,65,13,76,27,49,例 1,38,49,65,76,27,13,49,97,38,49,65,13,49,27,76,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論