Fortran中的数组

! 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ADreamClusive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值