Fortran数组

您所在的位置:网站首页 fortran最大数组范围 Fortran数组

Fortran数组

2023-08-17 07:27| 来源: 网络整理| 查看: 265

Fortran数组

数组可以存储相同类型的元件的固定大小的连续集合。数组是用来存储数据的集合,但它往往是更加有用认为数组为相同类型的变量的集合。

所有数组由连续的存储单元。最低的地址对应于所述第一元件和所述最高地址的最后一个元素。

Numbers(1) Numbers(2) Numbers(3) Numbers(4) …

数组可以是一维的(如向量),二维(如矩阵),Fortran允许最多创建7维数组。

声明数组

数组的尺寸属性声明。

例如,声明含有5个元素的实数的一个一维阵列命名号编写,

real, dimension(5) :: numbers

数组的各个元素通过指定其下标引用。数组的第一元件具有一个的下标。数组数字包含五个实变量- numbers(1), numbers(2), numbers(3), numbers(4), 和numbers(5)。

要创建一个5×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 数组相关某些术语

下表给出了一些阵列相关的术语:

术语 意思 Rank 它的尺寸数组具有的数目。例如,对于数组命名矩阵,秩为2,并且对数组命名号,秩为1。 Extent 它是沿一维中的元素的数量。例如,阵列数字具有范围5和命名矩阵阵列具有在两个维度范围3。 Shape 数组的形状是一维整数数组,包含在每一维的元素(程度)的数量。例如,对于数组基质,形状为(3,3)和数组数字它是(5)。 Size 它是元素的数组中包含的数量。对于数组矩阵,它是9,而对于数字阵列,其为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类。

向量和矩阵乘法

还原

查询

结构

重塑

处理

位置



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3