
- Fortran 教程
- Fortran - 首頁
- Fortran - 概述
- Fortran - 環境設定
- Fortran - 基本語法
- Fortran - 資料型別
- Fortran - 變數
- Fortran - 常量
- Fortran - 運算子
- Fortran - 決策
- Fortran - 迴圈
- Fortran - 數字
- Fortran - 字元
- Fortran - 字串
- Fortran - 陣列
- Fortran - 動態陣列
- Fortran - 派生資料型別
- Fortran - 指標
- Fortran - 基本輸入輸出
- Fortran - 檔案輸入輸出
- Fortran - 過程
- Fortran - 模組
- Fortran - 本質函式
- Fortran - 數值精度
- Fortran - 程式庫
- Fortran - 程式設計風格
- Fortran - 除錯程式
- Fortran 資源
- Fortran - 快速指南
- Fortran - 有用資源
- Fortran - 討論
Fortran - 陣列
陣列可以儲存固定大小的同類型元素的順序集合。陣列用於儲存資料集合,但通常將其視為相同型別變數的集合更有用。
所有陣列都由連續的記憶體位置組成。最低地址對應於第一個元素,最高地址對應於最後一個元素。
Numbers(1) | Numbers(2) | Numbers(3) | Numbers(4) | … |
陣列可以是一維的(如向量),二維的(如矩陣),Fortran 允許您建立最多 7 維的陣列。
宣告陣列
陣列使用dimension屬性宣告。
例如,要宣告一個名為 number 的一維陣列,包含 5 個實數元素,您可以編寫:
real, dimension(5) :: numbers
陣列的各個元素透過指定其下標來引用。陣列的第一個元素的下標為 1。陣列 numbers 包含五個實數變數 –numbers(1)、numbers(2)、numbers(3)、numbers(4) 和 numbers(5)。
要建立一個名為 matrix 的 5 x 5 的二維整數陣列,您可以編寫:
integer, dimension (5,5) :: matrix
您還可以宣告一個具有某些顯式下界的陣列,例如:
real, dimension(2:6) :: numbers integer, dimension (-3:2,0:4) :: matrix
賦值
您可以為各個成員賦值,例如:
numbers(1) = 2.0
或者,您可以使用迴圈:
do i =1,5 numbers(i) = i * 2.0 end do
一維陣列元素可以使用簡寫符號(稱為陣列構造器)直接賦值,例如:
numbers = (/1.5, 3.2,4.5,0.9,7.2 /)
請注意,括號‘(’和反斜槓‘/’之間不允許有空格
示例
以下示例演示了上面討論的概念。
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
當以上程式碼編譯並執行時,會產生以下結果:
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
一些與陣列相關的術語
下表給出了一些與陣列相關的術語:
術語 | 含義 |
---|---|
秩 | 它是陣列的維數。例如,對於名為 matrix 的陣列,秩為 2,對於名為 numbers 的陣列,秩為 1。 |
範圍 | 它是沿一個維度元素的數量。例如,陣列 numbers 的範圍為 5,名為 matrix 的陣列在兩個維度上的範圍都為 3。 |
形狀 | 陣列的形狀是一個一維整數陣列,包含每個維度中元素的數量(範圍)。例如,對於陣列 matrix,形狀為 (3, 3),對於陣列 numbers,形狀為 (5)。 |
大小 | 它是陣列包含的元素數量。對於陣列 matrix,它是 9,對於陣列 numbers,它是 5。 |
將陣列傳遞給過程
您可以將陣列作為引數傳遞給過程。以下示例演示了該概念:
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
當以上程式碼編譯並執行時,會產生以下結果:
1 2 3 4 5
在上面的示例中,子程式 fillArray 和 printArray 只能被維度為 5 的陣列呼叫。但是,要編寫可用於任何大小陣列的子程式,您可以使用以下技術重寫它:
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
請注意,程式使用size函式獲取陣列的大小。
當以上程式碼編譯並執行時,會產生以下結果:
1 2 3 4 5 6 7 8 9 10
陣列節
到目前為止,我們已經參考了整個陣列,Fortran 提供了一種簡單的方法來使用單個語句引用多個元素或陣列的一部分。
要訪問陣列節,您需要為所有維度提供節的下界和上界以及步長(增量)。此表示法稱為下標三元組:
array ([lower]:[upper][:stride], ...)
當沒有提及下界和上界時,它預設為您宣告的範圍,步長值預設為 1。
以下示例演示了該概念:
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
當以上程式碼編譯並執行時,會產生以下結果:
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 類。