fortran教程[技巧]

  • 格式:pdf
  • 大小:513.72 KB
  • 文档页数:15

前言 FORTRAN90的新特性

1、淘汰了所有转移语句,增加了新的控制结构,使程序结构化。 增加了结构块,模块及过程的调用灵活形式。

2、加强数组的算法功能。

提出超载概念与实现方法。

提高了文字处理功能。

3、更接近自然语言与公式演算。 允许在字符数据用选取不同种别。

特别:

语句书写对列的要求放宽:一般一行写一条语句(也可也多个语句,用“;”分隔),没有标

号区、续行区、正文区的区别。一行最多为132列,可以在任何列处中断语句,中断处写

一个“&”,随后在下一行任意列处继续。一个语句最长不能超过2640个字符。语句结尾不可有标号、符号。

注释以“!”开始,可以位于任何位置。

***以下只讨论与FORTRAN77不相同处。0第一章 FORTRAN90的基本语句

第一节 类型说明语句

1、变量名全长不得超过31个字符。

2、变量类型定义:

INTEGER::X,Y REAL::A

COMPLEX::B,C,D

3、建议淘汰隐式说明,在程序说明部分一开始就写:

IMPLICIT NONE

向系统声明不使用隐式说明。 4、可以在变量说明时就置初值。如:

REAL::X=1.1,Y,Z=2.2

5、种别——决定变量的精度和所占内存单元数。

a.如:REAL(KIND=2)::X 说明变量X为REAL型,种别为2。KIND是种别说明关键字。

如没有种别说明,则采用系统省缺值。 b.有关函数:KIND(X) 返回X的种别参数。当X取常数0时,返回省缺种别参数。如KI

ND(0)、KIND(0.0)、KIND(.FALSE.)、KIND('A')分别 返回整型、实型、逻辑型、字符型的

省缺种别参数。

SELECTED_REAL_KIND(N,M) 返回种别参数,使之满足十进制有效位为N, 值范围在

10**(-M)和10**M之间的实数。 SELECTED_INT_KIND(N,M) 与上类似,选择整型类别。

c.常数类别表示

对数值型常数、逻辑型常数用后缀法,即在常数后加一下划线,再跟种别参数。如31_2。

对字符型常数,用前缀法,即把种别参数放在前,再加下划线,再跟字符常数。如5_'a

bc'。 6、属性 a.常数名属性。如:INTEGER,PARAMETER::Y=12 说明Y为常数,在

程序中不能改变其值。

b.数组属性。如:INTEGER(KIND=2),DIMENSION(-3:10)::X 说明X 是数组(-3:10)。

c.意图属性。只用于子程序中。如:

INTEGER.INTENT(IN)::X 说明X用来传入。

INTEGER.INTENT(OUT)::X 说明X用来传出。

INTEGER.INTENT(INOUT)::X 说明X先传入值,再传出。 d.没有属性的只是基本变量。

第二节 赋值语句

1、赋值时,自动进行类型、种别转换。对逻辑型、字符型要求类型 一致。字符型要求种别一致。

2、复型常数形式:(a,b)。

3、类型转换函数:

INT(X), INT(X,KIND),

REAL(X), REAL(X,KIND), CMPLX(X,Y), CMPLX(X,Y,KIND)。

4、对数组所作的基本函数操作相当于对数组内每个元素施加该操作。

5、不同种别参数的数据运算时,结果取决精度或允许值范围较大的

那个种别参数。

第三节 读写语句

1、读语句

READ 格式说明,输入表

READ *,输入表 READ (通道号,*)输入表

带控制信息的读语句:

READ (说明符1,说明符,...,2说明符n)输入表

说明符共有10个,一般形式为:关键字=指定参数。

a. UNIT=通道号:通道号为整型常数或变量,也可以用*代替当前 设备。“UNIT=”可省。

b. FMT='(格式说明)':“FMT=”可省。

c. IOSTAT=整型变量:可选,用于指明输入输出时的状态。如输入

正常,则变量值为零;如出错,为正整数;如遇文件结束无数可

读,为负整数。 2、写语句

WRITE (部件号,格式说明)输出表

PRINT 格式说明,输出表

PRINT *,输出表

WRITE (说明符1,说明符2,...,说明符n)输出表 3、表控格式 a.输入复数时要加括号。

b.当需要输入几个连续无效值时,可输入r*,r是重复系数。若某

个数以后的所有数都无效,可用/表示。如: 2.1,2*,5.1

2.1,3.1/

c.输出时一般每个数占16列,靠右对齐,左补空格。0

第二章 选择结构

第一节 IF语句

IF (条件) 语句

关系操作符: >,>=,<,<=,==,/=。

逻辑操作符:.AND. , .OR. , .NOT. , .EQV. , .NEQV.。 其中EQV是逻辑与或,NEQV是逻辑异或。

优先级:.NOT. > .AND. > .OR. > .EQV. .NEQV.。

第二节 选择结构

1、无名结构

IF (条件) THEN

...

ELSE

... END IF

2、有名结构

结构名:IF (条件1) THEN

...

ELSE IF (条件2) THEN [结构名] ...

ELSE [结构名]

...

END IF 结构名

结构名的作用仅仅是为了阅读方便。

第三节 CASE结构

1、一般形式

SELECT CASE(情况表达式) CASE(情况1)

...

CASE(情况2)

...

... CASE DEFAULT ...

END SELECT

情况表达式是整型表达式,逻辑型表达式,或字符型表达式。 在一个CASE中,可以写多种情况,用“,”分隔。如果是连续值,

也可以用“始值:终值”表示。

情况也可以写成表达式,但取值不得重复。

如果情况表达式是字符型的,情况的种别参数必须一致。

2、有名CASE结构 结构名:SELECT CASE(情况表达式)

CASE(情况1) [结构名]

...

CASE(情况2) [结构名]

... CASE DEFAULT [结构名]

...

END SELECT 结构名0

第三章 循环结构

第一节 不带循环变量的DO循环

1、一般形式

[结构名:] DO

... END DO [结构名]

2、出口语句——退出循环

EXIT [结构名]

3、继续循环语句——跳过剩余DO块,继续下一轮循环

CYCLE [结构名]

第二节 带循环变量的DO循环

1、一般形式

[结构名:]DO 循环变量=循环初值,循环终值,循环增值 ...

END DO [结构名]

2、EXIT、CYCLE语句有效。

3、隐DO语句——只能作为输入输出的一部分出现

(I/O表列,循环变量=初值,终值,增值) 可以嵌套。0

第四章 非数值型数据、数组

第一节 逻辑型数据

变量说明 LOGICAL[(KIND=整常数表达式)][,属性1,...,属性n]::实体表

第二节 字符型数据

1、字符常数

用''或""界定。引号内如有'或",则写成两个''或""。

字符常数的种别实际是字体选择,省缺为ASCII码。

2、变量说明 CHARACTER(LEN=整常数表达式[,KIND=整常数表达式])[,属性1,&

...,属性n]::实体表

a. “LEN=”和“KIND=”可以省略,此时顺序不可变。长度可以用

"*"表示暂不确定,与程序中实际需求一致。

b. 作为子程序哑元时,长度为*表示与实元一致。 c. 如变量长度不一致,还可以在实体表中用“变量名*长度”来说

明。

3、赋值时长度以赋值号左侧变量为准,不足尾部补空格,多余截去

尾部。用Aw格式输入时,w与变量定义长度相比,补尾截头。用Aw

格式输出时,补头截尾。表控输入时,补尾截尾。 4、字符函数

ICHAR(X) 字符转换为数值序号

CHAR(X[,KIND]) 数字序号转换为字符

LEN(X) 求字符串长

LEN_TRIM(X) 求字符串长,不计尾部空格 INDEX(X,Y) 在X中找Y的起始位置,无则返回零

TRIM(X) 去掉字符串尾部空格

LGE(X,Y) X>=Y?

LGT(X,Y) X>Y?

LLE(X,Y) X<=Y? LLT(X,Y) X

其中LGE、LGT、LLE、LLT是对字符比较,也可用关系操作符。

第三节 数组

1、数组属性描述

DIMENSION(下界:上界,...)

下界与上界一般只能取整常数表达式,在子程序中作哑元时,维界

中允许出现变量,也可以省缺,也可以只写出下界。下界为1时可

以省略。 2、数组片段

数组名(整型表达式:整型表达式) 或

数组名(整型表达式:整型表达式:整型表达式)

第三个表达式描述的是所取元素下标的跨度,跨度为1时省略即为

前者。后者称为三元表达式。 三元表达式中,某一维也可以用一个一维整型向量代替,也可以用