第9章 Fortran中的数组

合集下载

FORTRAN数组介绍大全

FORTRAN数组介绍大全
动态数组占用的内存可以释放掉。
§6.2 动态数组
动态数组的定义方式: 类型说明,Dimension(RANK),Allocatable::数组 名 RANK规定了数组的维数, 一个:代表一维,: 之间用逗号隔开。不能指定各维的上下界。
Real,Dimension(:),ALLocatable::A Real,Allocatable::B(:,:,:) 定义了一维动态数组A与三维动态数组B。 注意其区别。
定义数组时,下标界限必须为整型常量。
例:DIMENSION A(12), IW(4,5) 定义一维实型数组A,下标从1到12,12个元素;定 义二维整型数组IW,4行5列,20个元素。
例:INTEGER,DIMENSION(-2:10):: P 定义一维整数组P,下标从-2到10,13个元素。
例: real,dimension(3,4)::b,m(-5:10) 定义二维实型数组B,3行4列,12个元素;定义一 维实型数组M,下标从-5到10,16个元素。
例: character c(100)*20 定义一维字符数组C,有100个字符串,每个可容 纳20个字符
§6.1.2 数组的逻辑结构与存储结构
一维数组:数列、向量 二维数组:矩阵、行列式、表格 三维数组:帐簿 对更多维数的数组,可以从概念上理解。
在学习程序设计语言时, 一般只要求熟练掌 握二维数组的应用,作为理解和应用多维数组 的基础。
例 Subroutine ex(a,b,C,M,N) Real a(50),b(2,3,4),C(M:N) M=M+N N=N-2
§6.3 数组在函数和子程序中的应用
§6.3.2 假定形状数组 假定形状数组只能作为虚参,其秩是明确规 定的,但其形状由实参确定。当下界指定时, 上界会根据实参自动确定。

fortran数据结构ch09-数组

fortran数据结构ch09-数组

§1 数组的说明和数组元素的引用
2011-4-11
数组的逻辑结构和存储结构(p198 (p198§2 数组的逻辑结构和存储结构(p198-200)
一、一维数组的逻辑结构和存储结构 1. 逻辑结构 一维数组是线性表的一种表现形式。 一维数组是线性表的一种表现形式。 线性表的特点: 存在唯一的一个被称做“第一个” 线性表的特点:⑴存在唯一的一个被称做“第一个” 的数据元素; 存在唯一的一个被称做“最后一个” 的数据元素;⑵存在唯一的一个被称做“最后一个”的 数据元素; 除第一个之外, 数据元素;⑶除第一个之外,表中的每个数据元素均只 有一个前驱; 除最后一个之外, 有一个前驱; ⑷除最后一个之外,表中的每个数据元素 均只有一个后继。 均只有一个后继。 一维数组的逻辑结构是按数组元素下标值由小到大排 一维数组的逻辑结构是按数组元素下标值由小到大排 列的一个线性表, 列的一个线性表,每个元素的下标值确定了该元素在表 中的位置。 中的位置。
2011-4-11
dimension c(2,2,2),问c的元素存储顺序如何? 的元素存储顺序如何? , 的元素存储顺序如何 c(1,1,1) c(2,1,1) c(1,2,1) c(2,2,1) c(1,1,2) c(2,1,2) c(1,2,2) c(2,2,2)
15
注意: 注意: 存储结构: 存储结构:一个数组在计算机内存中实际存 放的形式。 放的形式。 Fortran程序可以在一个输入 / 输出语句中通 程序可以在一个输入 输出; 过数组名对所有数组元素进行一次性的输入 / 输出; 采用这种形式时, 采用这种形式时,输入 / 输出的顺序是和存储结构 的顺序一致的。 的顺序一致的。
6
下标下界和上界必须是整型常量或整型常量表达式, ⑶ 下标下界和上界必须是整型常量或整型常量表达式, 上界≥下界 下界。 且上界 下界。

编译原理第九章 运行时存储空间组织

编译原理第九章  运行时存储空间组织
• 简单栈区(可以带递归,但不可以嵌套定义) • 复杂栈区(可以嵌套定义, pascal)
– 堆区(new, malloc)
9.5 嵌套过程语言的栈式实现
• Pascal 的过程嵌套 嵌套层次:主程序0层 ······ 采用层数计数器,每逢Proc Begin加1,遇 Proc End则减1。
• 直接外层 • 编译器需要将过程的层数记录到符号表中
2)返回函数结果:累加器、寄存器
··· a:= 3 ··· P(a); Write(a); ···
传地址 8,8 8
举例
Procedure P(x) Begin
x:=x+5; writeln(x,a); End;
传结果 8,3 8
传值 8,3 3
举例
begin
Procedure P(x,y,z) …P(a+b,a,a)
初等类型数据采用确定“字长”,数组按列存放,边界对齐。
这样,可将过程活动单元(局部数据区)直接安排在 过程目标码之后,以便运行时访问。
9.3 Fortran静态存储分配(2)
数据区
返回地址 调用程序返回地址(调用恢复地址)
寄存器保护区 保存调用程序的寄存器运行环境
形式单元 形参
简单变量 数组 临时变量
P ->S ->Q =》R ->R
Program P; var a,x…
Top
R
procedure Q(b)
SP
var i…
R
procedure R(u,v)

var c,d…

begin… R… end {R} 链
Q
begin … R… end{Q} procedure S

fortran用法总结

fortran用法总结

我的Fortran基本用法小结周日, 10/14/2007 - 21:00 — gator一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。

只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。

这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。

希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。

要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。

觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。

外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。

所以这份笔记还处于纸上谈兵的层次。

如果有不妥的方,希望大家指正。

谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。

二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。

的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。

设计强大的数组操作就是为了实现这一目标。

ortran奠定了高级语言发展的基础。

现在Fortran在科研和机械方面应用很广。

2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。

现在在广泛使用的是Fortran 77和Fortran90。

ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。

鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。

以下是77和90的一些格式上的区别。

Fortran基本用法小结

Fortran基本用法小结

【以下文字转载自D_Atmosphere 讨论区】【原文由superjyq 所发表】我的Fortran基本用法小结高级语言和算法组heavensky目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。

只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。

这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。

希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。

要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。

觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。

另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。

所以这份笔记还处于纸上谈兵的层次。

如果有不妥的地方,希望大家指正。

谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。

二、概述1、名词解释Fortran=Formula Translator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。

的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。

设计强大的数组操作就是为了实现这一目标。

Fortran奠定了高级语言发展的基础。

现在Fortran在科研和机械方面应用很广。

2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。

现在在广泛使用的是Fortran 77和Fortran90。

Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。

鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看懂77程序。

fortran子程序【精选】

fortran子程序【精选】

1. 变量作虚参
(1)对应实参可以是同一类型的常量、变量、数组元 素和表达式。
(2)如果实参是常量或表 达式时,对应的虚参 变量值不应当改变。
3. 调用不一样。函数子程序一般在表达式中调用,子例 行程序通过call调用。
4. 用途不一样。只需得到一个计算值,一般采用函数子 程序的形式;希望通过子程序的运算得到一批数据, 应采用子例行程序。另外,使用子例行程序来完成一 些特定的操作。
10
三、 虚参实参数据传递
子程序中的虚参可以是变量名、数组名、函数名、 子例行程序名以及星号。
一行打印20个 “*”号,打两行。
8
subroutine opp(a,s1,s2) real a(5,5) s1=0
求矩阵两对角 线元素之和
do 10 i=1,5 s1=s1+a(i,i) 10 continue s2=0 do 20 i=1,5 j=5-i+1 s2=s2+a(i,j)
subroutine readin(a) real a(5,5) do 10 i=1,5 read(*,*) (a(i,j),j=1,5) 10 continue end
3
4
5
call sum(5,y3) call sum(6,y4) call sum(7,y5)
i i i
y i1
i1
i1
6
7
y=(y1+y2+y3)/(y4+y5)
i i
write(*,100) 'y=',y
i1
i1
format(1x,a,e13.6)
end
subroutine sum(n,s) integer n

fortran 模块 数组

fortran 模块 数组

fortran 模块数组Fortran模块是一种用于组织和管理Fortran程序的机制。

在Fortran中,模块可以包含变量、函数和子程序,可以通过使用关键字MODULE和END MODULE来定义。

模块的主要目的是提供一个集中管理代码和数据的方式,以便于程序的复用和维护。

本文将重点介绍Fortran模块中的数组。

在Fortran中,数组是一种用来存储多个相同类型的数据元素的数据结构。

数组可以是一维的,也可以是多维的。

在模块中定义的数组可以在模块中的任何地方使用,并且可以在不同的子程序之间共享。

这使得数组在Fortran程序中非常灵活和强大。

让我们来看一下如何在模块中定义一个一维数组。

假设我们要定义一个长度为N的整数数组,可以使用以下语法:MODULE ArrayModuleINTEGER, DIMENSION(N) :: MyArrayEND MODULE ArrayModule在上面的代码中,我们使用DIMENSION关键字指定了数组的长度为N。

这个数组可以在模块中的任何地方使用。

例如,我们可以在模块中的一个子程序中给数组赋值:SUBROUTINE InitializeArrayUSE ArrayModuleINTEGER :: iDO i = 1, NMyArray(i) = iEND DOEND SUBROUTINE InitializeArray在上面的代码中,我们使用USE语句将模块ArrayModule引入到子程序InitializeArray中,以便可以使用模块中定义的数组。

然后,我们使用一个DO循环为数组赋值。

接下来,让我们来看一下如何在模块中定义一个多维数组。

假设我们要定义一个M行N列的实数数组,可以使用以下语法:MODULE ArrayModuleREAL, DIMENSION(M,N) :: MyArrayEND MODULE ArrayModule在上面的代码中,我们使用DIMENSION关键字指定了数组的维度为M行N列。

第9章 FORTRAN中的数组

第9章  FORTRAN中的数组

9.3.1 数组的存储结构
• Fortran中,一维数组在计算机内存中的存储是最简单的一种情况。 在逻辑结构上,一维数组可以看成是由一系列数组元素组成的一 个单列数据表。数组中每个元素的下标就确定了此元素在数据表 中的位置。下标越小,在数据表中的位置就越靠前。在计算机内 存中,一维数组占据一片连续的存储单元,单个元素在内存中的 位置就是其逻辑结构中的位置。
第9章 Fortran中的数组
• 数组是Fortran语言中功能最为强大、运用最为灵 活的一种数据结构。数组(ARRAY)在科学和工程 计算中通常用来表示矩阵和向量。同一般的变量 声明相比,数组能够同时保存多个数据。它是一 种使用大规模数据的方法。配合Fortran语言中的 数组操作,可用于对大量不同的数据进行处理。 在存储结构上,数组占用一片连续的存储单元。 程序中通过数组索引来对数组元素、片断进行操 作。
9.1.5 数组定义的特点
• 上述数组定义的形式中,中括弧内的部分可有可无。数组定义语 句必须出现在所有可执行语句之前。除了上述基本的定义形式外, 在Fortran77中可以使用COMMON语句,在Fortran90中可以用 POINTER语句、ALLOCATABLE语句等对数组定义进行加强。 在前面所述的四种定义形式中,定义形式因简洁直观而常见于实 际使用中。此外,如下问题是在实际编程中应该注意的。 在前面所述的数组定义中,I(10)、M(10,5)、A、C等称为数组说 明符。在同一个说明语句中有多个数组说明符时,用逗号进行分 隔。 数组说明符中的I、M、A、C等是数组名,其取名规则与变量相同 并且不应与程序中的其他变量同名。在同一个程序单元中,一个 数组名只允许定义一次,不能重复定义。例如下面的数组定义是 错误的。 INTEGER :: A(10), A(10,20)

fortran中数组的定义 -回复

fortran中数组的定义 -回复

fortran中数组的定义-回复Fortran 中数组的定义在Fortran编程中,数组是一种强大且灵活的数据结构。

它允许我们存储和操作一系列相同类型的数据。

数组在科学计算中广泛应用,可以用于存储矩阵、向量、图像等多维数据。

在本文中,我们将一步一步回答有关Fortran中数组的定义的问题。

第一步:声明数组在Fortran中,要声明一个数组,我们需要指定数组的名称、维度和元素的数据类型。

数组的名称是一个标识符,用于在程序中引用该数组。

维度决定了数组的大小和形状,可以是一维、二维、三维或更高维。

元素的数据类型定义了数组中每个元素的类型,可以是整数、实数、复数等。

在Fortran中,声明一个一维整数数组的语法如下:fortranINTEGER :: myArray(10)这个声明语句创建了一个名为myArray的整数数组,大小为10。

我们可以通过myArray(i)来访问数组中的元素,其中i代表数组中的索引。

索引从1开始,最大为数组的大小。

第二步:初始化数组在声明数组之后,可以选择对数组进行初始化。

作为初始化的一种方法,我们可以使用一个数组常量来为数组赋值。

数组常量是一个由花括号括起来的列表,其中包含了按顺序排列的元素值。

例如,下面的语句将一个一维整数数组的前五个元素初始化为1、2、3、4和5:fortranINTEGER :: myArray(10)myArray = [1, 2, 3, 4, 5, 0, 0, 0, 0, 0]这个数组被初始化为:1, 2, 3, 4, 5, 0, 0, 0, 0, 0。

数组的大小必须与数组常量的元素数目相匹配,否则会引发编译错误。

第三步:访问数组元素一旦数组被声明和初始化,我们可以使用索引操作符来访问和修改数组元素的值。

在Fortran中,数组的索引从1开始,并且可以使用一个或多个索引来访问多维数组的元素。

以下是一个二维实数数组的声明和初始化:fortranREAL :: myArray(3, 3)myArray = RESHAPE([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], [3, 3]) 这个数组myArray的值被初始化为:1.0 4.0 7.02.0 5.0 8.03.0 6.0 9.0我们可以使用两个索引来访问二维数组中的元素。

fortran第9章 数组

fortran第9章 数组

对于—个多维数组的数组片段 , 对于 个多维数组的数组片段, 它的每一维都可以用三 个多维数组的数组片段 元下标来声明。如果要在一个语句或过程中引用这个数组片段, 元下标来声明。如果要在一个语句或过程中引用这个数组片段, 则引用下标要和声明时的下标个数一样多。 则引用下标要和声明时的下标个数一样多。
上一页 下一页 停止放映
注意,三元下标只能算一个下标。 注意,三元下标只能算一个下标。
A(5 例:REAL A(5,9) A(1 A(1:4:3,6:8:2)=3.0 )=3 数组A是二维数组,数组片段是形状为二维数组。 数组A是二维数组,数组片段是形状为二维数组。 上 面括号内第一个三元组表示第一维下标变化范围, 面括号内第一个三元组表示第一维下标变化范围,第二个 三元组表示第二维下标变化范围。 三元组表示第二维下标变化范围。 其元素选取法是先把第二维下标定在下界值上,而后遍历 其元素选取法是先把第二维下标定在下界值上, 先把第二维下标定在下界值上 第一维下标, 选中元素为A( A(1 A(4 第一维下标 , 选中元素为 A(1,6) , A(4,6) ; 再把第二维 下标增一步长,再遍历第一维下标,选中元素为 A(1 ),A(4 如此重复直至全部选完。 A(1,8),A(4,8) , 如此重复直至全部选完 。 这种选取关系 相当于把第二维作外层DO循环变量, DO循环变量 相当于把第二维作外层DO循环变量,第一维作内层循环变 量的变化。这四个元素按先后次序保持一定的形状, 量的变化。这四个元素按先后次序保持一定的形状,上式 等价于: 等价于:
REAL,ALLOCATABLE:: E(: REAL,ALLOCATABLE:: E(:,:,:)! REAL,POINTER:: F(: REAL,POINTER:: F(:,:)

fortran知识点总结

fortran知识点总结

fortran知识点总结一、语法结构Fortran语言的语法结构遵循一套严格的规则。

下面是一些常见的语法结构:1. 程序单元:Fortran程序由一个或多个程序单元组成。

每个程序单元由一个或多个声明和执行语句组成。

2. 注释:在Fortran中,注释可以用来提高代码的可读性。

注释以感叹号(!)开头,直到行末为止。

3. 标识符:Fortran中的标识符由字母、数字和下划线组成,且区分大小写。

标识符用于表示变量、函数、子程序等。

4. 变量声明:在Fortran中,变量声明使用关键字“REAL”、“INTEGER”、“LOGICAL”等来指定变量的数据类型。

例如,REAL :: x 表示声明了一个实数类型的变量x。

5. 程序控制结构:Fortran提供了多种控制结构,包括顺序结构、条件结构和循环结构。

这些结构提供了程序的流程控制和逻辑控制。

6. 函数和子程序:Fortran支持函数和子程序的定义和调用。

函数和子程序可以帮助程序员组织和重用代码。

7. 模块和接口:Fortran中的模块和接口提供了一种组织代码的方式。

模块可以包含多个子程序和全局变量,接口可以用来定义子程序的接口。

二、数据类型在Fortran中,数据类型用于表示数据的类型和大小。

Fortran提供了多种数据类型,包括整数、实数、逻辑值、字符、复数等。

下面是一些常见的数据类型:1. 整数:整数类型用于表示整数值。

在Fortran中,整数类型包括“INTEGER”、“LOGICAL” 和“CHARACTER”类型。

2. 实数:实数类型用于表示实数值。

在Fortran中,实数类型包括“REAL”和“COMPLEX”类型。

REAL类型用于表示实数,COMPLEX类型用于表示复数。

3. 字符:字符类型用于表示字符值。

在Fortran中,字符类型使用CHARACTER关键字进行声明。

字符类型可以表示单个字符或者字符数组。

4. 数组:数组类型用于表示多个相同类型的数据。

FORTRAN数组介绍大全

FORTRAN数组介绍大全

如果作为数组元素的下标的算术表达式中存 在没有赋值的变量, 在没有赋值的变量,系统一般自动将它按零处 可能会导致计算结果不正确, 理 , 可能会导致计算结果不正确 , 或者不稳定 时对时错) 这类错误很难发现, ( 时对时错 ) 。 这类错误很难发现 , 是许多程序 存在bug的原因。 bug的原因 存在bug的原因。 必须确保数组元素的下标的值不超过下标界 如果下标越界, 限。如果下标越界,系统一般会对存储于数组 之前( 的存储单元进行操作(引用或者赋值), 之前(后)的存储单元进行操作(引用或者赋值), 导致错误。 导致错误。 数组元素的下标表达式过于复杂时, 数组元素的下标表达式过于复杂时 , 最好先 行算出, 行算出,最好不要书写过于复杂的语句和表达 式。
§6.1.6 数组片段 数组片段是数组中部分元素的集合。 数组片段是数组中部分元素的集合。相当 于集合论中的子集。 于集合论中的子集。 可以用下标三元组表示数组片段; 可以用下标三元组表示数组片段;下标三 元组的格式为[下界]:[上界][:步长], ]:[上界][:步长],可选项不 元组的格式为[下界]:[上界][:步长],可选项不 出现时取缺省值。 出现时取缺省值。 例:real,dimension(8,10)::A A(2:6:2,2:8:3)是一个3x3的数组片段 是一个3x3 则A(2:6:2,2:8:3)是一个3x3的数组片段 还可用下标向量表示数组片段: 还可用下标向量表示数组片段:下标向量的 元素是整数, 元素是整数,代表数组片段中的元素在数组相 应维数中的下标。 应维数中的下标。
数组元素在内存中连续存放, 数组元素在内存中连续存放 , 下标数值小的 排在前面。存储多维数组时, 排在前面。存储多维数组时,下标变化速度依 次为第一个,第二个… 次为第一个,第二个 依次存储A(1),A(2),A(3), …A(10) 例:A(10),依次存储 依次存储 B(8,9),依次存 依次存B(1,1),B(2,1),…B(8,1), 依次存 B(1,2),B(2,2),…B(8,2), ……………………. B(1,9),B(2,9),…B(8,9) 特别提示:二维数组是按列存储的。 特别提示:二维数组是按列存储的。

Fortran程序设计第9章基本计算(一)赋值语句

Fortran程序设计第9章基本计算(一)赋值语句

第9章基本计算(一)赋值语句从计算机的实‎际状态来看,给出表达式并‎不意味着计算‎的开始,真正能够驱动‎计算的是可执‎行语句,而最直接驱动‎表达式的计算‎过程的就是赋‎值语句,完成一个赋值‎步骤,就意味着机器‎的状态的局部‎或全局发生了‎一个根本的变‎化。

从语法的角度‎来看,一个表达式还‎只是一个比较‎复杂的复合词‎汇,还不能构成一‎个完整的语句‎,而赋值语句则‎是一个在语法‎意义上的完整‎的语句,表达式在赋值‎语句中扮演关‎键的语法作用‎。

从计算问题的‎角度来看,赋值可以说是‎基本的计算步‎骤,考虑一下我们‎人工计算的过‎程就可以发现‎,任何一个完整‎的计算步骤,都可以说就是‎一个赋值步骤‎,特别是公式演‎算和数值计算‎,完成一个局部‎运算过程的标‎志,往往就是求出‎某个中间变量‎的数值或表达‎式。

FORTRA‎N语言作为一‎种以公式翻译‎为初衷的高级‎语言,它的赋值语句‎的一般形式就‎是一个数学等‎式,当然不是那种‎公式恒等变换‎得到的恒等式‎,而是要把运算‎的结果赋予一‎个变量,因此它的一般‎句法形式为:variab‎l e = expres‎s ionvariab‎l e => expres‎s ion可以看到一个‎赋值语句作为‎一个完整的语‎句,分为三个部分‎:●‎被赋值的变量‎●‎赋值符号●‎计算(表达式)其中被赋值的‎变量,通过赋值,就拥有了明确‎的取值形式,如果该变量含‎有下标,片断下标或子‎串范围,则赋值的前提‎是它们都已经‎获得具体的取‎值。

基于表达式结‎果的不同种类‎,赋值语句分为‎:●固有赋值:固有赋值是把‎任意类型的值‎赋予一个非指‎针变量,或把一个指针‎变量赋予一个‎与之相关联的‎目标。

●自定义赋值:自定义赋值得‎以构成的前提‎是存在一个可‎访问的子例行‎程序,它包含一个具‎有A SSIG‎N MENT形‎式的赋值界面‎,其属性与自定‎义赋值语句里‎的变量和表达‎式的属性保持‎一致。

fortran用法小结

fortran用法小结

Fortran用法小结目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。

只读到第九章,主要是3~9 章,都是最基本的用法(原书共16章)。

这里主要摘录了我看书过程中总结的一些Fortran 和C不同的地方,主要是语法方面。

希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。

要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。

觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。

外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。

所以这份笔记还处于纸上谈兵的层次。

如果有不妥的方,希望大家指正。

谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。

二、概述1、名词解释Fortran=Formula Translator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。

的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。

设计强大的数组操作就是为了实现这一目标。

Fortran奠定了高级语言发展的基础。

现在Fortran在科研和机械方面应用很广。

2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。

现在在广泛使用的是Fortran 77和Fortr an90。

Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。

鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。

以下是77和90的一些格式上的区别。

Fortran 77:固定格式(fixed format),程序代码扩展名:.f或.for(1)若某行以C,c或*开头,则该行被当成注释;(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入出等);7~72为程序代码编写区;73往后被忽略;(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。

fortran 函数传出的结构体数组

fortran 函数传出的结构体数组

fortran 函数传出的结构体数组英文版Passing Structure Arrays from Fortran FunctionsIn Fortran, structures, also known as derived types or record types, provide a mechanism to group multiple variables of different types under a single name. These structures can be useful when dealing with complex data representations. Passing structure arrays as arguments to functions in Fortran requires a specific syntax to ensure correct data transfer.1. Defining the Structure:First, we need to define the structure. For example, let's create a structure called Person that contains two fields: name (a character array) and age (an integer).fortranCopy TYPE :: PersonCHARACTER(LEN=50) :: nameINTEGER :: ageEND TYPE PersonTYPE :: PersonCHARACTER(LEN=50) :: nameINTEGER :: ageEND TYPE Person2. Passing the Structure Array:When passing a structure array to a function, you need to specify the dimension of the array and use the INTENT attribute to indicate whether the array is being passed by value (IN) or by reference (OUT or INOUT).Here's an example of a function that takes an array of Person structures as input:fortranCopy SUBROUTINE ProcessPeople(people,num_people)TYPE(Person), INTENT(IN) :: people(:)INTEGER, INTENT(IN) :: num_people! ... function body ...END SUBROUTINE ProcessPeopleSUBROUTINE ProcessPeople(people, num_people)TYPE(Person), INTENT(IN) :: people(:)INTEGER, INTENT(IN) :: num_people! ... function body ...END SUBROUTINE ProcessPeopleIn this example, people is an array of Person structures, and num_people is the number of elements in the array. The INTENT(IN) attribute indicates that the array is being passed by value, meaning any modifications made to people within the subroutine will not affect the original array.3. Calling the Function:When calling the function, you need to ensure that the array you are passing matches the expected type and dimension. Here's an example of how you might call the ProcessPeople subroutine:fortranCopy TYPE(Person) :: individuals(3)individuals(1)%name = "Alice"individuals(1)%age = 25individuals(2)%name = "Bob"individuals(2)%age = 30individuals(3)%name = "Charlie"individuals(3)%age = 35CALL ProcessPeople(individuals, 3)TYPE(Person) :: individuals(3)individuals(1)%name = "Alice"individuals(1)%age = 25individuals(2)%name = "Bob"individuals(2)%age = 30individuals(3)%name = "Charlie"individuals(3)%age = 35CALL ProcessPeople(individuals, 3)In this example, we create an array individuals of type Person with three elements. We then assign values to the name and age fields of each element before calling the ProcessPeople subroutine, passing the array and the number of elements as arguments.4. Handling Structure Arrays in the Function:Within the function, you can access and modify the fields of the structure array elements as needed. Here's a simplified example of the ProcessPeople subroutine body:fortranCopy SUBROUTINE ProcessPeople(people,num_people)TYPE(Person), INTENT(IN) :: people(:)INTEGER, INTENT(IN) :: num_people! Loop through each person in the arrayDO i = 1, num_peopleWRITE(*, *) "Name:", people(i)%nameWRITE(*, *) "Age:", people(i)%age! ... perform additional processing ...END DOEND SUBROUTINE ProcessPeopleSUBROUTINE ProcessPeople(people, num_people) TYPE(Person), INTENT(IN) :: people(:)INTEGER, INTENT(IN) :: num_people! Loop through each person in the arrayDO i = 1, num_peopleWRITE(*, *) "Name:", people(i)%nameWRITE(*, *) "Age:", people(i)%age! ... perform additional processing ...END DOEND SUBROUTINE ProcessPeopleIn this example, the subroutine loops through each element of the people array, accesses the name and age fields, and prints them to the standard output.Conclusion:Passing structure arrays from Fortran functions requires careful attention to the syntax and the use of the INTENT attribute. By following the steps outlined in this article, you should be able to successfully pass and manipulate structure arrays within your Fortran programs.中文版从Fortran函数中传出的结构体数组在Fortran中,结构体(也称为派生类型或记录类型)提供了一种机制,可以在单个名称下组合多个不同类型的变量。

Fortran数组详细介绍

Fortran数组详细介绍

Fortran数组详细介绍Fortran是一种编程语言,用于科学计算和数值计算。

它是一种古老的语言,最初于1950年代开发,但到现在仍然广泛使用。

Fortran最初是为处理数值计算而设计的,因此它具有许多特性和功能,使其成为处理大规模数值计算的理想选择。

在Fortran中,数组是一种重要的数据结构。

它们允许存储和处理大量相同类型的数据。

数组在Fortran中的声明方式非常简单,如下所示:```real :: myArray(10)```上面的代码声明了一个名为myArray的实数数组,它可以存储10个元素。

在Fortran中,数组的下标从1开始,因此myArray(1)到myArray(10)表示数组的不同元素。

数组在Fortran中的使用非常灵活。

可以对整个数组执行操作,也可以对数组的部分元素执行操作。

例如,可以使用循环结构来遍历数组的所有元素,并对它们进行计算或处理。

此外,Fortran还具有一些特殊的数组功能,例如数组切片和数组广播。

数组切片允许从一个数组中选择一部分元素,而不需要复制整个数组。

数组广播允许在不同形状的数组之间执行操作,Fortran会自动扩展较小的数组,使其与较大的数组具有相同的形状。

总之,Fortran数组是一种强大的数据结构,用于存储和处理大规模数值计算。

它们具有灵活的使用方式,高性能和许多内置功能。

Fortran数组的使用可以简化复杂的计算任务,并提高计算效率。

因此,对于进行科学计算和数值计算的应用程序,使用Fortran数组是一个明智的选择。

FORTRAN数组介绍大全

FORTRAN数组介绍大全

FORTRAN数组介绍大全FORTRAN(Formula Translation)是一种编程语言,于1957年首次发布。

它是第一种广泛使用的高级程序设计语言之一,专为科学计算和数值分析而设计。

FORTRAN的一个重要特点是它对数组和矩阵的支持。

本文将介绍FORTRAN中数组的基本概念、数组的声明和使用、多维数组、动态数组以及一些数组操作的常见用法,总计超过1200字。

数组是一组具有相同数据类型的元素。

在FORTRAN中,数组是一个有序的数据集合,其中每个元素都有一个唯一的索引或下标来标识其位置。

声明和使用数组很简单,只需指定数组的名称和维度即可。

例如,在FORTRAN中,要声明一个整数类型的数组,可以使用以下语法:```INTEGER :: my_array(100)```上述代码声明了一个名为"my_array"的整数类型数组,元素个数为100。

要访问数组中的元素,可以使用下标操作符([])来引用特定的元素位置。

例如,要访问数组中的第一个元素,可以使用以下方式:```my_array(1) = 10```上述代码将数组中的第一个元素设置为10。

在FORTRAN中,数组的下标从1开始,而不是像大多数编程语言一样从0开始。

当然,FORTRAN也支持多维数组(矩阵)。

要声明一个二维数组,可以使用以下语法:```REAL :: my_matrix(50, 50)```上述代码声明了一个名为"my_matrix"的实数类型的二维数组,大小为50x50。

要访问二维数组中的元素,可以使用两个索引值。

例如,要设置第一行第一列的元素为5,可以使用以下语句:```my_matrix(1, 1) = 5.0```在实际应用中,有时需要根据运行时的需求来动态分配数组的大小。

FORTRAN提供了一种特殊的数组类型-ALLOCATABLE,可以用于声明动态数组。

使用ALLOCATABLE数组时,可以在程序运行过程中根据需要为数组分配内存空间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第9章 Fortran中的数组
• 数组是Fortran语言中功能最为强大、运用最为灵 活的一种数据结构。数组(ARRAY)在科学和工程 计算中通常用来表示矩阵和向量。同一般的变量 声明相比,数组能够同时保存多个数据。它是一 种使用大规模数据的方法。配合Fortran语言中的 数组操作,可用于对大量不同的数据进行处理。 在存储结构上,数组占用一片连续的存储单元。 程序中通过数组索引来对数组元素、片断进行操 作。
9.1.3 定义形式三
• 第三种数组定义形式的语法格式如下所示。 • DIMENSION([下标下界:]下标上界[,„]) [::] 数组名[,„] • [类型说明 [::] 数组名[,„]] • 该定义形式通过DIMENSION语句直接说明了数组的 维数和维的范围。这种形式定义的数组全部具有 相同的维数和大小。如下代码表示了如何采用上 述形式进行数组的定义。 • DIMENSION(10, 4:10) :: A, B, N • INTEGER :: A • REAL(8) :: N
• •


9.2 数组的引用方式
• 数组经过定义之后,就可以在程序中使用了。在 Fortran77标准中,数组只允许在输入输出语句中 进行整体操作。在其他场合,只能对数组的元素 通过下标索引的方式逐个进行操作。到了 Fortran90标准,这一限制被大大放宽了。数组除 了能够进行整体操作以外,还能对数组中的片断 和数组的整体进行操作。这进一步增强了Fortran 语言在数值处理方面的能力。Fortran中数组的引 用方式可以概括为以下几种:
9.3.2 数组存储结构的应用
• 目前的计算机硬件体系结构决定了在读取大批量数据时,如果这一批 数据都位于临近的内存中时,读取操作会执行得较快。在编写程序时, 如果想要提高执行效率,就应该对数据在计算中的保存方式和读取方 式有一定的了解。只有了解了数据在计算内的存储结构,才能在编写 程序的时候做到有的放矢。这样编写出来的程序在数据的存取效率上 才能较高。 • 需要注意的是,尽管Fortran中的数组是按“列元素优先”的规则进 行存储的,但是C语言中的数组则是按照“行元素优先”的原则进行 存储,并且C语言中数组的下标下界固定是从0开始的。在编写相关的 程序时,应该注意到这一差别。Fortran语言中,使用DO循环进行高 效率数组操作的代码写法可能在C语言中恰恰是最低效的。比如下面 的程序段在Fortran中能够得到较好的执行效率: • DO J = 1, 5 • DO I = 1,3 • Sum = Sum + A(I, J) • ENDDO
9.1.1 定义形式一
• 第一种数组定义形式的语法格式如下所示。 • 类型说明 [::] 数组名([下标下界:]下标上界 [,„])[,„] • 该定义形式通过类型说明来显式声明数组的数据 类型,并通过下标下界和下标上界来规定数组中 某一维的范围。下标下界和下标上界共同组成了 维说明符。当维说明符省略下标下界时,默认所 在维的下标从1开始。如下代码都是合法的数组定 义。 • REAL :: A(1:2,2:4) • INTEGER B(10)
9.4.4 显形数组的不足
• 显形数组是数组应用的基础,其中的自动数组和可调数组能够提供非常灵活的数组应 用。比如自动数组在处理具体数量未知的大笔数组数据时,能够提供相当好的解决方 案。但是有一点需要注意,由于自动数组和可调数组都是通过过程来使用的,因此过 程的一些特点也会影响到这两种数组的使用。比如使用自动数组时,过程在计算机中 的堆栈限制会妨碍可使用的自动数组的大小。这种情况可以通过在执行TEST0906时, 将变量I设置成一个大数(比如100000)来观察到,此时屏幕上的打印信息如下: Input the value of I: 100000 forrtl: severe (170): Program Exception - stack overflow Image PC Routine Line Source TEST0307.exe 004011DB Unknown Unknown Unknown TEST0307.exe 0040110A Unknown Unknown Unknown TEST0307.exe 0043FCD9 Unknown Unknown Unknown TEST0307.exe 00428FF9 Unknown Unknown Unknown kernel32.dll 7C816FD7 Unknown Unknown Unknown Incrementally linked image--PC correlation disabled.
• • • • • • • • •

END PROGRAM TEST0902
9.2.3 引用数组片断
• • • • • • • • • • • • • • • • 引用数组片断的语法格式如下所示。 数组名(下标范围,„„) 在这种引用方式中,数组中的元素可以用过数组片断来进行引用。当需要给数组中的不同 片断的元素赋予不同数值时,这种引用方式非常方便。来看下面一个例子。 TEST0903.F90 ! 引用数组片断的范例 PROGRAM TEST0903 IMPLICIT NONE ! 变量定义 REAL :: A1, A2,A3,A4,A5,B(5,5) READ(*, *)A1,A2,A3,A4,A5 ! 数组片断的引用 B(1,1:5) = A1 B(2,1:5) = A2 B(3,1:5) = A3 B(4,1:5) = A4 B(5,1:5) = A5
9.2.2 引用数组整体
• • • 引用数组整体的语法格式如下所示。 数组名 这种引用方式通过数组名来对数组进行整体操作。这种引用方式是 Fortan90中新增的,大大提高了程序编写的灵活性和简单性。我们对前一 个例程TEST0901进行修改,通过整体引用来对数组进行赋值。 TEST0902.F90 ! 引用数组整体的范例 PROGRAM TEST0902 IMPLICIT NONE ! 变量定义 REAL :: A, B(5,5) READ(*, *)A ! 数组整体引用 B = A
9.1 数组的定义
• 要在程序中使用数组,需要首先在变量声明中进行数组定 义。数组定义规定了数组的维数和大小,以及数组所能保 存的数据类型。在程序中,通过数组引用来对数组、数组 元素或者数组片断进行操作。 • 数组是类型相同、种别一致的一组变量的有序集合。它可 以是整型、实型、双精度型、复型、逻辑型、字符型以及 自定义类型等中的任意一种。组成数组的每一个变量被称 为数组元素,并由唯一的下标来进行标识。数组定义说明 了数组所能保存的数据类型、数组的维数、维的范围和数 组的大小。本节主要介绍Fortran中数组定义的几种方式。
9.3.1 数组的存储结构
• Fortran中,一维数组在计算机内存中的存储是最简单的一种情况。 在逻辑结构上,一维数组可以看成是由一系列数组元素组成的一 个单列数据表。数组中每个元素的下标就确定了此元素在数据表 中的位置。下标越小,在数据表中的位置就越靠前。在计算机内 存中,一维数组占据一片连续的存储单元,单个元素在内存中的 位置就是其逻辑结构中的位置。
9.1.5 数组定义的特点
• 上述数组定义的形式中,中括弧内的部分可有可无。数组定义语 句必须出现在所有可执行语句之前。除了上述基本的定义形式外, 在Fortran77中可以使用COMMON语句,在Fortran90中可以用 POINTER语句、ALLOCATABLE语句等对数组定义进行加强。 在前面所述的四种定义形式中,定义形式因简洁直观而常见于实 际使用中。此外,如下问题是在实际编程中应该注意的。 在前面所述的数组定义中,I(10)、M(10,5)、A、C等称为数组说 明符。在同一个说明语句中有多个数组说明符时,用逗号进行分 隔。 数组说明符中的I、M、A、C等是数组名,其取名规则与变量相同 并且不应与程序中的其他变量同名。在同一个程序单元中,一个 数组名只允许定义一次,不能重复定义。例如下面的数组定义是 错误的。 INTEGER :: A(10), A(10,20)

END PROGRAM TEST0903
9.3 数组的存储
• 尽管在Fortran语言中,允许程序员声明维数高达 7维的数组来使用,但是计算机的内存却只是一维 的。所以不管声明的数组有几维,数组在内存中 都是以一维的方式来进行存储。数组中元素在计 算机内的存储顺序同时也被用作输入/输出时确定 其中的元素数据在进行操作时的先后顺序。
9.1.4 定义形式四
• 第四种数组定义形式的语法格式如下所示。 • [类型说明,]DIMENSION [::] 数组名([下标下 界:]下标上界[,„])[,„] • [类型说明,]DIMENSION([下标下界:]下标上界 [,„]) [::] 数组名[,„] • 该定义形式可以说是前三种定义形式的综合形式。 通过在DIMENSION语句前引入类型说明来显式的说 明数组的数据类型。下列代码演示了此种形式的 数组定义。 • REAL, DIMENSION :: I(10), M(10,5) • INTEGER, DIMENSION(10) :: A, C
9.4.3 特殊的显形数组——可调数组
• 可调数组(Adjustable Array)也是显形数组的 一种特殊形式,这种类型的显形数组只能是过程 中的一个哑元。 • 可调数组中至少有一维的上下界不是常数,这个 维的上下界只有当过程被调用时才能最终确定。 并且该维的上下界表达式中的整型变量可以是通 过过程传递的哑元,也可以是通过COMMON语句中 传递的整型常量或变量。和自动数组类似,过程 内部对维界参数的赋值不会改变数组中该维的上 下界。
9.1.2 定义形式二
• 第二种数组定义形式的语法格式如下所示。 • DIMENSION [::] 数组名([下标下界:]下标上界 [,„])[,„] • [类型说明 [::] 数组名[,„]] • 该定义形式通过DIMENSION语句来进行数组的定义, 通过下标下界和下标上界来规定数组中某一维的 范围。在第二行通过类型说明来显式声明数组的 数据类型。当省略类型说明时,采用默认的“I-N” 规则来对数组的数据类型进行定义。如下代码合 法的对数组进行了定义。 • DIMENSION :: A(10), B(2:11) • INTEGER :: A
相关文档
最新文档