24小时热门版块排行榜    

查看: 685  |  回复: 1

jerkwin

专家顾问 (正式写手)

[交流] Fortran90数组学习 已有1人参与

最近学习了一下Fortran90的数组,主要是参考中科大的教程http://micro.ustc.edu.cn/Fortran/ZJDing/。下面是我的一点总结,希望对大家熟悉Fortran的数组有所帮助。
CODE:
[font=Courier New]
数组的定义与引用

两种变量:标量+数组。标量维数为0,数组维数>=1。

1.        数组的定义
类型相同的一组标量数据的有序集合
数组元素类型必须相同,这些元素按某种确定方式排列

与数学上的联系
一维数组:向量(列向量或行向量)
二维数组:矩阵

数组的参数
o        数组的维数(dimension):最小为1,最大为7
o        数组的维长(extent):某一维中元素的个数,可以为0
维长由 维下界:维上界 指定,等于维上界-维下界+1
维下界省略时为默认值1
维上界必须大于维下界的值
维界值可以是正、负、零或任何整型表达式
o        数组的大小(size):所有元素的个数,等于各维长的乘积,可以为0
o        数组的形状(shape):取决于维数与每一维的维长,可由函数shape得到

例:
数组A(10,3,2)的维数为3,维长分别为10、3、2,大小为10×3×2=60,形状为10乘3乘2,或表示成(10,3,2),shape(A)的结果是一维数组,其元素为10,3,2。
数组B(2,2,0)的第三维维长为0,因而大小为0,不能用于存储任何数据。
数组C(2, 0:9, -3:-1, int(-sqrt(45./3.)):int(5/2))为4维数组,大小为2×10×3×6。

数组声明:
o        real A(10,2,3) ! 类型说明
o        dimension A(10,2,3) ! dimension语句
o        allocatable B(:,:) ! allocatable语句
o        pointer C(:,:,:) ! pointer语句
o        real, dimension(2,5):: D ! 类型说明中的dimension属性
o        real, allocatable:: E(:,:,:) ! 类型说明中的allocatable属性
o        real, pointer:: F(:,:) ! 类型说明中的pointer属性
声明时数组的维数必须指定的,大小和形状是否需要指定视数组的形式而定

2.        数组的引用
o        数组名 :数组中所有元素,无下标
o        数组元素:数组中某个元素,指定所有下标
o        数组片段:数组中若干元素,不需连续或遵循某个规则,指定部分下标列表,本身也是数组

引用时数组的下标必须用逗号隔开
引用下标的个数要和声明的数组的维数一致
下标是整型表达式,可正、可负、也可为0,但必须在引用的数组的维界之内

例: real A(3,3),B(3,3),C(89),R
B(2,2)=4.5; R=7.O; C(int(R)*2+1)=2.O !给元素B(2,2)和C(15)赋值
A(1,2)=B(int(C(15)),int(sqrt(R))) !元素A(1,2)和元素B(2,2)的值相同
real A(2,3,4),则A(1,2,3)是数组元素,而A(1:2,2,2),A(1,1,4:2:-1),A(1,2:3,(/2,4/))都是数组片段

数组的下标列表有两种:三元下标和向量下标。
o        三元下标[下界]:[上界][:步长]:用三个值分别代表数组片段的下界,上界和步长,以上升或下降的顺序指定数组元素。
若省略下(上)界,缺省值为数组相应维的下(上)维界
若上下界全省略,缺省片段为这个维的全长
三元下标的值可以不在数组的边界以内
三元下标只能算一个下标
对多维数组的数组片段,每一维都可以用三元下标来声明
在语句或过程中引用数组片段时,引用下标的个数必须与声明时的相同
若省略步长,缺省值为1。
步长不能是0。当步长为负值时,数组子片段从上界开始递减至下界

例:real A(10)
A(1:5:2)=3.0 !把元素A(1),A(3),A(5)置为3.0
A(:5:2)=3.O !把元素A(1),A(3),A(5)置为3.0,因为缺省下界为1
A(2::3)=3.O !把元素A(2),A(5),A(8)置为3.0,因为上界缺省值为10
A(7:9)=3.0 !把元素A(7),A(8),A(9)置为3.0,因为缺省步长为1
A(:)=3.0 !和A=3.0相同,将A的所有元素置为3.0
real B(10)
数组片段B(9:2:-2)是由元素B(9),B(7),B(5)和B(3)组成的数组。
数组片段B(3:15:6)是由B(3)和B(9)组成的数组。 REAL A(5,9)则A(1:4:3,6:8:2)=3.0
等价于
A(1,6)        A(1,8)
A(4,6)        A(4,8)

o        向量下标:利用一个一维整数数组(即向量)来指定数组元素
向量下标的值应该在定义的边界之内
向量下标可以有多个重复的值,此时数组片段称为多对一数组片段

例: real A(10),B(5,5)
integer I(4),J(3)
I=(/5,3,8,2/) !定义向量I
J=(/3,1,5/) !定义向量J
A(I)=3.O !设置元素A(5),A(3),A(8),A(2)的值
B(2,J)=3.O !设置元素B(2,3),B(2,1)和B(2,5)的值

integer :: a(4)=(/0,1,2,3/),b(3)=(/1,4,3/),则a(b)与a同类型,与b同形状,取值为(/0,3,2/)
a(b)可以不是数组片段,而是更大的数组。如上面b为(/2,3,2,3,2,3/)时,a(b)为(/1,2,1,2,1,2/)

character(1) :: symbol(0:1)=(/'F','M'/)
integer :: bit(100)
若bit的元素列为0001101100111...,则symbol(bit)是用{F,M}字符构成的100字节的字符型数组FFFMMFMMFFMMM...。

real A(3,3),B(4)
integer K(4)
K=(/3,1,1,2/) !K矢量有重复值
A=5.0 !设置A的所有元素
B=A(3,K) !数组片段B由下列元素组成:A(3,3),A(3,1),A(3,1),A(3,2)
因为在B(4)或A(3,K)中有重复的元素A(3,1),所以它是多对一数组片段。一个多对一数组片段不能出现在赋值语句的左端[/font]

[ Last edited by jerkwin on 2012-7-27 at 08:39 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
2楼2012-07-29 22:44:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 jerkwin 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 304求调剂 +6 曼殊2266 2026-03-18 6/300 2026-03-21 00:32 by JourneyLucky
[考研] 一志愿西南交大,求调剂 +5 材化逐梦人 2026-03-18 5/250 2026-03-21 00:26 by JourneyLucky
[考研] 311求调剂 +5 冬十三 2026-03-18 5/250 2026-03-21 00:16 by JourneyLucky
[考研] 南京大学化学376求调剂 +3 hisfailed 2026-03-19 6/300 2026-03-20 23:43 by hisfailed
[考研] 085600材料与化工 +8 安全上岸! 2026-03-16 8/400 2026-03-20 22:13 by luoyongfeng
[考研] 一志愿中南化学(0703)总分337求调剂 +8 niko- 2026-03-19 9/450 2026-03-20 21:57 by luoyongfeng
[考研] 271材料工程求调剂 +7 .6lL 2026-03-18 7/350 2026-03-20 09:10 by xingguangj
[考研] 320求调剂0856 +3 不想起名字112 2026-03-19 3/150 2026-03-19 22:53 by 学员8dgXkO
[考研] 307求调剂 +9 冷笙123 2026-03-17 9/450 2026-03-19 22:44 by 学员8dgXkO
[考研] 复试调剂 +4 z1z2z3879 2026-03-14 6/300 2026-03-19 17:18 by fei626-918
[考研] 324分 085600材料化工求调剂 +3 llllkkkhh 2026-03-18 3/150 2026-03-19 14:22 by houyaoxu
[考研] 303求调剂 +4 睿08 2026-03-17 6/300 2026-03-18 11:01 by Iveryant
[考研] 301求调剂 +9 yy要上岸呀 2026-03-17 9/450 2026-03-18 08:58 by 无际的草原
[基金申请] 被我言中:新模板不强调格式了,假专家开始管格式了 +4 beefly 2026-03-14 4/200 2026-03-17 22:04 by 黄鸟于飞Chao
[考研] 301求调剂 +4 A_JiXing 2026-03-16 4/200 2026-03-17 17:32 by ruiyingmiao
[考研] 有没有道铁/土木的想调剂南林,给自己招师弟中~ +3 TqlXswl 2026-03-16 7/350 2026-03-17 15:23 by TqlXswl
[考研] 一志愿苏州大学材料工程(085601)专硕有科研经历三项国奖两个实用型专利一项省级立项 +6 大火山小火山 2026-03-16 8/400 2026-03-17 15:05 by 无懈可击111
[考研] 东南大学364求调剂 +5 JasonYuiui 2026-03-15 5/250 2026-03-16 21:28 by 木瓜膏
[考研] 中科院材料273求调剂 +4 yzydy 2026-03-15 4/200 2026-03-16 15:59 by Gaodh_82
[考研] 327求调剂 +6 拾光任染 2026-03-15 11/550 2026-03-15 22:47 by 拾光任染
信息提示
请填处理意见