问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

fortran的数组定义

发布网友 发布时间:2022-05-12 01:48

我来回答

3个回答

热心网友 时间:2024-03-11 16:17

1.基本使用:
一维数组:
datatype
name (size)
datatype:
integer, real, complex, logical,或type自定义出来的类型。
integer,
parameter :: students = 5
integer
:: student (students)
其他定义方法:
integer
a(10) !最简单的
integer,
dimension (10) :: a !另外的方法
integer,
dimension (10) :: a,b,c !一起定义
integer
a !f77 先声明a是整型,
dimension
a(10) !再声明a是大小为10的数组
或type
type
:: person
real ::height, weight
end
type
type
(person) :: a(10)
a(2)%height
= 180.0

二维数组:
integer
a(3, 3)
a(1,1)
= 3
定义方法:
integer
a(10,10)
integer,
dimension (10, 10) :: a,b,c
integer
a
dimension
a(10,10) ! f77, 先定义类型
二维数组常用来当作矩阵使用。

*数组:
frotran最多可声明高达七维的数组。
integer
a(D1,D2,...,Dn) !n维
一般说来,越高维数组读数据越慢。

另类声明方法:
integer
a(5) 可使用的是a(1), a(2), a(3), a(4), a(5)
integer
a(0:5) 下标可使用的是0~5,a(0),a(1),...,a(5)六个元素。
integer
a(-3:3) 可以使用的是a(-3), a(-2), a(-1), a(0),...,a(3)七个元素。
integer
a (5,0:5) 可用a(1~5, 0~5)
integer
b(2:3, -1:3) 可用b(2~3, -1~3)

2.数组内容的设置
赋初值:
integer
a(5)
data
a /1, 2, 3, 4, 5/
data
a /5*3/ !5个3 *表示数据重复

“隐含式”循环的功能设置初值:
integer
a(5)
integer
i
data(a(i),i=2,4)
/2,3,4/ !a(2)=3,a(3)=3,a(4)=4
输出:write
(*,*) (a(i), i=2, 4) 显示a(2),a(3),a(4)
也可以设置累加值:
(a(i),i=2,10,2)
! 循环执行5次,i分别是2,4,6,8,10。

“隐含”选还可以多层嵌套:*数组
integer
a(2,2)
integer
i,j
data((a(i,j),
i=1,2),j=1,2) /1,2,3,4/
里面的循环先执行,结果:
a(1,1)=1,
a(2,1)=2, a(1,2)=3, a(2,2)=4

F90中可以省掉data描述,直接设置初值:
integer
:: a(5) = (/1,2,3,4,5/) ! 注意:括号和除号之间不能有空格。
省掉
data直接把初值写在声明之后时,不能像data时那样,用隐式循环对数组中部分元素设初值,每个元素必须给定初值,而且写法有点不同:
integer
:: i
integer
:: a(5) = (/ 1, (2, i=2,4), 5/)
!a(1)
= 1
!a(2)=2,a(3)=2,
a(4)=2 !(2,i=2,4) 是隐式循环
!a(5)=5
f90中的隐式循环:
integer
:: a(5)= (/i, i=1,5/)
!a(1)=1,
a(2)=2, a(3)=3, a(4)=4, a(5)=5

3.对整个数组的操作(数组广播)
a=5
! a是任意维数的数组,全部元素设为5
a=(/1,2,3/)
! 右边数字数目应该和数组的大小一样
a=b
!a,b同样维数及大小的数组,相同位置的元素赋给a
a=b+c!三个都是相同维数大小的数组,相同位置的数字相加给a
a=b-c
a=b*c!注意不等于矩阵的相乘,a(i,j)=
b(i,j)*c(i,j)
a=b/c
a=sin(b) !a(i)=sin(b(i))

4.
对部分数组的操作
a(3:5)
= 5
a(3:)
= 5
a(3:5)
= (/3,4,5/)
a(1:3)
= b(4:6)
a(1:10)
= a(10:1:-1) !使用隐含循环的方法将数组a(1~10)的内容翻转。
a(:)
= b(:, 2)
a(:,
:) = b(:, :, 1)
!拿数组的一部分内容使用的时候,需要注意的原测:
(1)等号两边的数组元素数目要一样多。
(2)同时使用多个隐含循环的时候,较低维数循环可以看作是内层的循环。

5.
WHERE:
F95的添加功能,用来取出部分数组的内容进行设置。where命令可以经过逻辑判断来使用数组的一部分。
example:
!把数组a中小于3的元素值设置给b
where(a<3)
b=a !这里a,b维数大小相等
end
where
也可以写成:
where
(a<3) b=a !与if相似
!where命令的代码简单,执行起来速度快。
!where是用来设置数组的,所以它的模块中只能出现与设置数组相关的命令,而且在它的整个程序模块中所使用的数组变量,都必须是同样维数大小的数组。
还可以配合elsewhere来处理逻辑不成立的情况:
where
(a<3)
b=1
elsewhere
b=2
end
where
还可作多重判断,只要elsewhere后接上逻辑判断就行了:
where
(a<2)
b=1
elsewhere(a>5)
b=2
elsewhere
b=3
end
where
可以嵌套的,跟循环一样可以取名字,不过在end
where的时候一定要加上它的名字,用来明确要结束哪个where模块:
name:
where (a<5)
b=a
end
where name

where(a<5)
where(a/=2)
b=3
elsewhere
b=1
end where
elsewhere
b=0
end
where

6.FORALL:
F95添加
integer
i
integer
:: a(5)

forall
(i=1:5)
a(i)=5
end
forall

forall(i=1:5)
a(i)=i
end
forall

forall的详细语法:
forall
(triplet1 [, triplet2 [, triplet3...]], mask)
........
end
forall

tripletn是用来赋值数组坐标范围的值。如forall
(i=1:5)中i=1:5 就是一个triplet。

integer
:: a(10, 5)
forall
(i=2:10:2, j=1:5)
a(i,j) = i+j
end
forall

mask是用来作条件判断的,跟where命令中使用的条件判断类似,可以用来*forall程序模块中只作用于数组中符合条件的元素。还可以作其他*。
forall
(i=1:5, j=1:5, a(i, j)<10 ) !只处理a中小于10的元素
a(i,j) = 1
end
forall

forall
(i=1:5, j=1:5, i==j) !只处理i==j的元素
a(i,j) = 1
end
forall

forall(i=1:5,
j=1:5, ((i>j) .and. a(i,j)>0))
!还可赋值好几个条件,这里只处理二维矩阵的上三角部分且a(i,j)>0的元素
a(i,j)=1/a(i,j)
end
forall

如果只有一行代码时候也可以省掉end
forall,写在同一行:
forall
(i=1:5, j=1:5, a(i,j)/=0) a(i,j)=1/a(i,j)

forall
可以多层嵌套,里面只能出现跟设置数组数值相关的程序命令,还可以在forall中使用where。不过where中不可以使用forall。
forall
(i=1:5)
forall (j=1:5)
a(i,j) = 1
end forall
forall (j=6:10)
a(i,j) = 2
end forall
end
forall

forall
(i=1:5)
where (a(:, i) /=0)
a(:, i) = 1.0/a(:, i)
end where
end
forall

7.
fortran 中数组的保存规则
不管数组的形状,它所有的元素都是分布在内存中同一个连续的模块当中。
*数组在内存中的连续模块排列情况是以一种列优先的方法排列的,数组存放在内存中的时候,会先放入第一个列中每个行的元素,然后再放入下一个列中每一行的元素。
exmaple:
a(1,1)->a(2,1)->a(3,1)=>a(1,2)->a(2,2)->a(3,2)=>a(1,3)->a(2,3)->a(3,3)
也即对*数组,会先放入维数的元素,再放入较高维数的元素。
数组元素位置的计算:
一个n维数组a(D1,D2,...,Dn)
设:
sn=D1*D2*...*Dn
则a(d1,d2,d3,...,dn)在第1+(d1-1)+(d2-1)*s1+
... +(dn-1)*sn-1个位置。
使用数组时候最好用低维的下标作为内循环,这样比较快。

8.可变大小的数组:(allocate,
allocatable, deallocate)
integer
:: students, error = 0
integer
,allocatable :: a(:) !定义a是可变大小的数组
...
read(*,*)
students
allocate(a(students),
stat=error) ! or allocate(a(students)) !申请数组内存空间
...
deallocate(a) !释放动态数组占用的内存空间
*数组:
integer,
allocatable :: a2(:, :)
integer,
allocatable :: a3(:, :, :)
allocate(a2(5,
5))
allocate(a3(5,
5, 5))

allocate(a2(-3:3,
-3:3))
相关的函数allocated可用来检查一个可变大小的数组是否已经配置内存来使用,会返回一个逻辑值。
example:
if(.not.
allocated(a)) then
allocate(a(5))
end
if

热心网友 时间:2024-03-11 16:18

,真正的soillocat(94896,2)
Fortran语言编写的是一个二维数组浮点数组大小

94 896乘以2

房地产是一个在c REAL * 4语言变量名浮法

soillocat。土壤是指土壤,soillocat不知道这意味着什么。

c语言编写的,可以被定义为一个二维数组

浮法soillocat的[92896] [2]

或一维数组
浮法soillocat的的, [189792];

热心网友 时间:2024-03-11 16:18

看你虚参的定义。虚参定义从哪儿开始,就从哪儿开始。追问哦上面我没说清楚,我是说实参a的取值,从a(-8)开始取,还是从a(1)开始取。我的意思是传递过去的a的值,是从a(-8)开始传,还是从a(1)开始

追答实参当然是从-8开始,因为你就是这样定义的a啊,没有任何方式可以改变一个数组的上下限。调用一个函数也不能。

但虚参的上下限可能与实参不同,这取决于你对虚参的定义。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
荣耀v20杀后台严重? 聊天时哪些回复让人感觉不舒服? 货物运输保险案例分析 卞和泣玉注释 求解,卞和泣玉没学过,在线等解。 葛加走之底读什么 在等腰三角形ABC中,AB=AC=5,BC=6,求角B的三角函数值 ...人开走一架战斗机,在一架客机下面飞,好几个飞机来拦截, ...话是三架飞机 机型各不同 在山区飞行发现恐怖分子用驴车运核弹 用AK... ...的成为战斗机飞行员。战争结束回国继续抢银 fortran 怎么表示虚数单位 fortran 如何输出派生数据类型任意成员的值? Fortran数据格式整理 qq三国 剑侍技能使用 广西驾驶证,深圳车牌,在广州违章,可以在广州自助终端处理违章吗? 诛仙青云门PK怎么配合天书加点? 跪求网络小说封面 有本小说是女主本该是公主,出生的时候天生异象,视为不详,皇后就叫嬷嬷把她送出宫外,嬷嬷带她远离京城 请问广州自动处理违章柜机吗 女明星的贴身保镖的介绍 佛山车牌在广州市违章被扣分&罚款该怎样处理 梦幻西游大唐师门技能主要学那几个 广州车在广州违章了怎么处理? 仙剑98里怎么打败林天南? 广州农商银行自助终端机能不能交交通违章? 《梦幻西游无双版》剑侠客怎么样 剑侠客技能解析攻略 我的车是广州牌在广州违章,驾驶证是外地的。可以在终端机交罚款吗,听说要什么办驾驶证的时候预留的手机 诛仙青云挂机用七剑战龙诀回血效果好么? 广州哪里有交违章,不用去交警大队可以自己处理的机器? 《人生的路》的作者是谁? 找房务总监的简历模板 简历模板的主要类型 拍月亮怎么拍都只有几百kb,大神指教怎么拍清晰图片 有没有自带音箱的吉他?就是带喇叭那种,有没有人知道的? 有自带音箱的电吉他吗,钱不是问题 电吉他没插音响,声音都很大?是不是坏了啊? 买电吉他送音响吗 电吉他不插电会发声音吗?电吉他一定要用音箱吗?不用插电和电池会出声 ... 电吉他要音响吗? 电吉他一定要配备音箱吗?音箱到底起什么作用啊 电吉他自带扩音器吗 电吉他不用音响会发出声音吗?? 我用socket.io-redis可以实现广播,但是怎么实现一对一聊天 天下的奇闻轶事,(多点) 谁知道有关奇闻、奇事的网站? 有哪些令人膛目结舌的奇人奇事 世间的奇异奇闻怪事是真实的吗? 当年,在刘邦身上发生过哪些怪事,样样都不一般,预示他能得到天下? html5如何与普通的socket进行通讯 用socket实现一个WEB聊天室是否可行?