24小时热门版块排行榜    

Znn3bq.jpeg
查看: 734  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 面上本子正文33页,违规吗?会被低分嘛? +8 1234567wang 2026-05-17 10/500 2026-05-18 18:52 by zzahkj
[基金申请] 今年审到国自然15份,谈谈感受 +16 国自然国社科中 2026-05-17 16/800 2026-05-18 14:58 by gy116024
[教师之家] 上海大学实验技术岗位非升即走 +8 嘻嘻哈哈乐呵呵 2026-05-15 8/400 2026-05-18 11:53 by ning312
[基金申请] 重磅!青年科学基金项目(C类)资助增幅预计超过50% +7 水和泥不是水泥 2026-05-13 10/500 2026-05-18 07:50 by 水和泥不是水泥
[文学芳草园] 半夜喝咖啡 +3 myrtle 2026-05-15 5/250 2026-05-18 01:03 by 小沈2018
[找工作] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 ky2p12rrjj 2026-05-15 4/200 2026-05-17 19:47 by Equinoxhua
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +6 l7k6xnh0yc 2026-05-14 7/350 2026-05-17 19:42 by Equinoxhua
[找工作] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +5 l7k6xnh0yc 2026-05-14 5/250 2026-05-17 19:39 by Equinoxhua
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 v9tggjlwd0 2026-05-15 4/200 2026-05-17 08:06 by 11n4dfd8yn
[考研] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 l7k6xnh0yc 2026-05-14 8/400 2026-05-17 07:26 by 11n4dfd8yn
[考博] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +6 l7k6xnh0yc 2026-05-14 6/300 2026-05-17 07:11 by 11n4dfd8yn
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +5 cjf4bx70cj 2026-05-14 7/350 2026-05-17 06:55 by 11n4dfd8yn
[考研] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 k37jurhrau 2026-05-16 3/150 2026-05-17 01:25 by ue3ir18jc3
[考博] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 ky2p12rrjj 2026-05-15 4/200 2026-05-17 00:57 by ue3ir18jc3
[公派出国] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 x0mp7owy2b 2026-05-15 4/200 2026-05-17 00:35 by ue3ir18jc3
[基金申请] 请问大佬b0816评完了吗 +4 市民华南虎 2026-05-12 8/400 2026-05-16 19:54 by Equinoxhua
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 x0mp7owy2b 2026-05-15 4/200 2026-05-16 17:45 by j6b2pdz07o
[有机交流] 如何实现卤原子转化 +3 BT20230424 2026-05-15 5/250 2026-05-16 16:20 by czyzsu
[教师之家] 教学课件你会给同学吗 +8 硕士研究生吗 2026-05-13 8/400 2026-05-14 22:23 by 常规沥青
[论文投稿] 求助大佬sci投稿哪个好中 +3 江沅188 2026-05-12 4/200 2026-05-13 14:35 by 江沅188
信息提示
请填处理意见