!数组:最多可以定义七维
!数组的定义
!1.用dimension语句定义数组
dimension 数组名(下标下界:下标上界,) !如无特殊声明,类型按I-N规则来确定
dimension a(3,5)
integer a
!2.用类型说明语句定义数组
类型符 数组名(下标下界:下标上界,...)
real a(1:10)
!3.同时使用dimension语句和类型说明语句定义数组
类型符,dimension(下标下界:下标上界,...)
integer dimension(10):: w(2,3)
!给数组赋初值
!1.使用数组赋值符赋初值
数组名=(/取值列表/)
integer a(5)
a=(/2,3,4,5,6/)
print*,a
end
!2.用data语句给数组赋初值
data 数组名/常量表/,数组名/常量表/,...
integer a(5),b(4)
data a/1,2,3,34,5/
data b/4*5/ !*表示数据的重复
!对数组的操作
!1.对数组元素的操作
数组名(下标,...)
integer a(2,2)
a(1,1)=10
!2.数组的整体操作
integer b(5)
b=3 !所有元素都赋值为3
!3.数组局部引用
integer a(6)
a(1:6:2)=3 !三原表达式:初值:终值:步长
!4.where命令:取出部分数组的内容
integer a(5),b(5)
data a/1,2,3,4,5/
where(a>3) !将a中大于3的元素赋值给对应的b数组元素
b=a
end where
!当程序模块只有一个可执行语句时,可将这个语句写在where后面,省略endwhere
where(a>3) b=a
!配合elsewhere
where(a>3)
b=1
else where
b=2
end where
!where可做多重判断
where()
...
elsewhere()
...
elsewhere
...
endwhere
!where可以被嵌套使用
where()
...
where()
...
elsewhere
...
endwhere
elsewhere
...
endwhere
!forall命令:用隐含循环来引用数组
forall(表达式1,表达式2,...,条件)
...
endforall
integer:: a(5)
forall(i=1:5)
a(i)=i
endforall
!可以在forall中使用where,但不能在where中使用forall
!数组的保存规则
!1.一维数组的保存规则
!2.二维数组的保存规则(按照列存放的)
!3.三维数组的保存规则(看成多页相同结构的二维表格构成,第三个下标值表示页号;按照页的顺序存放)
!数组的输入和输出
!1.用do循环结构输入输出数组
integer a(10)
do i=1,10
read*,a(i)
enddo
do j=1,10
print*,a(j)
enddo
end
!二维
integer b(2,3)
do i=1,2
do j=1,3
read*,b(i,j)
enddo
enddo
do k=1,3
do l=1,2
print*,b(l,k)
enddo
enddo
end
!2.用隐含do循环输入输出数组
integer a(10)
read*,(a(i),i=1,10)
print*,(a(j),j=1,10)
!二维
integer a(2,3)
read*,((a(i,j),j=1,3),i=1,2)
print*,((a(k,l),k=1,2),l=1,3)
!3.用数组名作为输入输出项
integer a(10)
read*,a
print 10,a
10 format(1x,10i5)
!动态数组
[类型说明符,] allocatable:: 数组名(:,:,...),... !冒号表示维数
!或者
[类型说明符,] dimension(:,:,...),allocatable:: 数组名,...
!用allocate语句分配相应存储空间,确定数组的大小
!用deallocate语句释放存储空间
integer n
integer,allocatable:: a(:)
print*,"输入学生数:"
read*,n
allocate(a(n))
print*,"输入学生成绩:"
do i=1,n
read*,a(i)
enddo
print*, a
deallocate(a)
end
!数组的定义
!1.用dimension语句定义数组
dimension 数组名(下标下界:下标上界,) !如无特殊声明,类型按I-N规则来确定
dimension a(3,5)
integer a
!2.用类型说明语句定义数组
类型符 数组名(下标下界:下标上界,...)
real a(1:10)
!3.同时使用dimension语句和类型说明语句定义数组
类型符,dimension(下标下界:下标上界,...)
integer dimension(10):: w(2,3)
!给数组赋初值
!1.使用数组赋值符赋初值
数组名=(/取值列表/)
integer a(5)
a=(/2,3,4,5,6/)
print*,a
end
!2.用data语句给数组赋初值
data 数组名/常量表/,数组名/常量表/,...
integer a(5),b(4)
data a/1,2,3,34,5/
data b/4*5/ !*表示数据的重复
!对数组的操作
!1.对数组元素的操作
数组名(下标,...)
integer a(2,2)
a(1,1)=10
!2.数组的整体操作
integer b(5)
b=3 !所有元素都赋值为3
!3.数组局部引用
integer a(6)
a(1:6:2)=3 !三原表达式:初值:终值:步长
!4.where命令:取出部分数组的内容
integer a(5),b(5)
data a/1,2,3,4,5/
where(a>3) !将a中大于3的元素赋值给对应的b数组元素
b=a
end where
!当程序模块只有一个可执行语句时,可将这个语句写在where后面,省略endwhere
where(a>3) b=a
!配合elsewhere
where(a>3)
b=1
else where
b=2
end where
!where可做多重判断
where()
...
elsewhere()
...
elsewhere
...
endwhere
!where可以被嵌套使用
where()
...
where()
...
elsewhere
...
endwhere
elsewhere
...
endwhere
!forall命令:用隐含循环来引用数组
forall(表达式1,表达式2,...,条件)
...
endforall
integer:: a(5)
forall(i=1:5)
a(i)=i
endforall
!可以在forall中使用where,但不能在where中使用forall
!数组的保存规则
!1.一维数组的保存规则
!2.二维数组的保存规则(按照列存放的)
!3.三维数组的保存规则(看成多页相同结构的二维表格构成,第三个下标值表示页号;按照页的顺序存放)
!数组的输入和输出
!1.用do循环结构输入输出数组
integer a(10)
do i=1,10
read*,a(i)
enddo
do j=1,10
print*,a(j)
enddo
end
!二维
integer b(2,3)
do i=1,2
do j=1,3
read*,b(i,j)
enddo
enddo
do k=1,3
do l=1,2
print*,b(l,k)
enddo
enddo
end
!2.用隐含do循环输入输出数组
integer a(10)
read*,(a(i),i=1,10)
print*,(a(j),j=1,10)
!二维
integer a(2,3)
read*,((a(i,j),j=1,3),i=1,2)
print*,((a(k,l),k=1,2),l=1,3)
!3.用数组名作为输入输出项
integer a(10)
read*,a
print 10,a
10 format(1x,10i5)
!动态数组
[类型说明符,] allocatable:: 数组名(:,:,...),... !冒号表示维数
!或者
[类型说明符,] dimension(:,:,...),allocatable:: 数组名,...
!用allocate语句分配相应存储空间,确定数组的大小
!用deallocate语句释放存储空间
integer n
integer,allocatable:: a(:)
print*,"输入学生数:"
read*,n
allocate(a(n))
print*,"输入学生成绩:"
do i=1,n
read*,a(i)
enddo
print*, a
deallocate(a)
end