FORTRAN 第七章数组
fortran 第7章
![fortran 第7章](https://img.taocdn.com/s3/m/c4c1d9f1c8d376eeafaa3105.png)
§7-1-1 一维数组
例; 记录5位同学的成绩,并提供由座号查询成绩的功能。
§7-1-1 一维数组
1)声明:integer :: student(students) 或: integer :: student(3) 2)赋值 student(1)=80 student(2)=85 3)运算 数组的元素可当作变量 a=student(1)+student(2)
§7-1-2 二维数组
• 5个班级,每班5位学生,保存成绩;查询成绩
输入两个2×2的矩阵的值,并相加
程序内容有重复, 可用3维数组
§多维数组:
• 声明: Integer a(D1, D2, ……, Dn) ! n维数组 • FORTRAN最多可声明高达7维的数组
• a(I1, I2, …, In) , 使用n维数组时,要给出n个坐 标值
a=b*c a=sin(b)
!a(d1,d2,…)=sin(b(d1,d2,…)),数组b必须是浮点数; !一维相当于 a(i)=sin(b(i), i=1, n)
§7-2-2 对整个数组的操作
a=b>c ! a、b、c的尺寸、维数相同, 但是a为逻辑型数组变量,数组 a,b为同类型的数值变量 对于一维的情况,相当于: Do i=1, n If (b(i) > c(i)) then A(i) = .true. Else A(i)= .false. end if End do
• Integer a(-3: 3) ! 能使用的是 a(-3), a(-2), a(-1), a(0), ! a(1), a(2), a(3) • Integer a(5, 0:3) ! 能使用的是a(1~5, 0~3)的元素 • Integer b(2:3, -2:1) ! 能使用的是b(2~3, -2~1)的元素
fortran_ch07
![fortran_ch07](https://img.taocdn.com/s3/m/076a395abe23482fb4da4cb6.png)
缺省下标从1开始,如果不从1开始可采用如下 定义方式
… TYPE-DEFINE :: C(0:10, -1:50) …
7.3 动态数组
动态数组
… TYPE-DEFINE, ALLOCATABLE :: A(:), B(:,:) INTEGER(4) :: err … ALLOCATE(A(1:n), STAT=err) ALLOCATE(B(1:n,1:m), STAT=err) IF(err .NE. 0) WRITE(*,*) “Low memory!” … DEALLOCATE(A, B) …
CH7 数组
主讲人:罗 :: A(size) …
数组的应用
… A(1) = … … =A(1)*… …
特点
缺省下标从1开始,如果不从1开始可使用如下 方式定义
… TYPE-DEFINE :: A(0:size) …
7.2 多维数组
数组的定义
7.4 FORTRAN中下标的巧用
字符串事实上是在内存上连续存储的字符 数组,所以
CH1=“GEOPHYICS DEPARTMENT” WRITE(*,*) CH1(3:3),CH1(3:8) 会得到什么结果?
课后作业
作业题
编写一个主程序,在控制台(命令提示符)上输入一个球体的半径,将该 球体的半径作为参数传给计算球体体积的自定义函数,其返回值为体 积,再将体积作为参数传递给由球体体积计算该球体半径的自定义函 数,其返回值为球体的半径,比较两个半径验证程序是否正确。 编写一个子函数,其功能是解一元二次方程(只求实解),并编写一个 主程序验证该子函数的正确性。 读取jgm3文件,并用二维动态数组存储jgm3的各阶次系数,并将jgm3 的系数按照第5次作业的格式写为另一个文件
第七讲 数组的使用及Fortran函数
![第七讲 数组的使用及Fortran函数](https://img.taocdn.com/s3/m/1efe3ded102de2bd960588c9.png)
步骤 id(1) id(2) id(3) id(4) id(5) id(6) id(7) id(8) id(9) id(10)
数组的使用及Fortran Fortran函数 第七讲 数组的使用及Fortran函数
7.1 数组引用方法
概述 格式 检测 示例
数组引用要保证下标值落在下界和上界之间,否则将产生严重后果。 数组引用要保证下标值落在下界和上界之间,否则将产生严重后果。 使用内部函数(UBOUND、LBOUND)分别检测数组的上界和下 使用内部函数(UBOUND、LBOUND)分别检测数组的上界和下界。 内部函数 检测数组的 <UBOUND函数调用> UBOUND(数组名[ [DIM=]<整型表达式 整型表达式>]) <UBOUND函数调用> → UBOUND(数组名[ , [DIM=]<整型表达式>]) 函数调用 数组名 <LBOUND函数调用> LBOUND(数组名 数组名[ [DIM=]<整型表达式 整型表达式>]) <LBOUND函数调用> → LBOUND(数组名[ , [DIM=]<整型表达式>]) 函数调用 可检测某一维(指定维数,有第二参数) 结果为整数。 可检测某一维(指定维数,有第二参数),结果为整数。 也可检测所有维(不指定维数,缺第二参数),结果为一维整型数组。 也可检测所有维(不指定维数,缺第二参数) 结果为一维整型数组。
数组引用方法/ 7.1 数组引用方法/示例 UBOUND(arr,3 求数组arr 函数UBOUND(arr, arr第 维的下标上界是:',ub3 WRITE(*,*) '函数UBOUND(arr,3)求数组arr第3维的下标上界是:',ub3
Fortran数组详细介绍
![Fortran数组详细介绍](https://img.taocdn.com/s3/m/243f07ef102de2bd96058808.png)
使用DO DO循环输入输出数组元素 一、 使用DO循环输入输出数组元素
INTEGER ::I, J REAL:: MAT(2, 3) DO I=1, 3 DO J=1, 2 READ(*,*) MAT(J, I) END DO END DO DO I=1, 2 DO J=1, 3 WRITE(*, 10) MAT(I, J) END DO END DO 10 FORMAT(1X, F6.2) END
二、数组元素的引用
,下标 数组名 (下标 [ ,下标 ]…) 允许对数组进行整体操作,例如: 允许对数组进行整体操作,例如: INTEGER , DIMENSION(1:5) :: A A=0, 的全部元素赋为0 A(:)=0 !或写成 A=0,将A的全部元素赋为0 INTEGER , DIMENSION(4,5) :: A A=10, 的全部元素赋为10 A(:,:)=10 !或写成 A=10,将A的全部元素赋为10 再将A 1,3,5列元素赋为 列元素赋为470 A(:,1:5:2)=470 !再将A第1,3,5列元素赋为470 其中1:5:2的含义是从1变化到5 每次增加2 其中1:5:2的含义是从1变化到5,每次增加2。 1:5:2的含义是从 三元表达式的形式是: 初值:终值: 三元表达式的形式是: 初值:终值:步长 其中步长为1 步长可以省略。 其中步长为1时,步长可以省略。
第七章 数组
数组的概念 数组的说明与引用 数组元素的存储结构 数组的输入输出 给数组赋初值 数组的应用
7.1 数组的概念
数组: 数组:把具有相同数据类型的一批数据看成一个整体
INTEGER,PARAMETER::N=5 INTEGER I REAL P(N),AVER=0 DO I=1,N READ(*,*) P(I) AVER=AVER+P(I) END DO AVER=AVER/N DO I,N P(I)PRINT(*,*) P(I)-AVER END DO END
fortran程序设计第7章
![fortran程序设计第7章](https://img.taocdn.com/s3/m/356f744de518964bcf847c88.png)
7.1.3 数组元素的引用
数组元素的引用形式: 数组名(下标, ...)
7.2 数组的逻辑结构和存储结构
7.3 数据的输入和输出
假定有以下数组说明语句: REAL W(3, 2) INTEGER A(10) 将以A数组和W数组为例介绍对数组进行输入和 A W 输出操作的三种方式.
7.3.1 利用DO循环对数组进行输入和输出
7.3.2 在输入输出语句中用数组名来输入输 出整个数组
FORTRAN规定在输入输出语句中可以出现数组名.如: WRITE (*, *) A 相当于: WRITE (*, *) A(1), A(2), A(3), A(4), …, A(10) 输入输出语句中的数组名可以是任意维数的.例如以上说 明的3*2的W数组是二维的,可以用以下语句输出W数组: WRITE (*, *) W 相当于: WRITE (*, *) W(1, 1), W(2, 1), W(3, 1), W(1, 2), W(2, 2), W(3, 2)
[例7.3]顺序查找
PARAMETER (NA=10) INTEGER A(NA), X, P DATA A/55, 62, 93, 87, 10, 23, 38, 71, 35, 91/ READ (*, *) X WRITE (*, *) (A(I), I=1, NA) P=1 DO 10 WHILE (X .NE. A(P) .AND. P .LT. NA) P=P+1 CONTINUE IF (X .EQ. A(P)) THEN WRITE (*, *) X, P ELSE WRITE (*, *) X, 'Could not be found' END IF END
FORTRAN语言 --FORTRAN 77结构化程序设计
Fortran讲义 第七章
![Fortran讲义 第七章](https://img.taocdn.com/s3/m/47169fd6c1c708a1284a4477.png)
派生类 型的使 用
结构体的赋值
结构体成员单独赋值 用结构体构造函数赋值
结构体成员的引用:% 结构体成员的引用:
派生类 型的使 用
结构体的输入输出
整体操作时按派生类型定义的顺序 整体操作时不能包含可变大小的成员
exam_7_1
作为形参或函数的返回值
exam_7_2
BASIC_DATA.F90
派生类 型的使 用
结构体的声明
exam_7_1
变量声明语句中类型名用“type(派生类型名称) 变量声明语句中类型名用“type(派生类型名称)”替 换
结构体的初始化
派生类型定义时的初始化(缺省初始化) 派生类型定义时的初始化(缺省初始化) 结构体声明时用结构体构造函数初始化 显式初始化) 结构体构造函数初始化( 结构体声明时用结构体构造函数初始化(显式初始化) 语句中用结构体构造函数初始化 在data语句中用结构体构造函数初始化(显式初始化) 语句中用结构体构造函数初始化(显式初始化)
第七章 派生类型
派生类型 的基本概 念
派生类型用于表示包含不同类型 派生类型用于表示包含不同类型变量的集合 不同类型变量的集合
基本数据类型
指针类型
其它派生类型Leabharlann 派生类型的实例称为结构体派生类 型的定 义
type[[,<访问属性>]::]<派生类型名称> type[[,<访问属性>]::]<派生类型名称> [[,<访问属性>]::]<派生类型名称 [sequence] sequence] [private] private] {成员声明} 成员声明} end type [派生类型名称] 派生类型名称] <访问属性>→public|private 访问属性> public|
Fortran程序设计第7章属性的声明
![Fortran程序设计第7章属性的声明](https://img.taocdn.com/s3/m/464a9d36964bcf84b9d57b30.png)
第7章属性的声明最后,对于数据我们剩下的工作,就是如何运用FROTRAN语言来完整地加以描述。
FORTRAN语言完成对数据的描述的语法单位是数据声明语句,在前面2章里面,我们整理好问题当中需要涉及的数据及其结构之后,要以FORTRAN语言写下来,就是使用FORTRAN的声明语句,这些语句的句法设计保证能够完备的描述我们关于数据所需要说明的一切属性。
数据对象首先需要予以说明的当然就是它的类型,因此我们首先给出对象的类型声明语句,特别地,需要说明在最初FORTRAN标准里面遗留下来的一种数据类型描述方法——隐式类型描述法,然后讨论各种数据对象所可能具有的属性。
● 数组属性;● 指针属性;● 值特征;● 对象可访问性与使用属性;● 特征兼容性;● 自动数据对象;● 存储关联。
由于本章集中讨论FORTRAN的声明语句,而声明的对象除了数据之外,其他的程序对象,例如函数,过程等也需要声明其类型或属性,因此本章一并讨论对其他程序对象的声明:● 过程属性;● NAMELIST语句;7.1 属性及其声明方式所谓一个对象的属性,就是程序使用该对象的方式。
本章所讨论的属性的大体分类与作为其名称的关键词见表7-1:表7-1属性的分类及其关键词数据类型INTEGERREAL(以及DOUBLE PRECISION)COMPLEXLOGICALCHARACTERTYPE(派生类型的名称由用户命名)数组属性DIMENSIONALLOCATABLE指针属性POINTERTARGET值设置DATAPARAMETER对象可访问性与调用 PUBLICPRIVATEINTENTOPTIONALSAVE过程属性EXTERNALINTRINSIC对象关系属性NAMELISTEQUIVALENCECOMMON这些关键词的使用,或者说属性的声明有2种方式:●在类型声明时附加属性说明,这种语句形式侧重在给出数据对象,属性说明是附加的;●使用单独的属性声明语句,这种语句形式侧重在说明属性本身。
fortran课件 第7章_2_11
![fortran课件 第7章_2_11](https://img.taocdn.com/s3/m/13b00398c77da26925c5b09a.png)
§7-2 自定义函数(FUNCTION)
与子程序的不同: 1)会返回一个数值,并对储存返回值的函数名要有 类型声明;
2)调用时不用call,但调用前要对自定义函数名声 明;
§7-3 全局变量(COMMON)
• 定义一块共享的内存空间,不同的程序单元之间 (函数之间,函数与主程序之间),声明的变量 使用相同的内存位置,以传递数据。 • FORTRAN 77使用 • 两种:1)无名公用区;2)有名公用区 • 各程序单元COMMON中的变量类型必须按位置一 一对应 • 用Block data 模块赋初值
write(6,"(I2,'th enter, n=',I2)") localcount, n … ans = n * fact(temp) write(6,"(I2,'th exit, n=',I2,' ans=',I5, ' count=', i3)")
localcount, n, ans, count
2)函数数组参数传递时,虚参数组不要超过实参数组的范围。 编译器不会辨别,但执行会出错. 3) 数组在声明时,要使用常数来确定数组的尺寸,当作为函 数的虚参,可用虚参变量来声明数组的尺寸。 4)作为函数虚参的多维数组,最高一维的大小可以不声明, 其他维必须声明尺寸。 三)传递函数 • 传递的参数可以是函数名(function,subroutine) • 作实参的函数名要先声明。 • 函数声明时,intrinsic 表示库函数;external表示自定义的 函数。
字符串数组的传递:传递字符串变量时可以不声明长度
不同于数组,不能写为str(8) Str(8:8)传递单个内存空间
fortran中数组的定义 -回复
![fortran中数组的定义 -回复](https://img.taocdn.com/s3/m/16722166abea998fcc22bcd126fff705cc175ca3.png)
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-第七章 过程
![_fortran-第七章 过程](https://img.taocdn.com/s3/m/0f1a167ff5335a8102d2204b.png)
Fortran 提供了一个特定机制,使得可以在构建 最终的程序前容易地独立开发和调试子任务。 可以把每个子任务作为独立的程序单元来编码, 该独立程序单元被称为外部过程( external procedure) ,每个外部过程都可以独立于程序 中的其它子任务(过程)来进行编译、调试。 Fortran 中有两种外部过程:子程序 ( subroutine) 和函数子程序( function subprogram)(或者就叫函数, function)
7.1 子程序
SUBROUTINE 语句标志着子程序的开始,定义了子 程序名和相关参数表。子程序名必须遵循标准的 Fortran 命名规则由字母和数字组成,最大长度可以 到31 个字符,但第一个字符必须是字母。参数表含 有一系列变量和/或数组,这些变量、数组的值将从 调用程序传递给子程序。这些变量被称为形参 (dummy agument ,形式参数),子程序实际上没有 为它们真正分配任何内存空间。对从调用程序单元传 递来的实际参数(实参)来说它们仅仅是占位符。
每个子程序是一个独立的程序单元,它开始于 SUBROUTINE 语句,结束于END SUBROUTINE 语句。 当程序调用子程序时,调用程序的执行暂时被 挂起,子程序执行部分开始运行。当运行到子 程序的RETURN 语句或END SUBROUTINE 语 句时,调用程序又开始运行调用子程序语句下 面的程序代码。 任何可执行程序单元都可以调用子程序,包括 另一个子程序。(但是,子程序不能调用它自 身,除非它被定义为递归类型(recursive) )。
Fortran95/2003程序设计
第七章 过程
本章学习目标: • 学习Fortran 语言中的过程如何帮助实现好的程序设 计 • 了解子程序与函数的不同 • 掌握创建和调用子程序 • 理解并学会使用INTENT 属性 • 理解使用地址传递方案实现变量传递 • 理解显式结构的形参数组、不定结构的形参数组和不 定大小的形参数组之间的区别 • 理解为什么不再使用不定大小的数组 • 掌握在过程之间使用模块实现共享数据 • 理解显式接口,以及为什么在模块内部定义过程更好 • 能创建并且调用用户自定义函数 • 掌握如何把Fortran 过程调用参数传递给其他过程。
fortran第7章1
![fortran第7章1](https://img.taocdn.com/s3/m/680634274b35eefdc8d333dc.png)
Fortran 90
例1:1,3,5,7,9 : , , , , 存储在数组A中 存储在数组 中
为第一个元素, 的各元素为: ①设1为第一个元素,数组 的各元素为: 为第一个元素 数组A的各元素为 A(1)、 (2)、 (3)、 (4)、 (5) )、A( )、 )、A( )、 )、A( )、 )、A( ) ( )、 为第0个元素 的各元素为: ②设1为第 个元素,数组 的各元素为: 为第 个元素,数组A的各元素为 A(0)、 (1)、 (2)、 (3)、 (4) )、A( )、 )、A( )、 )、A( )、 )、A( ) ( )、 为第-1个元素 的各元素为: ③设1为第 个元素,数组 的各元素为: 为第 个元素,数组A的各元素为 A(-1)、 (0)、 A(1)、 (2)、 (3) )、A( )、 ( )、 )、A( )、 )、A( ) ( )、 存储在数组B中 例2:98,89,88,95.5 存储在数组 中 : , , , 78,67,87,66 , , , 67,75,88,88 , , , 设表中行号为1, , ,列号为1, , , 设表中行号为 ,2,3,列号为 ,2,3,4 则 78为B(2,1) 75为B(3,2) 为 ( , ) 为 ( , )
Fortran 90 §7.1 § 7.2 数组
变量与数组的区别
简单变量是用来存储一个数据 数组是用来存储一批类型相同 被称为元素的有序 一批类型相同的 有序数据 数组是用来存储一批类型相同的被称为元素的有序数据 例:1,3,5,7,9 , , , , 存储在数组A中 存储在数组 中
例:3个学生 门课程的成绩 个学生4门课程的成绩 个学生 98,89,88,95.5 , , , 78,67,87,66 , , , 67,75,88,88 , , , 一维
Fortran教程第七章数组
![Fortran教程第七章数组](https://img.taocdn.com/s3/m/a74b033710661ed9ad51f362.png)
7.1 数组的概念
在许多应用中,我们需要存储和处理大量数据。在我们迄今涉及的程序设计问 题中,我们能够利用少量的存储单元,处理大量的数据。这是因为我们能够处 理每一个单独的数据,然后再重复使用存储该数据的存储单元。在有些应用中, 为了其后的处理,需要保存所处理的数据。例如,要计算和打印一个班学生的 平均成绩以及每个成绩与平均成绩的差。在这种情况下,在计算每个成绩与平 均成绩的差之前,首先计算平均成绩,然后计算每个成绩与这个平均成绩的差。 因此必须能够两次考查学生成绩。由于我们不愿意两次重复输入学生成绩,我 们希望在第一步时,将每个学生的成绩保存于单独的存储单元中,以便在第二 步时重新使用它们。在输入数据时,用不同的名字引用每一个存储单元将是烦 琐的。如果有100个成绩要处理,我们将需要一个长的输入语句,其中每个变量 名被列出一次。我们也需要100个赋值语句。
(接上页) DO I=1,2 DO J=1,3 WRITE(*,10)MAT(I,J) END DO END DO 10 FORMAT(1X,F6.2) END 程序运行时,输入数据的方法如下: 45 76 56 78 -67 56
第七章 数组
7.1 数组的概念 7.2 数组的说明与引用 7.3 数组元素的存储结构 7.4 数组的输入输出 7.5 给数组赋初值 7.6 数组的应用
在迄今所涉及的程序设计问题中,我们都是采用FORTRAN的基本数据类型(整型、 实型、复型、逻辑型和字符型)定义单个的变量来对数据进行描述。在科学计算中, 常常需要保存具有相同类型的一批数据,这时如果仍然用单个变量来表示,不但十 分麻烦,有时根本无法处理。为了描述现实问题中的各种复杂的数据,FORTRAN 语言还提供了由基本数据类型按某种机制组成的结构数据类型。数组是一种结构数 据类型,本章介绍它的定义与应用。
fortran语言教程第7章
![fortran语言教程第7章](https://img.taocdn.com/s3/m/b073da36eefdc8d376ee325c.png)
第7章 模块化程序设计7.1 程序的模块化思想引例: 输入M 、N ,计算并输出:)!(!!n m n m c n m -= 源程序(I ) READ(*,*) M, N DO 5 WHILE(M.LT.N) READ(*,*) M,N 5 CONTINUE X=M T=1.0 DO 10 I=1,X T=T*I 10 CONTINUE S=T X=N T=1 DO 20 I=1,X T=T*I 20 CONTINUE S=S/T X=M-NT=1DO 30 I=1,XT=T*I30 CONTINUES=S/TWRITE(*,*) SEND源程序(II )FUNCTION FA(N)T=1.0DO 10 I=1,NT=T*I 程序段110 CONTINUEFA=TENDREAD(*, *)M, NDO 5 WHILE(M.LT.N)READ(*,*) M,N5 CONTINUE 程序段2S=FA(M)/(FA(N)*FA(M-N))WRITE(*,*) SEND源程序(I )中,加粗的3段完全相同,我们可以将其提炼出来,独立写成一个程序单位,构成一个子程序单元,写成源程序(II )的形式,这样的程序就形成了主程序和子程序的多部分、多模块的格局。
一般而言,模块是指可以独立存盘,并且可以分别编译的源程序文件,是一种构成FORTRAN 程序的独立成分。
即是说子程序与主程序可以分别编辑存盘、编译,此时即形成所谓的多模块程序。
程序模块化的优点是:(1)体现了算法和功能上的模块化,符合人们解决复杂问题的一般思路,也为结构化程序设计提供了有力支持。
(2)使复杂的软件开发工作可以化整为零,便于多人分工协作,减少开发人员之间的相互干扰与重复劳动,从而有利于缩短开发周期,节省开发费用,提高软件质量。
(3)可以设计一块,调试一块,设计完成,调试也随之完成,能够方便有效地防止数据之间的相互干扰,增加整个系统的稳定性与可靠性。
fortran数组指针用法
![fortran数组指针用法](https://img.taocdn.com/s3/m/287f19878ad63186bceb19e8b8f67c1cfad6eead.png)
Fortran数组指针用法1.引言F o rt ra n是一种面向科学计算的高级编程语言,被广泛应用于数值模拟、科学计算和工程分析等领域。
在F ort r an中,数组是一种非常常见的数据结构,而指针则是一种用于处理数组的重要工具。
本文将介绍F o rt ra n中的数组和指针的基本概念以及它们之间的关系,帮助读者更好地理解和应用F ort r an中的数组指针。
2.数组基础数组是一种由相同类型的元素组成的数据结构。
在Fo rt ra n中,数组可以是一维的、二维的,甚至更高维度的。
数组的元素可以是整数、实数、字符或者其他数据类型。
2.1一维数组的声明和使用一维数组在F or tr an中的声明格式如下:```f or tr an[类型],d im en si on([大小])::[数组名]```其中,[类型]表示数组的元素类型,[大小]表示数组的大小,[数组名]表示数组的名称。
例如,下面的代码声明了一个整型数组:```f or tr ani n te ge r,di me ns ion(10)::m y_ar ra y```要访问数组中的元素,可以使用数组名和对应元素的下标,下标从1开始计数。
例如,要访问数组my_a rr ay的第一个元素,可以使用m y_a rr ay(1)。
2.2多维数组的声明和使用多维数组在F or tr an中的声明格式与一维数组类似,只需在d i me ns io n后面依次指定各个维度的大小即可。
例如,下面的代码声明了一个二维实数数组:```f or tr anr e al,d im en si on(3,4)::m y_ma tr ix```要访问二维数组中的元素,需要使用对应的行下标和列下标,例如m y_m at ri x(2,3)表示第2行第3列的元素。
3.数组指针数组指针是一种特殊的指针类型,它可以指向数组的某个位置或者整个数组。
通过数组指针,我们可以方便地访问数组中的元素,甚至在不知道数组大小的情况下也能进行操作。
Fortran数组详细介绍
![Fortran数组详细介绍](https://img.taocdn.com/s3/m/5b5fc325fe00bed5b9f3f90f76c66137ee064f92.png)
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数组介绍大全](https://img.taocdn.com/s3/m/dcf0c546eef9aef8941ea76e58fafab068dc4456.png)
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数组时,可以在程序运行过程中根据需要为数组分配内存空间。
fortran经典课件-第七章 文件
![fortran经典课件-第七章 文件](https://img.taocdn.com/s3/m/b4b7c28102d276a200292e81.png)
23
9.5二进制文件的操作
使用二进制文件来做直接读取时,OPEN命令中的RECL字段所设 置的整数n值所代表的大小会随着编译器不同而改变 Visual Fortran中默认视为n*4bytes,G77会视为n bytes
执行后所生成的LIST.BIN文件
直接访问文件时,默认值就 是unformatted,Form省略 在Visual Fortran中,文件 LIST.BIN的大小应该是 36bytes,因为总共输出9个 浮点数,而每个浮点数占 4bytes
2007-10-21
15
2007-10-21
16
Fortran 90添加的功能
2007-10-21
17
其他文件运行命令
BACKSPACE(UNIT=number,ERR=errlabel,IOSTAT=i ostat)
把文件的读写位置退回一步,其他字段参考前面命令
ENDFILE(UNIT=number,ERR=errlabel,IOSTAT=iostat)
使用这个命令会把目前文件的读写位置变成文件的结尾
REWIND(UNIT=number,ERR=errlabel,IOSTAT=iostat)
把文件的读写位置倒回文件开头
CLOSE(UNIT=number,STATUS=string,ERR=errlabel,I OSTAT=iostat)
把文件关闭,不再进行读写操作 STATUS=‘KEEP’:会在文件关闭后、保留住这个文件,这是默 认的状态 STATUS=‘DELETE’:会在文件关闭后,消除这个文件 2007-10-21 18
FORM='FORMATTED' OR 'UNFORMATTED‘ FORMATTED:表示文件使用“文本文件”格式来保存 UNFORMATTED:表示文件使用“二进制文件”格式来保存 默认值为FORMATTED STATUS='NEW' OR 'OLD' OR 'SCRATCH' OR 'UNKNOWN‘ 用来说明要打开一个新文件或是已经存在的旧文件,默认值为 UNKNOWN NEW:表示这个文件原本不存在、是第一决打开 OLD:表示这个文件原本就存在 REPLACE:文件若存在,会重新创建一次,原本的内容消失。文 件若不存在,则创建新文件 SCRATCH:表示要打开一个暂存盘、这个时候可以不指定文件名 称。程序会自动取一个文件名,暂存盘会在程序结束后自动删除 UNKNOWN:由各编译器自定义。通常会同REPLACE的效果
hh-fortran-07-1数组
![hh-fortran-07-1数组](https://img.taocdn.com/s3/m/bddb5060453610661fd9f44d.png)
类型按隐含规则确定,或者用类型说明语句再次说明其类型; ➢ 类型说明语句与DIMENSION语句必须在程序中所有可执行语
句与DATA语句之前。 ➢ 说明数组时,其下标下限与上限均不能是变量或算术表达式,
➢ 给数组取一个名字叫数组名。所以数组名代表 一批数据。
用类型说明语句说明数组
定义一个数组包括以下几个方面:
➢确定数组的名字; ➢确定数组的类型; ➢确定数组的维数和大小; ➢指出数组每一维的下界与上界。
INTEGER B(-2:45,0:10),Y(0:10,2:15)
一般形式
数组名(维说明符[,维说明符]…) ➢ 数组说明符中,维说明符的个数就是数组的维
数组的存储结构
二维数组中的各元素在计算机中是按列存储的,即先 存储第一列,再存储第二列,以此类推,最后存储数 组中的最后一列。
DIMENSION A(5,6)
数组的存储结构
三维数组中的各元素的存放顺序为:按页标从小到大 存放,而在每一页中又是按列存放。
一般形式
对数组赋初值
DATA 数组名/数据表/, …
数组元素的引用
➢ 在FORTRAN 77中,除了在输入输出语句中之外, 其他场合不允许对数组进行整体操作,只能对数组 的元素逐个进行操作。但在FORTRAN 90中,允许 对数组进行整体操作。例如 INTEGER,DIMENSION(4,5) :: A A(:,:)=100 A(:,1:5:2)=470
在输入语句中使用隐含DO循环 在输出语句中使用隐含DO循环 使用隐含DO循环进行输入输出时应注意的问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AVER=AVER+P(I) END DO AVER=AVER/N DO I=1,N
!求平均成绩
PRINT *,P(I)-AVER
END DO END
!输出成绩与平均成绩之差
7.2 数组的说明与引用
7.2.1 数组说明的内容 程序中要使用任何一个数组都必须给予说明,即说明该数组的名 字、类型、维数及大小,以便编译系统给数组分配相应的存储单元。 (1) 数组名:数组和变量一样,也用符号名来命名。 (2) 数组的类型:数组的类型由数组元素的类型来决定。
ቤተ መጻሕፍቲ ባይዱ
7.2.3 数组元素的引用
数组元素是通过数组元素名来引用的。数组元素名的一般形式是: 数组名(下标表达式[,下标表达式]…)
其中下标表达式为整型表达式,如果不是整型,则自动取整之后再使用。下 标表达式的个数必须等于该数组的维数,每个下标表达式的值必须在相应的 维下界到维上界之间。
注意:
(1) 数组元素表示数组中每一个成份的值,数组元素名表示数组元素的名 字。但在实际使用中,数组元素与数组元素名并不加区分。由于数组元素名 是用数组名后面带下标表示的,所以数组元素名叫下标变量。下标变量可以 和简单变量等同使用。
例如 REAL(8),DIMENSION(0:10) :: A,B,C INTEGER,DIMENSION(4,5) :: D,E 说明了三个双精度型数组A,B,C,它们各含有11个元素。说明了两个整型数组 D,E,它们各含有4×5共20个元素。 在说明数组时,也可以在数组名后面给出维说明,这时以该数组名后面的维 说明为准。例如 REAL,DIMENSION(0:10) :: A,B(20),C(4,5,3) 说明A为A(0:10),而B,C分别为B(2)和C(4,5,3)。
其中参数Array代表被检测的数组变量。参数Dim代表数组变量的维,该参 数省略时,获取数组变量所有维的下标上界和下标下界。分析下面的程序: INTEGER,DIMENSION(4,5) :: A A=100 PRINT *,UBOUND(A,1),LBOUND(A,1) PRINT *,UBOUND(A),LBOUND(A) END
DIMENSION B(3:15),IX(10) 说明了整型数组B和实型数组IX。
2. 用类型说明语句说明数组 这也是FORTRAN 77说明数组的一种方法,在FORTRAN 90中继续予以使 用。类型说明语句可以直接说明数组的全部特性,其一般格式为: 类型符 数组说明符[,数组说明符]… 例如 CHARACTER*6 CH(-10:10,5:9)*8 REAL KK(8) REAL(8) SOLUTION(30) 分别说明了字符型数组CH,数组元素的长度为8。还有实型数组KK和双精度 数组SOLUTION。 3. 同时使用DIMENSION语句和类型说明语句说明数组 这是FORTRAN 90增加的说明数组的方法。其一般格式为: 类型符, DIMENSION(维说明符[,维说明符]…) :: 数组名[,数组名]…
输出结果为:
4 4 1 5 1 1
即数组A第一维下标上界为4,下界为1。第二个输出语句输出了数组A每一 维的下标上界和下标下界
7.3 数组元素的存储结构
高级语言编译系统为一个数组分配一片连续的内存单元,每个存储单元 存放一个数组元素。对于一维数组按下标从小到大的顺序存放,而对于 二维数组是如何存放的呢?不同的高级语言有不同的处理方式。 FORTRAN 90规定,数组元素在内存中是按列的顺序连续存放的。就二 维数组而言,存放时先存入第一列元素,然后第二列,…,直到全部元 素存完为止。对于多维数组,首先改变第一个下标,其次改变第二个下 标,直至最后一个。例如,有下列语句:
INTEGER A(50),B(3,4)
REAL C(3,2,3) 编译程序将为一维数组A开辟50个连续存储单元,数组元素按下标表达 式值由小到大顺序存放,如图7.1(a)所示。二维数组B占有12个连续存储 单元,各数组元素按列的顺序存放,即先依次存放第一列中各元素,然 后依次存放第二列中各元素,最后依次存放第三列中各元素,如图7.1(b) 所示。三维数组C占有18个连续存储单元,首先按列的顺序存放第一页 上的元素,然后是第二页上的元素按列存放,最后是第三页上的元素按 列存放,如图7.1(c)所示。每小长方框表示一个存储单元,序号表示存储 单元的顺序号。
注意: (1)DIMENSION语句是非执行语句,必须放在程序单位的可执行语句之前。 (2)用DIMENSION语句只说明了数组的名字、维数、大小等特性,但不能 说明数组的类型,这时,数组类型的说明方法与变量名相同,即: ① 如无特别指明,数组的类型服从I-N规则。 ② 用类型说明语句指明数组的类型。
例如
DIMENSION JU(20),NAME(-10:10,1:2)
REAL JU CHARACTER NAME
说明了一维实型数组JU,共有20个元素。还有二维字符型数组NAME,共有42个 元素,每个元素的定义长度为1。 ③ 用IMPLICIT语句指明数组的类型 例如
IMPLICIT INTEGER(A-C),REAL(I,J)
7.1 数组的概念
在许多应用中,我们需要存储和处理大量数据。在我们迄 今涉及的程序设计问题中,我们能够利用少量的存储单元,处 理大量的数据。这是因为我们能够处理每一个单独的数据,然 后再重复使用存储该数据的存储单元。在有些应用中,为了其 后的处理,需要保存所处理的数据。例如,要计算和打印一个 班学生的平均成绩以及每个成绩与平均成绩的差。在这种情况 下,在计算每个成绩与平均成绩的差之前,首先计算平均成绩, 然后计算每个成绩与这个平均成绩的差。因此必须能够两次考 查学生成绩。由于我们不愿意两次重复输入学生成绩,我们希 望在第一步时,将每个学生的成绩保存于单独的存储单元中, 以便在第二步时重新使用它们。在输入数据时,用不同的名字 引用每一个存储单元将是烦琐的。如果有100个成绩要处理,我 们将需要一个长的输入语句,其中每个变量名被列出一次。我 们也需要100个赋值语句。
(3)在FORTRAN 77中,除了在输入输出语句中之外,其他场合不允许对 数组进行整体操作,只能对数组的元素逐个进行操作。但在FORTRAN 90中,允许对数组进行整体操作。例如 INTEGER,DIMENSION(4,5) :: A A(:,:)=100 A(:,1:5:2)=470 说明了4×5整型数组A,先将A的全部元素赋为100,再将A第1,3,5列元素 赋为470。其中1:5:2是一个三元表达式,可作为数组元素的下标表达式。 1:5:2的含义是从1变化到5,每次增加2。三元表达式更一般的形式是: 初值:终值:步长 其中步长为1时,步长可以省略。显然,如果用三元表达式作为数组元素 的下标,则引用的不是一个数组元素,而是一个数组片段。 FORTRAN 90提供内部函数UBOUND和LBOUND来获取数组变量所有 维或某一维的下标上界和下标下界。具体调用格式为: UBOUND(Array,[Dim]) LBOUND(Array,[Dim])
维说明符的一般形式是: [维下界:]维上界 维下界与维上界之间用冒号“:”分隔,下界为1时,可以省略不写。维下界 和上界都只能是整型表达式,叫做维界表达式。维界表达式的值必须是整数 值,而且维上界的值必须大于维下界的值。 在维界表达式中,允许出现整常量、整型变量或者星号“*”。不允许出现 函数或数组元素。如果在维界表达式中出现整型变量名,则该数组称作可调 数组。如果出现星号,则只能用星号作为最后维的上界,这样的数组叫做假 定大小的数组。可调数组和假定大小数组只能出现在子程序中,不允许在主 程序中使用。 7.2.2 数组说明的方法 在FORTRAN 90中,数组可以通过DIMENSION语句、类型说明语句或同 时使用DIMENSION语句和类型说明语句进行说明。 1. 用DIMENSION语句说明数组 使用DIMENSION语句说明数组是FORTRAN 77说明数组的一种方法,在 FORTRAN 90中继续使用。一般格式是: DIMENSION 数组说明符[,数组说明符]…
引入数组以后,让一批同类型数据共享一个名字,不必为每一对象都定一个名 字。数组元素是按顺序号连续存放的,我们可以用循环语句控制下标的变化,这 给在同一方式下处理多个同类型数据带来极大方便。例如,要计算和打印N名学 生的平均成绩以及每个成绩与平均成绩的差。程序如下: PARAMETER(N=5) INTEGER I REAL P(N),AVER DO I=1,N READ(*,*)P(I) !输入成绩并存入P数组 !求成绩之和 !定义P数组
DO J=1,2
READ(*,*)MAT(J,I) END DO END DO (接下页)
(接上页)
DO I=1,2 DO J=1,3 WRITE(*,10)MAT(I,J) END DO END DO 10 FORMAT(1X,F6.2) END 程序运行时,输入数据的方法如下: 45
第七章 数组
7.1 数组的概念 7.2 数组的说明与引用
7.3 数组元素的存储结构
7.4 数组的输入输出 7.5 给数组赋初值 7.6 数组的应用
在迄今所涉及的程序设计问题中,我们都是采用 FORTRAN的基本数据类型(整型、实型、复型、 逻辑型和字符型)定义单个的变量来对数据进行描 述。在科学计算中,常常需要保存具有相同类型 的一批数据,这时如果仍然用单个变量来表示, 不但十分麻烦,有时根本无法处理。为了描述现 实问题中的各种复杂的数据,FORTRAN语言还 提供了由基本数据类型按某种机制组成的结构数 据类型。数组是一种结构数据类型,本章介绍它 的定义与应用。