fortran90-知识点整理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例1.设J=10,K=-12,L=12
WRITE (*,”(I3,I5,I7)”)J,K,L
□10□□-12□□□□123
注意:
1.数字在指定的区域内右端对齐,不足w则左边补空格。
2.负数的符号也包含在字段宽度内
3.如果应输出的列数超过了规定的字段宽度,则不输出有效数据,以w个*填充。
4、BN, BZ:Blank interpretation
3、假IF的下一个语句
注意:
1.右边通常为一条且只一条可执行语句。
错例:IF (A<B) T=A;A=B;B=T
2.不能为以下语句:
END、另一个逻辑IF、块IF、ELSIF、ENDIF、DO
错例:IF(X<2)END
3.常应用于简单的条件赋值或条件转移(在循环结构中)
4、不论条件真假都执行IF的下一个语句
注意:5/2=2 1/2=0!!
运算对象类型不同时,系统一般先转换成相同类型后再运算
转换规则是:较低级的类型转换为较高级的类型
数据类型隐含的高低次序为(由低到高):
整型→实型→双精度→复型
例:8/5+2.0*5/2=6.0(逐步转化)
赋值语句
1、类型要求
逻辑型、字符型的赋值语句要求“=”两边类型相同
数值型赋值,不区别整型、实型和复型
2、种别方面
字符型要求种别相同
其余类型的e、V种别允许不同
输入输出语句
1、I/O的对象——列在<I/O表>中
I/O是相对于内存而言的,
键盘属于输入设备,
显示器属于输出设备,
优盘、硬盘既是输入设备,又是输出设备。
2、I/O的方向及语句
READ(U,f)<I/O表> U:设备(部件) f:格式
COMPLEX(X,Y,KIND):将X,Y转换为复型,以KIND的值作为种别参数
查询函数
KIND()
SELECTED_INT_KIND()
SELECTED_REAL_KIND
PRECISION()
RANGE()
……
不轻易使用整型量除整型量1.0/2 2.0**(-1)
运算对象类型相同时,运算结果的类型为同一类型
IF结构可:无名或有名
IF结构的取名与变量的取名方法相同
IF结构名:IF (e1) THEN
块1
ELSEIF (e2) THEN[IF结构名]
块2
…
ELSEIF(en) THEN[IF结构名]
块n
ELSE [IF结构名]
块n+1
END IFIF结构名
同一IF结构中的结构名一定要一致!
CASE结构
使用范围:多分支结构
3.如果均不匹配,则执行默认块
4.执行END Select的下一个语句
情况表达式:
整型变量、逻辑变量、字符型变量或相应的表达式
不能是实型或复型表达式
表达式列表(情况选择器):
只能是常量,不能为变量,可有多条语句;
类型与情况表达式类型应一致,尤其字符型时种别参数必须一致,但长度可以不同;
,(逗号)分隔符表示分隔单个值的列表。
Eg : SIGN(-3.0,2.0)=3.0
SIGN(3.0,-2.0)=-3.0
某些函数参数只能为实型
如:log(2.0) (loG(2)错)
转换函数
函数名
含义
FORTRAN举例
INT(X)
实型转换整型、
复型的实部转换整型
INT(2.3)=2
INT((1.2,3.5))=1
REAL(X)
整型转换实型、
Fortran90关于变量说明的新功能:
1.在变量说明的同时,可以给变量赋初值。
INTEGER::I=5,J=126
REAL::X=7.2,Z,W=774.2
2.在说明变量的同时也可说明其种别
REAL(KIND=4)::X,Y或REAL(4)::X,Y
3.在说明变量的同时,还可说明变量的属性
INTEGER,PARAMETER::I=5,J=123
TYPE(STUDENT)::PERSON
变量的赋值:
PERSON=(”COMPUTER”,”92_2”,”LI LIN”,21)
成员的表示:
PERSON%CLASS=“92_2”
PERSON%NAME=“LI LIN”
主程序其他限制
主程序的可执行部分不能包含有RETURN语句或者ENTRY语句。
程序名对可执行程序是全局的,而且不得于该可执行程序中的任何其它程序单元名、外部过程名或公用块名相同,也不得于主程序内的任何局部名相同。
Specifies interpretation of blanks in numeric fields(空格是否当0处理)仅用于输入格式语句,如
read“(BN,2I3)”,I,J
例2.如果将格式串改为:
“(I3,I5.4,I7.5)”
则输出:
□10-0012□□00123
例3.如果L=123456
WRITE
其中:输入READ语句
输出PRINT语句,只输出到显示器
WRITE语句,适合任何输出设备
U(部件)、文件号)
表控格式I/O(*):系统约定的格式。
f(格式)基本格式(自定格式)I/O:按用户要求的格式组织I/0。
带控制信息表的I/O:
I:碰到回车(ENTER)为一个记录。
注意:
1. IF—then标记语句的开始,ENDIF与之匹配,标记语句块结束
2.条件表达式写法
IF结构的缺省形式:
缺省ELSE块:
IF(lexp)THEN
语句体1
ENDIF
缺省THEN块:
IF(lexp)THEN
ELSE
语句体2
ENDIF
多分支结构
方法1:转化为单分支,逻辑IF语句并列
方法2:逐次二分,转化为块IF结构嵌套
O:一行为一个记录。
程序执行过程中按表控格式输入数据
各数据间有分隔符:,或空格
类型匹配:整型:带小数点只取整数部分;
复数:(实部,虚部);
字符:‘一串字符’:赋值时长度转化或一串字符即‘’可省略。
逻辑:以T或F作为第一个字母的字符串(点号1个、空格多个在前忽略)
3.输入的数据必须是常数,不能是变量和表达式
如:TYPE STUDENT (定义开始)
CHARACTER(LEN=20)::DEPARTMENT
CHARACTER(LEN=10)::CLASS
CHARACTER(LEN=15)::NAME
INTEGER::NUMBER(成员定义)
END TYPE STUDENT(定义结束)
派生类型变量的定义:
关系运算符:
>、>=、<、<=、==(等于)、/=(不等于) (常用)
.GT.、.GE.、.LT.、.LE.、.EQ.、.NE.
注意
1、每个关系表达式中的关系运算符只准出现1次,运算符两侧都是表达式;
错例:2<X<3(2.LT.X.LT.3)或(a>b)<c
2、运算对象:
关系运算符两边的运算对象类型应相容:
□10-0012□123456
!!Iw.m:m<位数,则按照实际数输出
实型编辑符
1.编辑符格式
[r]Fw.d将数据按小数形式输出
[r]Ew.d将数据按指数形式输出
[r]Gw.d根据数据大小决定采用E或F格式
r—重复系数
w—字段宽度(总宽度)
d—小数部分宽度
F编辑符
功能:用于实数编辑,小数形式的输出(定点数:单精度实数,4个字节,7个有效数字)
如输入2+1,则出错。
4.输入数据个数:
1)不得少于变量的个数;
2)可分行输入;
3)多余的数据不起作用
5.空格可以多个,/表示输入数据结束,后面的数据被取消,没有输入数据的变量值为原值;
Read*,A,B,C
输入:2,1/3
结果:A=2 B=1 C=0
6、如果几个连续变量需要赋同一个值,可以使用重复因子r,即r*[c]:r为重复数
类型运算符优先级
括号()1
算术运算**2
*,/3
+,-4
关系运算>,>=,<,<=,==,/=5
逻辑运算.NOT.6
.AND.7
.OR.8
.EQV.,.NEQV.9
IF语句
使用范围:特殊单分支
语句写法:
IF(条件)一条语句
例:IF (X>0) PRINT*,X
执行过程:
1、计算条件表达式的值
2、真右边语句IF的下一个语句
SELECT CASE(情况表达式)
CASE(情况选择器1)
block1(块1)
CASE(情况选择器2)
block(块2)
--------
CASE(情况选择器n)
block n
[CASE DEFAULT
默认块]
END SELECT
执行过程:
1.计算情况表达式的值
2.顺序匹配各情况选择器,执行相应的block1,再到END Select下一个语句
嵌套过多容易出错,也不易维护,因此应尽量减少嵌套的层次;
方法是把条件分细,列成多条ELSEIF语句,ELSEIF结构为:
Elseif结构:
IF(e1)THEN
block1
ELSEIF(e2)then
block2
ELSEIF(e3)then
block3
--------
ELSE
block n
ENDIF
IF结构的取名
模块的引用采用语句:
USE模块1,模块2,…
基本语句概述
程序的最基本的语句主要有四种:类型说明语句、赋值语句、输入语句、输出语句。运用这些基本的语句,就可以编写一些简单的程序。
内在函数
FORTRAN 90配置的函数称为内在函数。内在函数分为三种:
基本函数:
SIGN符号
函数值:|A1|(若A2>0)
-|A1|(若A2<0)SIGN(A1,A2)
按子程序与主程序的位置关系分为内部过程和外部过程。
2.4.3模块
模块也是一种在程序单元之外独立编写的程序单元。它有独特的形式,即模块程序单元内没有可执行语句,除了说明语句外,最多包含内部过程。模块的主要作用是供其它程序单元引用。
程序单元引用模块,实际是将模块内的全部语句复制到本程序单元。因此模块起共享及复制的作用。
在主程序的作用范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作用。
主程序内的任何内部过程的定义必须跟在CONTAINS语句之后。
2.3.2子程序
子程序是可以完成某一独立算法或功能的程序单元,但它功能的具体体现要通过主程序(或子程序)的调用来实现。
当实型数值小于0.0(负数)时,则w>=n+d+2
当实型数值大于或等于0.0时,则w>=n+d+1
用此来确定w的宽度
注意:
1.w包括数符和小数点两位
2.若数据小于w位,则左边补空格
3.输出值时舍入,而不是截断
4.如果是科学计数法则转换小数形式
字符型编辑A
A用来编辑字符型变量,它不关心该字符串的长短如何。例:
错例:A= =.TRUE. 2<‘A’
复型:只能进行= =、/=。不能比较大小
字符型:可以进行各种关系运算
逻辑运算符(5个)
.NOT. a:求反运算,
a.AND.b:a与b同时为真,表达式值才为真
a.OR.b:a与b有一个为真,表达式值就为真
a.EQV.b:a与b值相等,表达式值为真
a.NEQV.b:a与b值不相等,表达式值为真
IF结构
使用范围:二分支结构
书写格式:
IF(条件)THEN !块IF语句
语句体1(then块)!由若干语句组成
ELSE ! ELSE语句
语句体2(else块)!由若干语句组成
ENDIF ! ENDIF语句
IF结构执行过程:
计算条件的值
真THEN块ENDIF的下一个语句
假ELSE块ENDIF的下一个语句
4*0.5,2*3,2*’AB’,3*(1.0,-1.0)
输入输出的三种不同的格式:
1.表控格式的输入输出
2.有格式的输入输出
3.带控制信息表的输入输出
整型编辑符:Iw[.m]
1.I编辑符控制输出:
功能:用于整型数据的输入输出
格式:IwIw.mrIw
w—输入输出数据字段总宽度
m—至少m位数字
r—为重复系数
Ps :PARAMETER属性
(1)功能:用一个符号代表一个常量,称为符号常量(常数)
(2)写法:
Real,Parameter::G=9.8 &&说明类型时赋值
(3)位置:位于可执行语句之前
REAL,DIMENSION(1:10)::A
2.3.6派生数据类型
根据需要而由基本数据类型定义新的数据类型。在一个派生类型中可包含多个基本类型。
CHARATER*5 A,B,C
READ(*,’(A,A,A)’)A,B,C
WRITE(*,’(A,2X,A,2X,A)’)A,B,C
END
输入:ABC□DBASICFORMAT
结果:ABC□D□□BASIC□□FORMA
!!!2X表示□□
X编辑描述符
功能1:在输出时产生空格,它的一般形式为:nX
关系表达式与逻辑表达式
复型的实部转换实型
REAL(8)=8.0
REAL((1.2,3.5))=1.2
COMPLEX(X,Y)
将X,Y合成为复型
COMPLEX(2.3,1.5)= (2.3,1.5)
INT(X,KIND):将X值转换为整型,以KIND的值作为种别参数
REAL(X,KIND):将X值转换为实型,以KIND的值作为种别参数
WRITE (*,”(I3,I5,I7)”)J,K,L
□10□□-12□□□□123
注意:
1.数字在指定的区域内右端对齐,不足w则左边补空格。
2.负数的符号也包含在字段宽度内
3.如果应输出的列数超过了规定的字段宽度,则不输出有效数据,以w个*填充。
4、BN, BZ:Blank interpretation
3、假IF的下一个语句
注意:
1.右边通常为一条且只一条可执行语句。
错例:IF (A<B) T=A;A=B;B=T
2.不能为以下语句:
END、另一个逻辑IF、块IF、ELSIF、ENDIF、DO
错例:IF(X<2)END
3.常应用于简单的条件赋值或条件转移(在循环结构中)
4、不论条件真假都执行IF的下一个语句
注意:5/2=2 1/2=0!!
运算对象类型不同时,系统一般先转换成相同类型后再运算
转换规则是:较低级的类型转换为较高级的类型
数据类型隐含的高低次序为(由低到高):
整型→实型→双精度→复型
例:8/5+2.0*5/2=6.0(逐步转化)
赋值语句
1、类型要求
逻辑型、字符型的赋值语句要求“=”两边类型相同
数值型赋值,不区别整型、实型和复型
2、种别方面
字符型要求种别相同
其余类型的e、V种别允许不同
输入输出语句
1、I/O的对象——列在<I/O表>中
I/O是相对于内存而言的,
键盘属于输入设备,
显示器属于输出设备,
优盘、硬盘既是输入设备,又是输出设备。
2、I/O的方向及语句
READ(U,f)<I/O表> U:设备(部件) f:格式
COMPLEX(X,Y,KIND):将X,Y转换为复型,以KIND的值作为种别参数
查询函数
KIND()
SELECTED_INT_KIND()
SELECTED_REAL_KIND
PRECISION()
RANGE()
……
不轻易使用整型量除整型量1.0/2 2.0**(-1)
运算对象类型相同时,运算结果的类型为同一类型
IF结构可:无名或有名
IF结构的取名与变量的取名方法相同
IF结构名:IF (e1) THEN
块1
ELSEIF (e2) THEN[IF结构名]
块2
…
ELSEIF(en) THEN[IF结构名]
块n
ELSE [IF结构名]
块n+1
END IFIF结构名
同一IF结构中的结构名一定要一致!
CASE结构
使用范围:多分支结构
3.如果均不匹配,则执行默认块
4.执行END Select的下一个语句
情况表达式:
整型变量、逻辑变量、字符型变量或相应的表达式
不能是实型或复型表达式
表达式列表(情况选择器):
只能是常量,不能为变量,可有多条语句;
类型与情况表达式类型应一致,尤其字符型时种别参数必须一致,但长度可以不同;
,(逗号)分隔符表示分隔单个值的列表。
Eg : SIGN(-3.0,2.0)=3.0
SIGN(3.0,-2.0)=-3.0
某些函数参数只能为实型
如:log(2.0) (loG(2)错)
转换函数
函数名
含义
FORTRAN举例
INT(X)
实型转换整型、
复型的实部转换整型
INT(2.3)=2
INT((1.2,3.5))=1
REAL(X)
整型转换实型、
Fortran90关于变量说明的新功能:
1.在变量说明的同时,可以给变量赋初值。
INTEGER::I=5,J=126
REAL::X=7.2,Z,W=774.2
2.在说明变量的同时也可说明其种别
REAL(KIND=4)::X,Y或REAL(4)::X,Y
3.在说明变量的同时,还可说明变量的属性
INTEGER,PARAMETER::I=5,J=123
TYPE(STUDENT)::PERSON
变量的赋值:
PERSON=(”COMPUTER”,”92_2”,”LI LIN”,21)
成员的表示:
PERSON%CLASS=“92_2”
PERSON%NAME=“LI LIN”
主程序其他限制
主程序的可执行部分不能包含有RETURN语句或者ENTRY语句。
程序名对可执行程序是全局的,而且不得于该可执行程序中的任何其它程序单元名、外部过程名或公用块名相同,也不得于主程序内的任何局部名相同。
Specifies interpretation of blanks in numeric fields(空格是否当0处理)仅用于输入格式语句,如
read“(BN,2I3)”,I,J
例2.如果将格式串改为:
“(I3,I5.4,I7.5)”
则输出:
□10-0012□□00123
例3.如果L=123456
WRITE
其中:输入READ语句
输出PRINT语句,只输出到显示器
WRITE语句,适合任何输出设备
U(部件)、文件号)
表控格式I/O(*):系统约定的格式。
f(格式)基本格式(自定格式)I/O:按用户要求的格式组织I/0。
带控制信息表的I/O:
I:碰到回车(ENTER)为一个记录。
注意:
1. IF—then标记语句的开始,ENDIF与之匹配,标记语句块结束
2.条件表达式写法
IF结构的缺省形式:
缺省ELSE块:
IF(lexp)THEN
语句体1
ENDIF
缺省THEN块:
IF(lexp)THEN
ELSE
语句体2
ENDIF
多分支结构
方法1:转化为单分支,逻辑IF语句并列
方法2:逐次二分,转化为块IF结构嵌套
O:一行为一个记录。
程序执行过程中按表控格式输入数据
各数据间有分隔符:,或空格
类型匹配:整型:带小数点只取整数部分;
复数:(实部,虚部);
字符:‘一串字符’:赋值时长度转化或一串字符即‘’可省略。
逻辑:以T或F作为第一个字母的字符串(点号1个、空格多个在前忽略)
3.输入的数据必须是常数,不能是变量和表达式
如:TYPE STUDENT (定义开始)
CHARACTER(LEN=20)::DEPARTMENT
CHARACTER(LEN=10)::CLASS
CHARACTER(LEN=15)::NAME
INTEGER::NUMBER(成员定义)
END TYPE STUDENT(定义结束)
派生类型变量的定义:
关系运算符:
>、>=、<、<=、==(等于)、/=(不等于) (常用)
.GT.、.GE.、.LT.、.LE.、.EQ.、.NE.
注意
1、每个关系表达式中的关系运算符只准出现1次,运算符两侧都是表达式;
错例:2<X<3(2.LT.X.LT.3)或(a>b)<c
2、运算对象:
关系运算符两边的运算对象类型应相容:
□10-0012□123456
!!Iw.m:m<位数,则按照实际数输出
实型编辑符
1.编辑符格式
[r]Fw.d将数据按小数形式输出
[r]Ew.d将数据按指数形式输出
[r]Gw.d根据数据大小决定采用E或F格式
r—重复系数
w—字段宽度(总宽度)
d—小数部分宽度
F编辑符
功能:用于实数编辑,小数形式的输出(定点数:单精度实数,4个字节,7个有效数字)
如输入2+1,则出错。
4.输入数据个数:
1)不得少于变量的个数;
2)可分行输入;
3)多余的数据不起作用
5.空格可以多个,/表示输入数据结束,后面的数据被取消,没有输入数据的变量值为原值;
Read*,A,B,C
输入:2,1/3
结果:A=2 B=1 C=0
6、如果几个连续变量需要赋同一个值,可以使用重复因子r,即r*[c]:r为重复数
类型运算符优先级
括号()1
算术运算**2
*,/3
+,-4
关系运算>,>=,<,<=,==,/=5
逻辑运算.NOT.6
.AND.7
.OR.8
.EQV.,.NEQV.9
IF语句
使用范围:特殊单分支
语句写法:
IF(条件)一条语句
例:IF (X>0) PRINT*,X
执行过程:
1、计算条件表达式的值
2、真右边语句IF的下一个语句
SELECT CASE(情况表达式)
CASE(情况选择器1)
block1(块1)
CASE(情况选择器2)
block(块2)
--------
CASE(情况选择器n)
block n
[CASE DEFAULT
默认块]
END SELECT
执行过程:
1.计算情况表达式的值
2.顺序匹配各情况选择器,执行相应的block1,再到END Select下一个语句
嵌套过多容易出错,也不易维护,因此应尽量减少嵌套的层次;
方法是把条件分细,列成多条ELSEIF语句,ELSEIF结构为:
Elseif结构:
IF(e1)THEN
block1
ELSEIF(e2)then
block2
ELSEIF(e3)then
block3
--------
ELSE
block n
ENDIF
IF结构的取名
模块的引用采用语句:
USE模块1,模块2,…
基本语句概述
程序的最基本的语句主要有四种:类型说明语句、赋值语句、输入语句、输出语句。运用这些基本的语句,就可以编写一些简单的程序。
内在函数
FORTRAN 90配置的函数称为内在函数。内在函数分为三种:
基本函数:
SIGN符号
函数值:|A1|(若A2>0)
-|A1|(若A2<0)SIGN(A1,A2)
按子程序与主程序的位置关系分为内部过程和外部过程。
2.4.3模块
模块也是一种在程序单元之外独立编写的程序单元。它有独特的形式,即模块程序单元内没有可执行语句,除了说明语句外,最多包含内部过程。模块的主要作用是供其它程序单元引用。
程序单元引用模块,实际是将模块内的全部语句复制到本程序单元。因此模块起共享及复制的作用。
在主程序的作用范围内的说明不得包含OPTIONAL语句、INTENT语句、PUBLIC语句或它们的等价属性,在主程序内SAVE语句不起作用。
主程序内的任何内部过程的定义必须跟在CONTAINS语句之后。
2.3.2子程序
子程序是可以完成某一独立算法或功能的程序单元,但它功能的具体体现要通过主程序(或子程序)的调用来实现。
当实型数值小于0.0(负数)时,则w>=n+d+2
当实型数值大于或等于0.0时,则w>=n+d+1
用此来确定w的宽度
注意:
1.w包括数符和小数点两位
2.若数据小于w位,则左边补空格
3.输出值时舍入,而不是截断
4.如果是科学计数法则转换小数形式
字符型编辑A
A用来编辑字符型变量,它不关心该字符串的长短如何。例:
错例:A= =.TRUE. 2<‘A’
复型:只能进行= =、/=。不能比较大小
字符型:可以进行各种关系运算
逻辑运算符(5个)
.NOT. a:求反运算,
a.AND.b:a与b同时为真,表达式值才为真
a.OR.b:a与b有一个为真,表达式值就为真
a.EQV.b:a与b值相等,表达式值为真
a.NEQV.b:a与b值不相等,表达式值为真
IF结构
使用范围:二分支结构
书写格式:
IF(条件)THEN !块IF语句
语句体1(then块)!由若干语句组成
ELSE ! ELSE语句
语句体2(else块)!由若干语句组成
ENDIF ! ENDIF语句
IF结构执行过程:
计算条件的值
真THEN块ENDIF的下一个语句
假ELSE块ENDIF的下一个语句
4*0.5,2*3,2*’AB’,3*(1.0,-1.0)
输入输出的三种不同的格式:
1.表控格式的输入输出
2.有格式的输入输出
3.带控制信息表的输入输出
整型编辑符:Iw[.m]
1.I编辑符控制输出:
功能:用于整型数据的输入输出
格式:IwIw.mrIw
w—输入输出数据字段总宽度
m—至少m位数字
r—为重复系数
Ps :PARAMETER属性
(1)功能:用一个符号代表一个常量,称为符号常量(常数)
(2)写法:
Real,Parameter::G=9.8 &&说明类型时赋值
(3)位置:位于可执行语句之前
REAL,DIMENSION(1:10)::A
2.3.6派生数据类型
根据需要而由基本数据类型定义新的数据类型。在一个派生类型中可包含多个基本类型。
CHARATER*5 A,B,C
READ(*,’(A,A,A)’)A,B,C
WRITE(*,’(A,2X,A,2X,A)’)A,B,C
END
输入:ABC□DBASICFORMAT
结果:ABC□D□□BASIC□□FORMA
!!!2X表示□□
X编辑描述符
功能1:在输出时产生空格,它的一般形式为:nX
关系表达式与逻辑表达式
复型的实部转换实型
REAL(8)=8.0
REAL((1.2,3.5))=1.2
COMPLEX(X,Y)
将X,Y合成为复型
COMPLEX(2.3,1.5)= (2.3,1.5)
INT(X,KIND):将X值转换为整型,以KIND的值作为种别参数
REAL(X,KIND):将X值转换为实型,以KIND的值作为种别参数