! Fortran中的数组
! 注意: 默认情况下数组下标从 1 开始,在fortran中数组是列优先的
program helloworld
implicit none
! 1 -------一维到多维数组声明及赋值
! 为了在变量上区分,这里我简单规定,
! 如a_1_2,a为变量名,1为维度,2为声明数组使用的第几种方法
integer :: i ! 用于循环
! ------------一维声明-----------------
integer :: a_1_1(4) = 11
integer, dimension(4) :: a_1_2(4) = (/1, 2, 3, 4/) ! 声明时赋初值
integer :: a_1_3
dimension :: a_1_3(4) ! 第三种方式比较古老,不建议使用
integer :: a_1_4(0:4)
! 下面这种声明方式可以使用a(-3) a(-2) ... a(3)这7个元素
!integer :: a_1_4(-3:3)
! ------------二维声明-----二维同样有4种方法,不一一罗列------------
integer :: a_2_1(2, 2) ! 维度之间使用逗号隔开
! ------------多维数组-----最多可以声明高达7维的数组--
integer :: a_n_1(2,2,2,&
2,2,2,2)
! ------------动态数组---
integer, allocatable :: a_dynamic(:) ! 括号中的 : 号表示一维
! ============================分割线==========================
! 2 ------可以在数组声明的时候赋值,亦可以在以后赋值
print *, 'a_1_1 :', a_1_1
print *, 'a_1_2 :', a_1_2
!a_1_3 = 1 !---如果初始值都相同,可以直接赋值
DATA a_1_3 /3, 4, 5, 6/ ! 通过data关键字
!DATA a_1_4 /5*9/ ! 5个元素均赋值为9
!a_1_4 = (/4, 5, 6, 7, 8/)
! -- 隐式声明
DATA (a_1_4(i), i=2,4)/6, 6, 6/
! 二维数组赋值
a_2_1 = reshape((/2, 2, 3, 3/), (/2, 2/))
a_2_1(2,2) = 5 ! 单独对特定位置赋值
a_2_1(:,1) = a_1_1(1:2) ! 从其他数组或变量赋值
a_n_1 = 2
a_n_1(1,1,1,1,1,1,:) = a_1_1(2:3)
print *, 'a_1_3 :', a_1_3
print *, 'a_1_4 :', a_1_4
print *, 'a_2_1 :', a_2_1
print *, 'a_n_1 :'
print '(1x, I2, 1x, I2)', a_n_1
! 3 ----数组四则运算---加减乘除操作及要求类似,以加为例-----
print *, 'a_1_1 + a_1_2 = ', a_1_1 + a_1_2 ! 同维度可以直接相加减
! 不同维度采用循环
do i=1, 4 ! 这里我直接将结果放入第一个数组,也可以放入新的变量
a_1_1(i) = a_1_1(i) + a_1_2(i)
end do
print *, 'a_1_1 :', a_1_1
! 4 ----数组的其他操作---
! 到这里 a_1_1 的值为: 12 13 14 15
! a_1_2 : 1 2 3 4
! where是Fortran 95添加的对数组进行整体或部分操作的新功能,
! 但不同的是,可以经过逻辑判断来使用数组的一部分元素
where (a_1_2>2)
a_1_1 = a_1_2
end where
print *, 'a_1_1 :', a_1_1
! forall同where一样也是Fortran世界的95, forall的内部实现是并行的(这点可以自行验证)
forall(i=1:4)
a_1_1(i) = i + 10
end forall
print *, 'a_1_1 :', a_1_1
! 5 --------动态数组----
! 使用时先分配空间
allocate( a_dynamic(10))
forall(i=1:10)
a_dynamic(i) = i * i
end forall
print *, 'a_dynamic : ', a_dynamic
! 结束时释放空间
if (allocated(a_dynamic)) then
deallocate(a_dynamic)
end if
end program helloworld
Fortran中的数组
最新推荐文章于 2024-08-05 18:44:20 发布