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时省略即为
前者。后者称为三元表达式。 三元表达式中,某一维也可以用一个一维整型向量代替,也可以用