CODE: [font=Courier New]
數(shù)組的定義與引用
兩種變量:標量+數(shù)組。標量維數(shù)為0,數(shù)組維數(shù)>=1。
1. 數(shù)組的定義
類型相同的一組標量數(shù)據(jù)的有序集合
數(shù)組元素類型必須相同,這些元素按某種確定方式排列
與數(shù)學上的聯(lián)系
一維數(shù)組:向量(列向量或行向量)
二維數(shù)組:矩陣
數(shù)組的參數(shù)
o 數(shù)組的維數(shù)(dimension):最小為1,最大為7
o 數(shù)組的維長(extent):某一維中元素的個數(shù),可以為0
維長由 維下界:維上界 指定,等于維上界-維下界+1
維下界省略時為默認值1
維上界必須大于維下界的值
維界值可以是正、負、零或任何整型表達式
o 數(shù)組的大小(size):所有元素的個數(shù),等于各維長的乘積,可以為0
o 數(shù)組的形狀(shape):取決于維數(shù)與每一維的維長,可由函數(shù)shape得到
例:
數(shù)組A(10,3,2)的維數(shù)為3,維長分別為10、3、2,大小為10×3×2=60,形狀為10乘3乘2,或表示成(10,3,2),shape(A)的結果是一維數(shù)組,其元素為10,3,2。
數(shù)組B(2,2,0)的第三維維長為0,因而大小為0,不能用于存儲任何數(shù)據(jù)。
數(shù)組C(2, 0:9, -3:-1, int(-sqrt(45./3.)):int(5/2))為4維數(shù)組,大小為2×10×3×6。
數(shù)組聲明:
o real A(10,2,3) ! 類型說明
o dimension A(10,2,3) ! dimension語句
o allocatable B(:,:) ! allocatable語句
o pointer C(:,:,:) ! pointer語句
o real, dimension(2,5):: D ! 類型說明中的dimension屬性
o real, allocatable:: E(:,:,:) ! 類型說明中的allocatable屬性
o real, pointer:: F(:,:) ! 類型說明中的pointer屬性
聲明時數(shù)組的維數(shù)必須指定的,大小和形狀是否需要指定視數(shù)組的形式而定
2. 數(shù)組的引用
o 數(shù)組名 :數(shù)組中所有元素,無下標
o 數(shù)組元素:數(shù)組中某個元素,指定所有下標
o 數(shù)組片段:數(shù)組中若干元素,不需連續(xù)或遵循某個規(guī)則,指定部分下標列表,本身也是數(shù)組
引用時數(shù)組的下標必須用逗號隔開
引用下標的個數(shù)要和聲明的數(shù)組的維數(shù)一致
下標是整型表達式,可正、可負、也可為0,但必須在引用的數(shù)組的維界之內(nèi)
例: real A(3,3),B(3,3),C(89),R
B(2,2)=4.5; R=7.O; C(int(R)*2+1)=2.O !給元素B(2,2)和C(15)賦值
A(1,2)=B(int(C(15)),int(sqrt(R))) !元素A(1,2)和元素B(2,2)的值相同
real A(2,3,4),則A(1,2,3)是數(shù)組元素,而A(1:2,2,2),A(1,1,4:2:-1),A(1,2:3,(/2,4/))都是數(shù)組片段
數(shù)組的下標列表有兩種:三元下標和向量下標。
o 三元下標[下界]:[上界][:步長]:用三個值分別代表數(shù)組片段的下界,上界和步長,以上升或下降的順序指定數(shù)組元素。
若省略下(上)界,缺省值為數(shù)組相應維的下(上)維界
若上下界全省略,缺省片段為這個維的全長
三元下標的值可以不在數(shù)組的邊界以內(nèi)
三元下標只能算一個下標
對多維數(shù)組的數(shù)組片段,每一維都可以用三元下標來聲明
在語句或過程中引用數(shù)組片段時,引用下標的個數(shù)必須與聲明時的相同
若省略步長,缺省值為1。
步長不能是0。當步長為負值時,數(shù)組子片段從上界開始遞減至下界
例:real A(10)
A(1:5:2)=3.0 !把元素A(1),A(3),A(5)置為3.0
A(:5:2)=3.O !把元素A(1),A(3),A(5)置為3.0,因為缺省下界為1
A(2::3)=3.O !把元素A(2),A(5),A(8)置為3.0,因為上界缺省值為10
A(7:9)=3.0 !把元素A(7),A(8),A(9)置為3.0,因為缺省步長為1
A(:)=3.0 !和A=3.0相同,將A的所有元素置為3.0
real B(10)
數(shù)組片段B(9:2:-2)是由元素B(9),B(7),B(5)和B(3)組成的數(shù)組。
數(shù)組片段B(3:15:6)是由B(3)和B(9)組成的數(shù)組。 REAL A(5,9)則A(1:4:3,6:8:2)=3.0
等價于
A(1,6) A(1,8)
A(4,6) A(4,8)
o 向量下標:利用一個一維整數(shù)數(shù)組(即向量)來指定數(shù)組元素
向量下標的值應該在定義的邊界之內(nèi)
向量下標可以有多個重復的值,此時數(shù)組片段稱為多對一數(shù)組片段
例: real A(10),B(5,5)
integer I(4),J(3)
I=(/5,3,8,2/) !定義向量I
J=(/3,1,5/) !定義向量J
A(I)=3.O !設置元素A(5),A(3),A(8),A(2)的值
B(2,J)=3.O !設置元素B(2,3),B(2,1)和B(2,5)的值
integer :: a(4)=(/0,1,2,3/),b(3)=(/1,4,3/),則a(b)與a同類型,與b同形狀,取值為(/0,3,2/)
a(b)可以不是數(shù)組片段,而是更大的數(shù)組。如上面b為(/2,3,2,3,2,3/)時,a(b)為(/1,2,1,2,1,2/)
character(1) :: symbol(0:1)=(/'F','M'/)
integer :: bit(100)
若bit的元素列為0001101100111...,則symbol(bit)是用{F,M}字符構成的100字節(jié)的字符型數(shù)組FFFMMFMMFFMMM...。
real A(3,3),B(4)
integer K(4)
K=(/3,1,1,2/) !K矢量有重復值
A=5.0 !設置A的所有元素
B=A(3,K) !數(shù)組片段B由下列元素組成:A(3,3),A(3,1),A(3,1),A(3,2)
因為在B(4)或A(3,K)中有重復的元素A(3,1),所以它是多對一數(shù)組片段。一個多對一數(shù)組片段不能出現(xiàn)在賦值語句的左端[/font]