陣列可以存儲(chǔ)相同類型的元件的固定大小的連續(xù)集合。數(shù)組是用于存儲(chǔ)數(shù)據(jù)的集合,但是認(rèn)為一個(gè)陣列的相同類型的變量的集合是往往更為有用。
所有陣列由連續(xù)存儲(chǔ)單元。最低的地址對(duì)應(yīng)于第一元件和最高地址的最后一個(gè)元素。
數(shù)字(1) | 號(hào)(2) | 數(shù)(3) | 號(hào)(4) | ... |
數(shù)組可以是一維的(如向量),二維(如矩陣)和Fortran允許您創(chuàng)建多達(dá)7維數(shù)組。
數(shù)組聲明為維度屬性。
例如,要聲明一個(gè)一維數(shù)組命名編號(hào),包含5個(gè)元素的實(shí)數(shù),你寫的,
real, dimension(5) :: numbers
陣列的各個(gè)元件通過(guò)指定其下標(biāo)被引用。數(shù)組的第一元件具有一個(gè)的下標(biāo)。數(shù)組編號(hào)包含五個(gè)實(shí)變量 - 值(1),數(shù)字(2),數(shù)字(3),數(shù)字(4),和數(shù)字(5)。
要?jiǎng)?chuàng)建一個(gè)名為矩陣整數(shù)5×5二維數(shù)組,你寫的:
integer, dimension (5,5) :: matrix
你也可以用聲明一些明確的下限,例如一個(gè)數(shù)組:
real, dimension(2:6) :: numbers integer, dimension (-3:2,0:4) :: matrix
您可以將值分配給各個(gè)成員一樣,
numbers(1) = 2.0
或者,你可以使用一個(gè)循環(huán),
do i=1,5 numbers(i) = i * 2.0 end do
一維數(shù)組元素可以直接分配使用短手形符號(hào),被稱為數(shù)組構(gòu)造,如價(jià)值觀,
numbers = (/1.5, 3.2,4.5,0.9,7.2 /)
請(qǐng)注意,不存在允許的括號(hào)“(”和背面斜杠“/”之間的空間
例
下面的例子演示了上面討論的概念。
program arrayProg real :: numbers(5) !one dimensional integer array integer :: matrix(3,3), i , j !two dimensional real array !assigning some values to the array numbers do i=1,5 numbers(i) = i * 2.0 end do !display the values do i = 1, 5 Print *, numbers(i) end do !assigning some values to the array matrix do i=1,3 do j = 1, 3 matrix(i, j) = i+j end do end do !display the values do i=1,3 do j = 1, 3 Print *, matrix(i,j) end do end do !short hand assignment numbers = (/1.5, 3.2,4.5,0.9,7.2 /) !display the values do i = 1, 5 Print *, numbers(i) end do end program arrayProg
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
2.00000000 4.00000000 6.00000000 8.00000000 10.0000000 2 3 4 3 4 5 4 5 6 1.50000000 3.20000005 4.50000000 0.899999976 7.19999981
下表給出了一些陣列相關(guān)的術(shù)語(yǔ):
術(shù)語(yǔ) | 含義 |
---|---|
秩 | 它是尺寸數(shù)組具有的數(shù)目。例如,對(duì)于在陣列命名矩陣,秩是2,和對(duì)于該陣列命名號(hào),等級(jí)為1。 |
程度 | 它是沿著一維的元素的數(shù)量。例如,陣列數(shù)有程度5和命名矩陣陣列具有在兩個(gè)維度程度3。 |
形狀 | 陣列的形狀是一維整數(shù)數(shù)組,包含在每一維的元素(的程度)的數(shù)量。例如,對(duì)于在陣列基質(zhì),形狀為(3,3)和數(shù)組編號(hào)是(5)。 |
尺寸 | 它是一個(gè)數(shù)組包含的元素?cái)?shù)量。為陣列矩陣,它是9,和用于陣列的數(shù)字,它是5。 |
你可以傳遞一個(gè)數(shù)組一個(gè)過(guò)程作為參數(shù)。下面的例子演示了這個(gè)概念:
program arrayToProcedure implicit none integer, dimension (5) :: myArray integer :: i call fillArray (myArray) call printArray(myArray) end program arrayToProcedure subroutine fillArray (a) implicit none integer, dimension (5), intent (out) :: a ! local variables integer :: i do i = 1, 5 a(i) = i end do end subroutine fillArray subroutine printArray(a) integer, dimension (5) :: a integer::i do i = 1, 5 Print *, a(i) end do end subroutine printArray
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
1 2 3 4 5
在上面的例子中,子程序fillArray和printArray只能與維5.陣列稱為然而,為了編寫可用于任何大小的陣列子程序,則可以使用以下技術(shù)重寫:
program arrayToProcedure implicit none integer, dimension (10) :: myArray integer :: i interface subroutine fillArray (a) integer, dimension(:), intent (out) :: a integer :: i end subroutine fillArray subroutine printArray (a) integer, dimension(:) :: a integer :: i end subroutine printArray end interface call fillArray (myArray) call printArray(myArray) end program arrayToProcedure subroutine fillArray (a) implicit none integer,dimension (:), intent (out) :: a ! local variables integer :: i, arraySize arraySize = size(a) do i = 1, arraySize a(i) = i end do end subroutine fillArray subroutine printArray(a) implicit none integer,dimension (:) :: a integer::i, arraySize arraySize = size(a) do i = 1, arraySize Print *, a(i) end do end subroutine printArray
請(qǐng)注意,該程序正在使用尺寸函數(shù)獲取陣列的大小。
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
1 2 3 4 5 6 7 8 9 10
到目前為止,我們已經(jīng)提到了整個(gè)數(shù)組,F(xiàn)ortran語(yǔ)言提供了一種簡(jiǎn)單的方法來(lái)指多個(gè)元素,或陣列的部分,使用一個(gè)單獨(dú)的語(yǔ)句。
訪問(wèn)的陣列部分中,需要提供的下限和上限的部分,以及一個(gè)步幅(增量),對(duì)于所有的尺寸。這種表示法被稱為下標(biāo)三元組:
array ([lower]:[upper][:stride], ...)
當(dāng)沒(méi)有下限和上限被提及,它默認(rèn)為你聲明的跨越和邁進(jìn)值默認(rèn)為1。
下面的例子演示了這個(gè)概念:
program arraySubsection real, dimension(10) :: a, b integer:: i, asize, bsize a(1:7) = 5.0 ! a(1) to a(7) assigned 5.0 a(8:) = 0.0 ! rest are 0.0 b(2:10:2) = 3.9 b(1:9:2) = 2.5 !display asize = size(a) bsize = size(b) do i = 1, asize Print *, a(i) end do do i = 1, bsize Print *, b(i) end do end program arraySubsection
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
5.00000000 5.00000000 5.00000000 5.00000000 5.00000000 5.00000000 5.00000000 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.50000000 3.90000010 2.50000000 3.90000010 2.50000000 3.90000010 2.50000000 3.90000010 2.50000000 3.90000010
Fortran的90/95提供了一些固有的程序。它們可分為7類。
更多建議: