Fortran第7章2_第1頁
Fortran第7章2_第2頁
Fortran第7章2_第3頁
Fortran第7章2_第4頁
Fortran第7章2_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Visual Fortran 90 程序設(shè)計(jì)7.4.3 對對數(shù)組進(jìn)行操作的內(nèi)在函數(shù)數(shù)組進(jìn)行操作的內(nèi)在函數(shù) Fortran90提供了豐富的數(shù)組操作函數(shù),但它們的提供了豐富的數(shù)組操作函數(shù),但它們的函數(shù)值可函數(shù)值可以是數(shù)組,但不一定全是數(shù)組。以是數(shù)組,但不一定全是數(shù)組。(1)函數(shù)值個數(shù))函數(shù)值個數(shù)2,函數(shù)值一定為數(shù)組函數(shù)值一定為數(shù)組(2)函數(shù)值個數(shù))函數(shù)值個數(shù)=1,一般,一般函數(shù)值不是數(shù)組,函數(shù)值不是數(shù)組, 但但maxloc、minloc、shape函數(shù)值是數(shù)組函數(shù)值是數(shù)組 1 1、SIZESIZE( (數(shù)組名數(shù)組名,DIM=n),DIM=n) 求數(shù)組大小求數(shù)組大小( (數(shù)組元素的總數(shù)數(shù)組元素的總數(shù)

2、) )2 2、MAXVALMAXVAL( (數(shù)組名數(shù)組名,DIM=n,MASK=,DIM=n,MASK=數(shù)組邏輯表達(dá)式數(shù)組邏輯表達(dá)式) 求數(shù)組的最大值元素求數(shù)組的最大值元素3 3、MINVALMINVAL( (數(shù)組名數(shù)組名,DIM=n,MASK=,DIM=n,MASK=數(shù)組邏輯表達(dá)式數(shù)組邏輯表達(dá)式) 求數(shù)組的最小值元素求數(shù)組的最小值元素4 4、MAXLOCMAXLOC( (數(shù)組名數(shù)組名,DIM=n,MASK=,DIM=n,MASK=數(shù)組邏輯表達(dá)式數(shù)組邏輯表達(dá)式) 求數(shù)組的最大值元素位置求數(shù)組的最大值元素位置5 5、MINLOCMINLOC( (數(shù)組名數(shù)組名,DIM=n,MASK=,DIM=n,

3、MASK=數(shù)組邏輯表達(dá)式數(shù)組邏輯表達(dá)式) 求數(shù)組的最小值元素位置求數(shù)組的最小值元素位置6、 SUM(數(shù)組名數(shù)組名,DIM=n,MASK=數(shù)組邏輯表達(dá)式數(shù)組邏輯表達(dá)式) 求數(shù)組各元素之和求數(shù)組各元素之和常用數(shù)組內(nèi)在函數(shù)常用數(shù)組內(nèi)在函數(shù) MAXLOCMAXLOC、MINLOCMINLOC函數(shù)值一定是數(shù)組函數(shù)值一定是數(shù)組選項(xiàng)的作用:選項(xiàng)的作用:1 1、DIM=nDIM=n選中哪一維來求函數(shù)值選中哪一維來求函數(shù)值 DIM=可省略不寫可省略不寫 2、 MASK=數(shù)組邏輯表達(dá)式數(shù)組邏輯表達(dá)式起屏蔽作用起屏蔽作用 凡滿足條件的元素求其函數(shù)值,凡滿足條件的元素求其函數(shù)值, 不滿足條件的元素則被屏蔽在外。不滿足

4、條件的元素則被屏蔽在外。例如:例如: SUM(A) SUM(A,2) SUM(A,MASK=A0) SUM(B,1,MASK=B0)選項(xiàng)選項(xiàng)1: DIM=1:選中行維,分別按列求和:選中行維,分別按列求和 DIM=2:選中列維,分別按行求和:選中列維,分別按行求和 DIM=3:選中頁維,分別按行列求和:選中頁維,分別按行列求和選項(xiàng)選項(xiàng)2:凡滿足條件的元素求和凡滿足條件的元素求和 沒有滿足沒有滿足MASK條件的元素時,結(jié)果為條件的元素時,結(jié)果為0A中每列大于中每列大于0的元的元素之和素之和,函數(shù)值是數(shù)函數(shù)值是數(shù)組組A中大于中大于0的所有元的所有元素之和素之和,函數(shù)值不是函數(shù)值不是數(shù)組數(shù)組INTE

5、GER,DIMENSION(1:2,1:3):A1 2 34 5 6121 2 3INTEGER,DIMENSION(1:2,1:3,1:2):B1 2 34 5 67 8 910 11 12 1 28 10 1214 16 18例例1:閱讀下列程序,寫出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果PROGRAM mainIMPLICIT NONEINTEGER,DIMENSION(2,3,2):MINTEGER,DIMENSION(2,2):SM=RESHAPE(/1,2,3,4,5,6,7,8,9,1,&2,3/),(/2,3,2/)S=SUM(M,2,MASK=M3)PRINT*,SEN

6、D 程序閱讀方法:程序閱讀方法:利用數(shù)組邏輯結(jié)利用數(shù)組邏輯結(jié)構(gòu),跟蹤處理結(jié)構(gòu),跟蹤處理結(jié)果果答案:答案:5 10 16 8 16 8函數(shù)值是函數(shù)值是數(shù)組數(shù)組按列序輸按列序輸出出練習(xí)練習(xí)1:閱讀下列程序,寫出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果PROGRAM mainIMPLICIT NONEINTEGER,DIMENSION(2,-1:1,2):aINTEGER:ia= RESHAPE(/(i, i=1,12)/),(/2,3,2/)print*, sum(a,3)end答案:答案:8 10 12 14 16 18程序閱讀方法:程序閱讀方法:利用數(shù)組邏輯結(jié)利用數(shù)組邏輯結(jié)構(gòu),跟蹤處理結(jié)構(gòu),跟蹤處

7、理結(jié)果果例例:INTEGER,DIMENSION(2,3):A size(a) size(a,DIM=1) size(a,2) 函數(shù)值均不是數(shù)組函數(shù)值均不是數(shù)組DIM=1:選中行維選中行維,表求每一列的大小表求每一列的大小(行數(shù)行數(shù));DIM=2:選中列維選中列維,表求每一行的大小表求每一行的大小(列數(shù)列數(shù))。例例: INTEGER,DIMENSION(2,3):A MAXVAL(A) MAXVAL(A,2) MAXVAL(A,1,MASK=A2)DIM=1:選中行維選中行維,求每列的最大值求每列的最大值DIM=2:選中列維選中列維,求每行的最大值求每行的最大值函數(shù)值不是函數(shù)值不是數(shù)組數(shù)組函數(shù)

8、值是數(shù)組函數(shù)值是數(shù)組例:例:INTEGER,DIMENSION(2,3):A INTEGER,DIMENSION(2):B A= RESHAPE(/1,2,6,3,4,5/),(/2,3/) B=MAXLOC(A,A3)PRODUCT(A, 2, A3) 數(shù)組內(nèi)在函數(shù)數(shù)組內(nèi)在函數(shù)(續(xù)續(xù)) 8 8、 shape ( (數(shù)組名數(shù)組名) ) 求數(shù)組的形狀求數(shù)組的形狀 形狀:各維維長的序列形狀:各維維長的序列 判定維數(shù),求各維維長判定維數(shù),求各維維長d2-d1+1 函數(shù)值為數(shù)組函數(shù)值為數(shù)組 數(shù)組內(nèi)在函數(shù)數(shù)組內(nèi)在函數(shù)(續(xù)續(xù)) 練習(xí)練習(xí)2:閱讀下列程序,寫出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果IMPLIC

9、IT NONEINTEGER,DIMENSION(0:1,-1:1,2):):MINTEGER,DIMENSION(3):AM=RESHAPE(/1,2,3,4,5,6,7,8,9,&1,2,3/),),(/2,3,2/)A= SHAPE(M)PRINT*,AEND答案:答案:2 3 2例例2:閱讀下列程序,寫出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果PROGRAM MAINIMPLICIT NONEINTEGER,DIMENSION(3):MINTEGER,DIMENSION(1):AM=(/1,2,3/)A= SHAPE(M)PRINT*,AEND函數(shù)值為數(shù)組函數(shù)值為數(shù)組同同MAXLO

10、CMAXLOC、MINLOCMINLOC答案:答案: 3練習(xí)練習(xí)3:閱讀下列程序,寫出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果PROGRAM mainINTERFACESUBROUTINE S(b)INTEGER,DIMENSION(:,:):bEND SUBROUTINEENDINTERFACEINTEGER,DIMENSION(2,3):aa=RESHAPE(/1,2,3,4,5,6/),(/2,3/)Call s(a)EndSUBROUTINE S(b)INTEGER,DIMENSION(:,:):bPrint*,shape(b); End答案:答案: 2 3假定形狀數(shù)組:假定形狀數(shù)組:調(diào)用

11、時形狀取調(diào)用時形狀取對應(yīng)實(shí)元的形對應(yīng)實(shí)元的形狀狀9 9、 DOT_PRODUCT ( (數(shù)組名數(shù)組名1, 1, 數(shù)組名數(shù)組名2)2) 求兩個求兩個同形狀同形狀的的一維數(shù)組一維數(shù)組(向量)的點(diǎn)積(向量)的點(diǎn)積 點(diǎn)積:點(diǎn)積:REALREAL,DIMENSION(3):aDIMENSION(3):aREALREAL,DIMENSION(0:2):bDIMENSION(0:2):bDOT_PRODUCT (a,b): a(1)(a,b): a(1)* *b(0)+a(2)b(0)+a(2)* *b(1)+a(3)b(1)+a(3)* *b(2)b(2) 對應(yīng)位置相乘再相加對應(yīng)位置相乘再相加 數(shù)組內(nèi)在函

12、數(shù)數(shù)組內(nèi)在函數(shù)(續(xù)續(xù)) 練習(xí)練習(xí)4:閱讀下列程序,寫出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果PROGRAM MAINIMPLICIT NONEINTEGER(2),DIMENSION(:),ALLOCATABLE:A,BINTEGER(2):CALLOCATE(A(1:5),B(1:5)A=(/1,2,3,4,5/);B=(/5,4,3,2,1/)C=DOT_PRODUCT(A,B)WRITE(*,FMT=(I5)CEND答案:答案:35程序閱讀方法:程序閱讀方法:利用數(shù)組邏輯結(jié)利用數(shù)組邏輯結(jié)構(gòu),跟蹤處理結(jié)構(gòu),跟蹤處理結(jié)果果1010、 UBOUND(數(shù)組名(數(shù)組名,DIM=n) LBOUND(數(shù)

13、組名(數(shù)組名,DIM=n) 求數(shù)組中維的上下界求數(shù)組中維的上下界 DIM=1DIM=1:選定:選定行行維,求維,求行行維界維界 DIM=2DIM=2:選定:選定列列維,求維,求列列維界維界 DIM=3DIM=3:選定:選定頁頁維,求維,求頁頁維界維界 數(shù)組內(nèi)在函數(shù)數(shù)組內(nèi)在函數(shù)(續(xù)續(xù)) 練習(xí)練習(xí)5 5、單項(xiàng)選擇題、單項(xiàng)選擇題若數(shù)組說明語句為:若數(shù)組說明語句為:REAL,DIMENSION(-2:2,-4:4, -3:3):aREAL,DIMENSION(-2:2,-4:4, -3:3):a則則UBOUNDUBOUND(a ,DIM=2)a ,DIM=2)的值是的值是_。A. 2 B. 4 C.

14、9 D. 3A. 2 B. 4 C. 9 D. 3答案:答案:B 其它函數(shù):參見附錄其它函數(shù):參見附錄2虛元的種類:只能為變量名、數(shù)組名、過程名。虛元的種類:只能為變量名、數(shù)組名、過程名。 7.6.4 數(shù)組作為虛元數(shù)組作為虛元 復(fù)習(xí):虛元為變量名復(fù)習(xí):虛元為變量名 1 1、對應(yīng)的實(shí)元可為同類型的變量名、常量或表達(dá)、對應(yīng)的實(shí)元可為同類型的變量名、常量或表達(dá)式、數(shù)組元素式、數(shù)組元素2 2、虛實(shí)結(jié)合規(guī)則:、虛實(shí)結(jié)合規(guī)則:傳送地址傳送地址,虛元、實(shí)元共享同,虛元、實(shí)元共享同一存儲單元一存儲單元復(fù)習(xí):虛元為子程序名復(fù)習(xí):虛元為子程序名 1 1、對應(yīng)的實(shí)元可為同類型的固有函數(shù)名、對應(yīng)的實(shí)元可為同類型的固有

15、函數(shù)名、 外部過程名外部過程名2 2、虛實(shí)結(jié)合規(guī)則:、虛實(shí)結(jié)合規(guī)則:等價等價,虛,虛子程序子程序用實(shí)用實(shí)子程序子程序替代替代虛元為數(shù)組名虛元為數(shù)組名 1 1、對應(yīng)的實(shí)元可為同類型的數(shù)組名、數(shù)組元素、對應(yīng)的實(shí)元可為同類型的數(shù)組名、數(shù)組元素名、數(shù)組片段。名、數(shù)組片段。注意:對應(yīng)數(shù)組的維數(shù)、維界可以不同注意:對應(yīng)數(shù)組的維數(shù)、維界可以不同2 2、虛實(shí)結(jié)合規(guī)則:、虛實(shí)結(jié)合規(guī)則:傳送地址傳送地址1 1、當(dāng)、當(dāng)虛實(shí)都為虛實(shí)都為數(shù)值型或邏輯型數(shù)值型或邏輯型數(shù)組名數(shù)組名時:時:實(shí)數(shù)組實(shí)數(shù)組將第一個元素的地址將第一個元素的地址傳送給虛數(shù)組的第一個傳送給虛數(shù)組的第一個元素,元素,由于數(shù)組在內(nèi)存連續(xù)存放,其它元素按內(nèi)

16、存順序結(jié)由于數(shù)組在內(nèi)存連續(xù)存放,其它元素按內(nèi)存順序結(jié)合(二維為合(二維為列序列序)注意:在虛實(shí)結(jié)合時,虛參數(shù)數(shù)組的最后一個元素注意:在虛實(shí)結(jié)合時,虛參數(shù)數(shù)組的最后一個元素必須落在實(shí)參數(shù)數(shù)組的范圍內(nèi),否則將會出現(xiàn)意必須落在實(shí)參數(shù)數(shù)組的范圍內(nèi),否則將會出現(xiàn)意想不到的錯誤。想不到的錯誤。虛實(shí)結(jié)合傳送地址的方式虛實(shí)結(jié)合傳送地址的方式1 例:下標(biāo)不同時的對應(yīng)關(guān)系:例:下標(biāo)不同時的對應(yīng)關(guān)系:PROGRAM MAIN1REAL,DIMENSION(1:8):ACALL SUB1(A)END PROGRAM MAIN1SUBROUTINE SUB1(B)REAL,DIMENSION(-1:5):BEND SU

17、BROUTINE SUB1主程序主程序A(1)A(2)A(3)A(4)A(5)A(6)A(7)A(8)存儲單元存儲單元子程序子程序B(-1)B(0)B(1)B(2)B(3)B(4)B(5)例:維數(shù)不同時的對應(yīng)關(guān)系:例:維數(shù)不同時的對應(yīng)關(guān)系:PROGRAM MAIN2REAL,DIMENSION(1:3,2:4):ACALL SUB2(A)END PROGRAM MAIN2SUBROUTINE SUB2(B)REAL,DIMENSION(0:8):BEND SUBROUTINE SUB2 主程序主程序A(1,2)A(2,2)A(3,2)A(1,3)A(2,3)A(3,3)A(1,4)A(2,4)

18、A(3,4)存儲單元存儲單元子程序子程序B(0)B(1)B(2)B(3)B(4)B(5)B(6)B(7)B(8)例例1:閱讀下列程序,寫出運(yùn)行結(jié)果閱讀下列程序,寫出運(yùn)行結(jié)果INTEGER,DIMENSION(2,3):AA=RESHAPE(/1,2,3,4,5,6/),(/2,3/)CALL S(A)PRINT*,AENDSUBROUTINE S(B)INTEGER,DIMENSION(4):BB=B+1END 實(shí)元為數(shù)組名實(shí)元為數(shù)組名答案:答案:2 3 4 5 5 6對應(yīng)數(shù)組對應(yīng)數(shù)組的維數(shù)、的維數(shù)、維界可以維界可以不同不同程序閱讀方法:程序閱讀方法:利用數(shù)組邏輯結(jié)利用數(shù)組邏輯結(jié)構(gòu),跟蹤處理結(jié)

19、構(gòu),跟蹤處理結(jié)果果練習(xí)練習(xí)1 1:閱讀下列程序,寫出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果INTEGER,DIMENSION(3,3):AA=RESHAPE(/1,2,3,4,5,6,7,8,9/),(/3,3/)CALL S(A)PRINT*,AENDSUBROUTINE S(B)INTEGER,DIMENSION(2,2):BB=B+1END 答案:答案:2 3 4 5 5 6 7 8 9元素按列元素按列序結(jié)合序結(jié)合2 2、當(dāng)虛元為數(shù)組名,實(shí)元為數(shù)組元素時:、當(dāng)虛元為數(shù)組名,實(shí)元為數(shù)組元素時:實(shí)數(shù)組將實(shí)數(shù)組將指定的數(shù)組元素的地址指定的數(shù)組元素的地址傳送給虛數(shù)組的第傳送給虛數(shù)組的第一個元素,一

20、個元素,其它元素按內(nèi)存順序結(jié)合(二維為其它元素按內(nèi)存順序結(jié)合(二維為列序列序)虛實(shí)結(jié)合傳送地址的方式虛實(shí)結(jié)合傳送地址的方式2 例:實(shí)參數(shù)是數(shù)組元素時的對應(yīng)關(guān)系:例:實(shí)參數(shù)是數(shù)組元素時的對應(yīng)關(guān)系:PROGRAM MAIN3REAL,DIMENSION(1:8):ACALL SUB3(A(4)END PROGRAM MAIN3SUBROUTINE SUB3(B)REAL,DIMENSION(0:3):BEND SUBROUTINE SUB3主程序主程序A(1)A(2)A(3)A(4)A(5)A(6)A(7)A(8)存儲單元存儲單元子程序子程序B(0)B(1)B(2)B(3)例例2:閱讀下列程序,寫

21、出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果INTEGER,DIMENSION(2,3):AA=reshape(/1,2,3,4,5,6/),(/2,3/)CALL S(A(2,1)PRINT*,AENDSUBROUTINE S(B)INTEGER,DIMENSION(2,2):BB=B+1END 實(shí)元為數(shù)組元素名實(shí)元為數(shù)組元素名答案:答案: 1 3 4 5 6 6 3 3、當(dāng)虛元為數(shù)組名,實(shí)元為數(shù)組片段時:、當(dāng)虛元為數(shù)組名,實(shí)元為數(shù)組片段時: 數(shù)組片段構(gòu)成一個新的數(shù)組數(shù)組片段構(gòu)成一個新的數(shù)組 新的實(shí)數(shù)組將第一個元素的地址新的實(shí)數(shù)組將第一個元素的地址傳送給虛數(shù)組的傳送給虛數(shù)組的第一個元素,第一個元素

22、, 其它元素按內(nèi)存順序結(jié)合(二維為列序)其它元素按內(nèi)存順序結(jié)合(二維為列序)虛實(shí)結(jié)合傳送地址的方式虛實(shí)結(jié)合傳送地址的方式3 例例3:閱讀下列程序,寫出運(yùn)行結(jié)果:閱讀下列程序,寫出運(yùn)行結(jié)果INTEGER,DIMENSION(3,3):AA=reshape(/1,4,7,2,5,8,3,6,9/), (/3,3/)CALL S(A(3:2:-1,1:2)ENDSUBROUTINE S(X)INTEGER,DIMENSION(4):XPRINT*,XEND實(shí)元為數(shù)組實(shí)元為數(shù)組片段片段形成新數(shù)組形成新數(shù)組虛數(shù)組可為假定大小數(shù)組和可調(diào)數(shù)組等多種情況。虛實(shí)結(jié)合方虛數(shù)組可為假定大小數(shù)組和可調(diào)數(shù)組等多種情況。

23、虛實(shí)結(jié)合方式同常界數(shù)組式同常界數(shù)組答案:答案: 7 4 8 5 如函數(shù)值為數(shù)組如函數(shù)值為數(shù)組, ,主調(diào)程序中主調(diào)程序中必須寫接口塊必須寫接口塊例例1:1:假設(shè)有兩個形狀相同(假設(shè)有兩個形狀相同(3 3行行4 4列)的數(shù)組列)的數(shù)組A A和和B B,編寫求,編寫求A+BA+B的函數(shù)子程序,并把的函數(shù)子程序,并把A+BA+B的值作為函數(shù)值。的值作為函數(shù)值。分析:函數(shù)子程序的傳入數(shù)據(jù)分析:函數(shù)子程序的傳入數(shù)據(jù)數(shù)組數(shù)組A A和和B B 函數(shù)子程序的傳出數(shù)據(jù)函數(shù)子程序的傳出數(shù)據(jù)數(shù)組數(shù)組C=A+BC=A+B補(bǔ)充補(bǔ)充 數(shù)組可作為函數(shù)過程的函數(shù)值數(shù)組可作為函數(shù)過程的函數(shù)值 Function f(a,b)res

24、ult(c)Implicit noneInteger,dimension(3,4):a,b,cC=a+bEndProgram mainImplicit noneInterface Function f(a,b)result(c) Implicit none Integer,dimension(3,4):a,b,c endendinterfaceInteger,dimension(3,4):a,b,cInteger:I,J;read*,a;read*,bC=f(a,b)Do I=1,3Print*,(c(I,j),j=1,4)Enddo; end函數(shù)值函數(shù)值為數(shù)組為數(shù)組主調(diào)程主調(diào)程序必須序必須寫

25、接口寫接口數(shù)組中寫接口塊數(shù)組中寫接口塊: :函數(shù)值為數(shù)組函數(shù)值為數(shù)組; ;假定形狀數(shù)組假定形狀數(shù)組7.7數(shù)組的應(yīng)用舉例數(shù)組的應(yīng)用舉例 一、累加和算法一、累加和算法 算法復(fù)習(xí):算法復(fù)習(xí):重復(fù)執(zhí)行重復(fù)執(zhí)行S S新新=S=S原原+ +通項(xiàng)通項(xiàng) 循環(huán)編程步驟:循環(huán)編程步驟:A A、重復(fù)語句、重復(fù)語句 B B、選擇、選擇DODO結(jié)構(gòu)結(jié)構(gòu) C C、循環(huán)初值的確定、循環(huán)初值的確定 數(shù)組累加和算法數(shù)組累加和算法 1 1、元素法:、元素法: 算法:算法:重復(fù)執(zhí)行重復(fù)執(zhí)行S S新新=S=S原原+ +元素通項(xiàng)元素通項(xiàng) 元素通項(xiàng):元素通項(xiàng): 一維一維AA(I I) 二維二維AA(I I,J J)例例1 1: 輸入輸入

26、1010個整數(shù),計(jì)算其累加和。個整數(shù),計(jì)算其累加和。 一批數(shù)一批數(shù)據(jù)的處據(jù)的處理引入理引入數(shù)組數(shù)組PROGRAM MAINIMPLICIT NONEINTEGER,DIMENSION(10):AINTEGER:I,SREAD*,A程序結(jié)構(gòu):程序結(jié)構(gòu):單位定義單位定義說明所有數(shù)組說明所有數(shù)組輸入數(shù)組輸入數(shù)組數(shù)組的處理數(shù)組的處理輸出數(shù)組輸出數(shù)組單位結(jié)束語句單位結(jié)束語句元素法元素法Print*,SEND S=S+A(I)S=0DO I=1,10ENDDO閱讀程序閱讀程序驗(yàn)證驗(yàn)證練習(xí)練習(xí)1 1、求、求2 23 3二維數(shù)組的所有元素之和二維數(shù)組的所有元素之和INTEGER,DIMENSION(2,3):

27、ADO I=1,2READ(*,*)(A(I,J),J=1,3)ENDDOS=0DO I=1,2 DO J=1,3 S=S+A(I,J) ENDDOENDDOPRINT*,S; END元素法元素法2 2、調(diào)用內(nèi)在數(shù)組函數(shù):、調(diào)用內(nèi)在數(shù)組函數(shù):SUMSUM求累加和求累加和INTEGER,DIMENSION(2,3):AINTEGER:SDO I=1,2 READ(*,*)(A(I,J),J=1,3)ENDDOS=sum(A)PRINT*,S END函數(shù)法函數(shù)法練習(xí)練習(xí)2 2:求:求5 56 6數(shù)組的每行元素之和數(shù)組的每行元素之和元素法元素法二重循環(huán)設(shè)計(jì)思想:先外后內(nèi),逐層細(xì)化二重循環(huán)設(shè)計(jì)思想:先

28、外后內(nèi),逐層細(xì)化DO I=1,5求第求第I I行的和行的和ENDDO求第求第I I行的和行的和S(i)S(i)S(i)=0DO J=1,6 S(i)=S(i)+A(I,J)ENDDO引入引入2個數(shù)組個數(shù)組閱讀程序閱讀程序驗(yàn)證驗(yàn)證 INTEGER,Dimension(5,6): AINTEGER,Dimension(5): sINTEGER:I,J DO I=1,5 Read(*,*)(A(I,J),J=1,6) ENDDODO I=1,5ENDDO ;PRINT*,S;END初值位置初值位置S(I)=0DO J=1,6 S(I)=S(I)+A(I,J)ENDDO求第求第I行行的和的和S(i)閱

29、讀程序閱讀程序驗(yàn)證驗(yàn)證求求5 56 6數(shù)組的每行元素之和數(shù)組的每行元素之和函數(shù)法函數(shù)法1、INTEGER,DIMENSION(5):SS=sum(a,DIM=2)2、INTEGER,DIMENSION(5):SDO I=1,5 S(I)=sum(a(I,1:6)ENDDO 函數(shù)值為數(shù)函數(shù)值為數(shù)組組二、求最大(小)值及其位置二、求最大(?。┲导捌湮恢?算法復(fù)習(xí):算法復(fù)習(xí): 引入變量,存放最大值元素及其位置引入變量,存放最大值元素及其位置 A A、賦初值(常用第一個元素或最小值)、賦初值(常用第一個元素或最小值) B B、所有元素與、所有元素與最大值最大值比較比較 例例2 2:輸入輸入1010個整

30、數(shù),求個整數(shù),求最大值及其最大值的序號。最大值及其最大值的序號。1 1、元素法:、元素法: 算法:一批數(shù)據(jù)引入數(shù)組算法:一批數(shù)據(jù)引入數(shù)組A A存放存放 引入引入BIGBIG存放最大值存放最大值 K K分別存放最大值的序號分別存放最大值的序號 A A、BIG=ABIG=A(1 1);); K=1K=1 B B、所有元素與最大值比較、所有元素與最大值比較循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 循環(huán)體:通項(xiàng)循環(huán)體:通項(xiàng)元素元素A A(I I)與最大值比較)與最大值比較 比較:比較:IFIF結(jié)構(gòu)實(shí)現(xiàn)結(jié)構(gòu)實(shí)現(xiàn) 利用數(shù)組求最大(?。┲导捌湮恢茫豪脭?shù)組求最大(小)值及其位置:PROGRAM MAINIMPLICIT NONEI

31、NTEGER,DIMENSION(10):AINTEGER:I,K,BIGREAD*,ABIG=A(1);K=1DO I=1,10IF(A(I)BIG)THEN BIG=A(I); K=IENDIFEnddoPrint*,BIG,K; END !見例7-14 例7-18二維數(shù)組元素法元素法IF(A(I)BIG)BIG=A(I)K=I閱讀程閱讀程序序驗(yàn)證驗(yàn)證2 2、調(diào)用內(nèi)在數(shù)組函數(shù):、調(diào)用內(nèi)在數(shù)組函數(shù):MAXVALMAXVAL、MAXLOCMAXLOCPROGRAM MAINIMPLICIT NONEINTEGER,DIMENSION(10):AINTEGER,DIMENSION(1):KINT

32、EGER:I,BIGREAD*,ABIG=MAXVAL(A)K=MAXLOC(A)Print*,BIG,K; ENDMAXLOC函數(shù)函數(shù)值一定是數(shù)組值一定是數(shù)組INTEGER,Dimension(5,6):ADOI=1,5Read(*,*)(A(I,j),j=1,6)ENDDODoI=1,5Amax=A(I,1);N=1Doj=1,6If(a(I,j)Amax)THENAmax=A(I,j)N=jendifENDDOwrite(*,*)Amax,NENDDOEND練習(xí)練習(xí)3 3:輸入:輸入5 56 6的矩陣,求出每行的最大值的矩陣,求出每行的最大值及其所在的列號。及其所在的列號。調(diào)用內(nèi)在數(shù)組函

33、數(shù)法調(diào)用內(nèi)在數(shù)組函數(shù)法: :INTEGER,DIMENSION(5):AMAX,NAMAX=MAXVAL(A,2)N=MAXLOC(A,2)1 1、用數(shù)組片段、用數(shù)組片段: : 引入一維數(shù)組引入一維數(shù)組C C C=A C=A(K,:);A(K,:)=A(1,:);A(1,:)=CK,:);A(K,:)=A(1,:);A(1,:)=C2 2、用元素循環(huán):、用元素循環(huán):引入簡單變量引入簡單變量T T, 交換交換A A(1 1,J J)與)與A A(K K,J J) 三、交換數(shù)組的兩行(第一行與第三、交換數(shù)組的兩行(第一行與第K行)行)交換第交換第J列的列的兩個元素兩個元素 DO J=1 DO J=

34、1,N N T=A T=A(1 1,J J) A A(1 1,J J)=A=A(K K,J J) A A(K K,J J)=T=T ENDDO ENDDO四、篩選有序置數(shù)四、篩選有序置數(shù) 例例3 3:將數(shù)組:將數(shù)組A A中能被中能被3 3整除的數(shù),有序保存到數(shù)組整除的數(shù),有序保存到數(shù)組B B中,中,輸出輸出B B。算法:只能用元素篩選法算法:只能用元素篩選法順序比較順序比較 1 1、從第一個元素開始比較、從第一個元素開始比較 如滿足篩選條件,保存到數(shù)組如滿足篩選條件,保存到數(shù)組B B的指定位置的指定位置 否則,下一個元素比較否則,下一個元素比較 2 2、 B B的位置有序變化的位置有序變化 引

35、入位置變量引入位置變量K K 初值初值: K=1: K=1 有序變化有序變化:K=K+1:K=K+1 IMPLICIT NONEINTEGER,DIMENSION(20):):A,BINTEGER:K,IREAD*,AK=1DO I=1,20 IF(MOD(A(I),),3)=0)THEN B(K)=A(I) K=K+1 ENDIFENDDOPRINT*,(,(B(i),),i=1,K-1)END !例!例7-16合并數(shù)組合并數(shù)組B大小同大小同A當(dāng)前當(dāng)前K中無值中無值有序:引入有序:引入變量變量K=1 K=K+1在A(1)到A(N)中求最小值的位置K,交換A(1)與A(K).在A(2)到A(N

36、)中求最小值的位置K,交換A(2)與A(K).在A(N-1)到A(N)中求最小值的位置K,交換A(N-1)與A(K). 例例4: 4: 輸入輸入N N個數(shù)個數(shù)(N100),(N100),要求按從小到大的要求按從小到大的順序重新加以排列順序重新加以排列. .五、排序五、排序 選擇排序法選擇排序法循環(huán)體循環(huán)體:A(I):A(I)到到A(N)A(N)中求中求K,K,交換交換A(I)A(I)與與A(K)A(K)排序次數(shù)排序次數(shù)I=1,2N-1I=1,2N-1重復(fù):循環(huán)結(jié)構(gòu)重復(fù):循環(huán)結(jié)構(gòu) 假設(shè)假設(shè)N=20PROGRAMS2INTEGER,PARAMETER:N=20INTEGER,DIMENSION(N

37、):AREAD(*,*)(A(I),),I=1,N)WAI:DOI=1,N-1排序次數(shù):排序次數(shù):N-1次次第第I次排序次排序K=INEI:DOJ=I+1,NIF(A(J)A(J)THENQ=A(I);A(I)=A(J);A(J)=QENDIFENDDONEIENDDOWAIWRITE(*,*)AEND!第!第154頁頁閱讀程序閱讀程序驗(yàn)證驗(yàn)證 基本思想:基本思想: 若對若對N N個數(shù)據(jù)按遞增排序:個數(shù)據(jù)按遞增排序:第一遍石沉大海:從第一遍石沉大海:從A A(1 1)-A-A(N N)兩兩比較)兩兩比較 如如A A(1 1)AA(2 2),交換兩數(shù),否則不變),交換兩數(shù),否則不變 ; 如如A

38、A(2 2) A A(3 3) ,交換兩數(shù),否則不變;,交換兩數(shù),否則不變; 如如A A(N-1N-1) A A(N N),交換兩數(shù),否則不變。),交換兩數(shù),否則不變。重復(fù)重復(fù)N-1N-1次排完次排完, ,或某一輪未發(fā)生交換排完。或某一輪未發(fā)生交換排完。石沉大海、冒泡排序法石沉大海、冒泡排序法 programS3INTEGER,parameter:N=30REAL,Dimension(N):ARead(*,*)(A(I),I=1,N)DoI=1,N-1 最多最多N-1次次石石沉大海沉大海第第I次次石沉大海石沉大海DoJ=1,N-1IF(A(J)A(J+1)THENQ=A(J);A(J)=A(J

39、+1);A(J+1)=QENDIFENDDOENDDOwrite(*,*)AENDIP=0IP=1IP為標(biāo)志變量,無交換為標(biāo)志變量,無交換IP=0,有交換,有交換IP=1每輪掃描開始時每輪掃描開始時IP=0。IF(IP=0)EXIT 兩種方法:兩種方法: 1 1、順序查找;、順序查找; 2 2、折半查找。、折半查找。 例例5:輸入輸入N個數(shù),從中查找某個指定的數(shù)。個數(shù),從中查找某個指定的數(shù)。六、查找六、查找 1順序查找順序查找 將一組數(shù)存入一維數(shù)組將一組數(shù)存入一維數(shù)組A A中,待查找數(shù)存入變量中,待查找數(shù)存入變量X X中,中,把把X X與與A A數(shù)組中的元素,數(shù)組中的元素,從頭到尾逐一比較從頭

40、到尾逐一比較, ,查找查找X X的值的值在在A A數(shù)組中是否存在。數(shù)組中是否存在。 設(shè)設(shè)N=30N=30INTEGER,Parameter:N=30INTEGER:A(N)INTEGER:X,IP,IRead(*,*)(A(I),I=1,N)Read(*,*)xIP=0IP為標(biāo)志變量,為標(biāo)志變量,未找到未找到IP=0,找到,找到IP=1開始時開始時IP=0。DoI=1,NIF(X=a(i)ThenWrite(*,*)a(i),i;IP=1EXITENDIFENDDO IF(IP=0)PRINT*,X, NO FINDEND!也可見例!也可見例7-13 只能對只能對有序數(shù)據(jù)有序數(shù)據(jù)進(jìn)行查找,假設(shè)

41、數(shù)據(jù)按升序排進(jìn)行查找,假設(shè)數(shù)據(jù)按升序排好后放在數(shù)組好后放在數(shù)組A A中,待查數(shù)據(jù)放在中,待查數(shù)據(jù)放在X X中。步驟如下:中。步驟如下:引入變量引入變量toptop查找區(qū)間起點(diǎn)查找區(qū)間起點(diǎn) botbot查找區(qū)間終點(diǎn)查找區(qū)間終點(diǎn)(1 1)MID=MID=(top+bottop+bot)/2/2查找區(qū)間中點(diǎn)查找區(qū)間中點(diǎn)(2 2)比較)比較a a(midmid)與)與x x 相等,表示已找到相等,表示已找到 不等,區(qū)間縮短一半不等,區(qū)間縮短一半重復(fù),直至找到或重復(fù),直至找到或topbottopbot終止。終止。技巧:引入標(biāo)志變量技巧:引入標(biāo)志變量p=.true.p=.true.表示找到表示找到 p=.

42、false.p=.false.表示找不到表示找不到2. 折半查找法折半查找法(對分查找)(對分查找) 例例6 6:設(shè):設(shè)5050個數(shù)據(jù)已按升序排列存放于數(shù)組個數(shù)據(jù)已按升序排列存放于數(shù)組A A中。中。X X為待查找的數(shù)。為待查找的數(shù)。TOPTOP和和BOTBOT分別表示查找區(qū)間的端點(diǎn),分別表示查找區(qū)間的端點(diǎn),MIDMID為查找為查找區(qū)間的中點(diǎn),邏輯變量區(qū)間的中點(diǎn),邏輯變量P P為標(biāo)志變量。為標(biāo)志變量。logical:pInteger,parameter:n=50Integer,dimension(n):aINTEGER:X,TOP,BOT,MIDRead*,aread(*,*)xp=.false.;top=1;bot=nDOwhile(top=bot.and.not.p)取 區(qū) 間 中取 區(qū) 間 中點(diǎn)點(diǎn)區(qū)間縮小一半?yún)^(qū)間縮小一半mid=(top+bot)/2if(x=a(mid)thenp=.true.;write(*,*)x,midelseif(xa(mid)thenbot=mid1elsetop=mid+1endifenddoIf(.not.p)print*,x,notfind end!見例!見例7-170 .120 .110 .100 .

溫馨提示

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

最新文檔

評論

0/150

提交評論