Fortran 学习手记——数组篇

Part I: 数组定义
1. Fortran最大支持7维的数组;
2. 定义数组大小的参数可以是数字或者常数(parameter),但不可以是变量;
3. 定义数组的几种形式:
       (1) integer a(10,10)               !最简单的方法
       (2) integer, dimension(10,10):: a  ! 另外一种做法
       (3) integer a                      ! 先声明a是整型
           dimension a(10,10)             ! 然后在声明是大小为10的数组
4. Fortran数组与C 语言数组存放顺序的差异(以 a (3,2)为例):
   C语言的二维数组(先行后列):  a(1,1) a(1,2) a(2,1) a(2,2) a(3,1) a(3,2) 
   Fortran的二维数组(先列后行):a(1,1) a(2,1) a(3,1) a(1,2) a(2,2) a(3,2) 
5. C语言中的数组下标是从0开始,而Fortran语言的数组下标可以自己定义,比如:
   integer a(-3:3) !定义了一个包括7个整数的一维数组,下标从-3开始,至3结束
   integer a(5,-1:3) ! 定义了一个5行5列的二维数组,第一维的下标自1至5,第二维的下标自-1至3

Part II: 赋初值
1. DATA语句赋初值
   integer :: a(5)
   DATA a /1,2,3,4,5/  
   或者 DATA a/5*3/ (表示前5个元素均设为3)
   或者 integer I
        DATA (a(I), I=2,4) /1,3,6/ (表示a(2)=1,a(3)=3,a(4)=6)
    在二维数组中引用隐循环的格式如下:
      integer :: a(10,10)
      integer :: i,j
      DATA ((a(i,j),i=1,2),j=1,2) /1,2,3,4/
2. 采用隐式循环,无DATA语句的赋值
   integer :: a(5)=(/(i,i=1,5)/)
    注意,省略DATA直接把初值写在声明后面时,不能像使用DATA时一样,可以用隐含式循环对数组中的部分元素设置初值,而是每个元素都必须给定初值,即
    integer :: a(5)=(/(2,i=2,4)/) 就是错的,正确的定义应该为:integer :: a(5)=(/1,(2,i=2,4),5/)
3. 对整个数组的赋值
    integer :: a(5)
    a=3   ! 数组中的每个元素都赋值为3
    a=(/1,2,2,2,5/) ! a(1)到a(5)分别赋值为1,2,2,2,5;注意,等号右边提供的数字必须跟数组a的大小相等
    a=b   ! 用相同大小的数组b为a提供初值
    a=b+c  ! 用两个相同大小的数组b和c之和为a提供初值
    a=b>c  ! a, b, c为三个相同大小的数组,不过数组a为逻辑型数组,数组b和c为相同类型的数值变量,其结果就是,如果相同位置上的b的元素大于c的元素,那么相同位置上a就为true,否则就是false
4. 对部分数组的赋值
   a(3:5)=5  ! 将a(3),a(4),a(5)均赋值为5,其余不变
   a(3:)=5   ! 将a(3)以后的元素均赋值为5,此前的不变
   a(3:5)=(/1,2,3/), a(:)=b(:,2)

猜你喜欢

转载自blog.csdn.net/u014357799/article/details/79886228