FORTRAN 知识点总结
FORTRAN
第2章FORTRAN90基础知识:
程序单元的概念:
fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。每个程序只有一个主程序单元。各单元体的程序体形式上相同。
程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。
语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。
字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。 数据结构:
整型INTEGER (34-2 下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回;
实型REAL ,小数形式和指数形式;复型COMPLEX (种别类型参数值取实部与虚部中较大者);
字符型CHARACTER ,由一对单撇号或双撇号之间的字符序列组成;
逻辑型LOGICAL 。
派生数据类型TYPE ;
数组 INTEGER,DIMENSION(1,50)::A ,可直接对数组元素进行运算如
3*A,SQRT(A);
字符子串,在字符串CHARACTER(LEN=80)::ROW 中,ROW(1:3)就表示字符串
ROW 中第1到第3个元素组成的子串。
变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。
第3章基本语句:
类型说明语句: 类型说明(种别说明),属性说明::变量名表
尽量避免把两个实数作相等或不相等的比较。淘汰隐式说明IMPLICIT NONE 种别说明:种别参数即对可移植数据精度和范围进行选择的机制
KIND(X) 返回变元X 的种别参数值
SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。N 指十进制有效位数,m 指明值范围内以10为底的幂次。
种别表示方法:数值型常数、逻辑型常数的种别用后缀法表示,字符型用前缀法。 属性说明:PARAMETER 常量名属性,如INTEGER,PARAMETER::N=5(N 值不可更改);DIMENSION 数组属性,如INTEGER DIMENDION (1:10)::X 。
算术表达式:**乘方。-*/**或或求函数值括号+→→→→
ABS 绝对值;MAX 最大值;MIN 最小值;SQRT 平方根;MOD 求余数。
COS,SIN,TAN,ATAN,LOG 自然对数,LOG10 常用对数,EXP 指数,SIGN 符号。 输入:READ(部件号,格式说明)输入 如READ(5,'(I7)')X,Y I7表示每行输入一个整数,每个数占7个字符。表控格式 READ *,输入表;READ(*,*)输入表。
输出:WRITE(部件号,格式说明)输出表 WRITE(6,'(1X,2F6.2)')X,Y 1X 表示一个空格,F 表示作实型编辑,6表示每个数占六列,2表示小数部分占两列,F 前的2表示重复系数。 省略设备号 PRINT 格式说明,输出表
表控格式 WRITE(*,*)X,Y PRINT*,X,Y
第4章选择结构程序设计:
关系与逻辑表达式:> < == >= <= /=; .NOT. .AND. .OR. .EQV.
.NEQV.
混合运算符的优先级别:逻辑运算符关系运算符算数运算符括号→→→ IF 语句与IF 结构的区别:
IF 语句:IF (e) S
IF 结构:IF (e1) THEN
块1
ELSE IF(e2) THEN
块2
ELSE
块 n
END IF
CASE 结构:SELECT CASE(MONTH)
CASE(2)
DAYS=28
CASE(4,6,9,11)
DAYS=30
.........
END SELECT
第5章循环结构程序设计:
不带循环变量的DO : [结构名:] DO
循环体
END DO[结构名]
EXIT 语句:停止循环,将控制转移到当前循环之外。 EXIT [DO 结构名]
CYCLE 语句:在循环执行到该语句时,跳过循环体在它后面的那些语句,再从循环体的第1条语句开始执行。 CYCLE [DO 结构名]
带循环变量的DO : [结构名:] DO [,] v=u1,u2,[u3]
循环体
END DO[结构名]
DO While 结构: [结构名:] DO WHILE (逻辑表达式)
循环体
END DO[结构名]
隐DO 循环:(list,v=u1,u2,u3) 如 READ*,(A(I),I=1,5)
第6章程序单元和过程:
函数子程序:必须提供一个值,这个值赋给结果变量,成为函数的值。
[RECURSIVE] FUNCTION 函数名 (虚元表) RESULT (结果名)
子例子程序:本身并不返回值,其计算结果全部通过虚实结合传递给主调程序。必须通过CALL 语句来调用。 CALL 子程序名(实元表)
[RECURSIVE] SUBROUTINE 子程序名(虚元表)
接口块:INTERFACE
必须使用:实元是关键字变元时;实元是缺省的可选变元时;一个外部函数使用系统中的内部运算符扩展了原有的功能时;外部过程扩展了赋值号的使用范围时;使用一个类属名调用过程时;调用一个外部过程,该过程的结果是一个数组。
虚实结合:实元和虚元的个数相等,相应位置上的类型一致。
关键字变元: 虚元名=实元表达式
可选择变元:
OPTIONAL 属性:一虚元的类型说明语句中有OPTIONAL 属性便是可选变元。
PRESENT(X)函数:用来检查它的自变量X 是否在程序执行部分出现。当X
出现时,函数值为“真”,否则为“假”。
虚过程:如果虚元是一个过程名时,作为虚元的过程称为虚过程。只有潜逃调用至少两层以上时才能用虚过程。
模块:MODULE 包含程序说明语句和过程,但不能直接运行。其他程序引用模块实际就是将该模块中的全部语句复制到本程序单元,并且所有与模块中的名字相同的变量彼此取值相通,共享存储单元。
模块名对程序来说是全局的,不能与本程序中的任何程序单元名、外部名相同,也不得与模块内的任何局部名重名。
引用: USE 模块1,模块2,....,模块n
USE 模块名,ONL Y :实体名表
递归:递归调用是指过程内直接或间接地调用自己。
内部过程:如果一个过程不是写在主程序外,而是写在主程序单元之内,作为主程序内包含的一个过程,则该过程为内部过程。
通常没有说明语句,一般没有虚元。
类属过程:允许不同类型的实元与同一虚元结合,放宽了虚实结合必须一致的条件。 超载运算符:标准FORTRAN 运算符通过恰当的过程扩展其功能,使其具有新的含义。 自定义运算符。
超载赋值:指把赋值的含义扩展到新的数据类型。赋值号两边的类型必须相容。
第7章数组:
数组基本概念:用DIMENSION 属性说明之,同时给出数组元素的起止下标;使用数组时,即可直接使用数组某个元素,也可直接使用数组名。
数组片段:代表数组中的部分元素,可连续也可不连续。
如:A(3:6) 或 A(10:30:2) 步长是2
数组构成器:赋值4个元素的数组:A=(/1,2,3,4/) 其中(/1,2,3,4/)就是数组构成器
例:A=(/(SQRT(REAL(I)),I=1,4)/) 或 A=(/V(3),V(6),V(7),V(9),/)
二维数组按列存放:)2,3()2,2()2,1()1,3()1,2()1,1(A A A A A A →→→→→
RESHAPE 函数:将数组构成器中的一维数据重新构成任意形的数组。
例:A=RESHAPE(SOURCE=(/1,2,3,4,5,6,7,8,9,-1,-2,-3/)),SHAPE=(/3,4/)
数组形式:常数组 REAL,DIMENSION(3:5+7)::A
可调数组 REAL,DIMENSION(M,N)::A
假定形状数组 REAL,DIMENSION(:,:)::A
动态数组(可变) REAL,DIMENSION(:),ALLOCATABLE::A
数组做变元,只能作为过程的实元不能是虚元。
数组运算:数组赋值A=B;数组表达式A+B (对应元素相加);数组与标量
A-5 (每个元素减5);数组作为内在函数的实元B=ABS(A) B与A形状相同。
数组内在函数:求数组大小SIZE(A);求数组最大值元素MAXV AL(A);求数组最小值元素MINV AL(A);求数组最大值元素下标MAXLOC(A);求数组最小值元素下标MINLOC(A).;数组各元素之和SUM(A);数组各元素之积PRODUCT(A);求数组维的下界LBOUND(A);求数组维的上界UBOUND(A);数组转置TRANSPOSE(A).
屏蔽数组赋值:如WHERE (A<0) B=0 (相应元素)
第8章字符型数据:
字符常量:''或''''之间的若干字符
字符变量(特有长度属性):如CHARACTER(LEN=10,KIND=2)::A
字符子串:字符变量名(e1:e2)
如NAME=''DAQING PETROLUEM'' 则NAME(1:6)='DAQING' 字符表达式:指用字符运算符吧字符常量、字符变量或字符数组元素等字符型数据连接起来的有意义的式子。
字符运算符只有一个,就是字符连接符“//”。如'HE'//'LLO'='HELLO'
字符关系表达式,比较按字符的代码进行。两字符串比较,以第一次出现不同字符的比较结果为准,字符个数不够时以空格补齐。
字符函数:求字符长度函数LEN(String)或LEN-TRIM(String);除去字符串尾部空格函数TRIM(String);字符与字符序号相互转化,字符向字符序号ICHAR(CH)或IACHAR(CH),字符序号向字符CHAR(I)或ACHAR(I);子串位置函数INDEX(String1,String2),String2是String1的子串,结果为正整数表示String2在String1最左边的子串的起始位置;字符串比较函数LGE(String1,String2) 表示是1否大于等于2,LGT、LLE、LLT分别表示是否大于、是否小于或等于、是否小于;首、尾部空格调整函数调左函数(把空格全调到尾部)ADJUSTL(String)或调右函数(把空格全调到首部)ADJUSTR(String)
第9章派生类型和指针:
派生类型:TYPE[存取方式描述::] 派生类型名
成员组i 类型说明
END TYPE [派生类型名]
说明:TYPE(派生类姓名)::变量名[,...]
指针:REAL POINTER::PT1,PT2 PT1=>X
PT1=>PT2 表示PT1指向PT2所指的目标,PT1和PT2都指向Y;PT1=PT2 表示将PT2所指的目标的值赋给PT1所指的目标,X=Y。
可以有多个指针指向同一个目标,但不允许一个指针同时指向多个目标。
指针不但可以指向实型、整型目标,还可以指向字符型和逻辑型目标。
第10章数据文件:OPEN(连接信息表) CLOSE(关闭信息表)
UNIT=ut,ut是一个文件号,必须是无符号整数;FILE=fe,fe是字符型数据,代表文件名;STATUS=ss,ss是用户给出的字符串,表示文件的状态,可以是
'OLD','NEW','REPLACE','SCRATCH','UNKNOW缺省';ACCESS=as,as是字符串,可为
'SEQUENTIAL顺序的'缺省,'DIRECT直接的';FORM=fm,fm是字符串,可为'FORMA TTEED 有格式的','UNFORMA TTEED无格式的';RECL=rl,rl是正整数,用来记录文件长度,单位字节;ACTION=an,an为字符串,可为'READ','WRITE','READWRITE'缺省;BLACK=bk,bk 为字符串,可为'NULL','ZERO';IOSTA T=it,it为整型变量,OPEN未出错值为0,出错后有正整数值;ERR=label,若打开文件操作出错,转到标号为lable的语句处。
FORTRAN 90 程序编程规范
FORTRAN 90 程序编程规范 Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。使编出的程序更易懂、易于维护。 1 语言选择 数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。 Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。 2 Fortran 90 的新特性 2.1.1 建议使用的Fortran 90 新特性 建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。 尽量使用数组下标三元组,这样可优化并减少所需的代码行数。为提高可读性,要在括号内表明数组的维数,例如: 1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:) 2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。例如:2dArray(: , 2:len2) = scalar *( & Another2dArray(:, 1:len2 -1) & - Another2dArray(:, 2:len2) & ) 对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。 在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代 替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。新的表示方法更接近标准的数学符号 在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。
(完整)Fortran经典编程语言笔记(你值得拥有)
FORTRAN笔记 2014.10.07 目录 第七讲_FORTRAN的基本知识.ppt (2) FORTRAN语言程序设计初步 (2) FORTRAN源程序的书写格式(以77为例) (2) 变量 (2) 变量类型 (2) 算术运算符和运算优先级 (3) 赋值语句 (3) 参数语句(PARAMETER语句) (3) END语句 (3) PAUSE语句 (3) 逻辑运算和选择结构 (4) 关系表达式 (4) FORTRAN中数组的定义及使用 (4) 其他 (5) 1. fortran语言定义CHARACTER*6 TTL(14,3),CNAM(400)是什么意思? (5) 2. fortran里character*10 是什么意思 (5) 3. Fortran中kind是什么函数? (5)
第七讲_FORTRAN的基本知识.ppt FORTRAN语言程序设计初步 FORTRAN是Formula Translation的缩写,意为“公式翻译”,它是为科学、工程问题或企事业管理中的那些能够用 数学公式表达的问题而设计的,其数值计算的功能较强。 常用的是FORTRAN77和FORTRAN90两种标准。 1、一个程序由若干个程序单位组成。主程序和每一个子程序分别是一个独立的程序单位。 2、每一个程序单位都是以“END”结束的。 3、一个程序单位包括若干行。 1)语句行。由一个FORTRAN语句组成。 2)非语句行,即注释行。 4、FORTRAN程序中的语句可以没有标号,也可以有标号,根据需要而定。标号的作用是标志一个语句以便被其 他语句引用。 5、一个程序单位中各类语句的位置是有一定规定的。 6、FORTRAN源程序必须按一定的格式书写。 FORTRAN源程序的书写格式(以77为例) 每一行有80列,分别如下: 1、第1-5列为标号区。一行中第一列为“C”或“*”,该行即被认为是注释行。 2、第6列为“续行标志区”,如果在一行的第6列上写一个非空格和非零的字符,则该行作为其上一行的续行。 3、第7-72列为语句区。 4、第73-80列,注释区。 变量 变量名:一个变量需要用一个名字(变量名)来识别。在同一个程序单位中不能用同一个变量名代表两个不同的变 量。 FORTRAN的变量名按以下规则选定: 1)第一个字符必须是字母,即变量名必须以字母开头; 2)在一个字母后面可以跟1-5为数字或字母。 如果选定的变量名超过6个字符,则只有前面6个字符有效。 注:在变量名中大写与小写字母是等价的。 变量类型 整型变量Integer、实型变量Real、双精度变量Double Precision、复型变量Complex、逻辑型变量Logical和字符型变量Character。 1、隐含约定(I-N规则) FORTRAN规定:在程序中的变量名,凡以字母I,J,K,L,M,N六个字母开头的,即认为该变量为整型变量。 在程序中,凡是变量名以字母I,J,K,L,M,N,i,j,k,l,m,n开头的变量被默认为整型变量,以其他字母开头的变量被 默认为实型变量。 2、用类型说明语句确定变量类型 1)INTEGER语句(整型说明语句) 2)REAL语句(实型说明语句) 3)DOUBLE PRECISION语句(双精度说明语句) 4)COMPLEX语句(复型说明语句) 5)LOGICAL语句(逻辑型说明语句)
fortran语法手册
1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→() 2 FORTRAN77变量类型 2.1 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 2.4 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例: DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 2.5 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/-1.0,-1.0,-1.0/ DATA A/-1.0/,B/-1.0/,C/-1.0/ DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)
DATA CHN/10*' '/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则 程序中的变量名,不分大小写; 变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效; 一行只能写一个语句; 程序的第一个语句固定为PROGRAM 程序名称字符串 某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容; 某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容; 某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行; 某行的第7至72字符位为语句区,语句区内可以任加空格以求美观; 某行的第73至80字符位为注释区,80字符位以后不能有内容。 4 FORTRAN77关系运算符 .GT. 大于 .GE. 天于或等于 .LT. 小于 .LE. 小于或等于 .EQ. 等于 .NE. 不等于 .AND. 逻辑与 .OR. 逻辑或 .NOT. 逻辑非 .EQV. 逻辑等 .NEQV. 逻辑不等 运算符优先级由高到低顺序为:()→**→*或/→+或-→.GT.或.GE.或.LT. 或.LE.或.EQ.或.NE.→.NOT.→.AND.→.OR.→.EQV.或.NEQV 5 FORTRAN77语句
fortran程序案例题汇编(14道)
1.Fibonacci数列定义如下: F1=1 F2=1 F n=F n-1+F n-2 (n>2) 求Fibonacci数列的前30项。 integer f(30),i f(1)=1 f(2)=2 do i=3,30 f(i)=f(i-1)+f(i-2) enddo print*,f end 2.输入10个学生的总分,求每个学生的名次integer s(10),a(10),i,j do i=1,10 read*,s(i) enddo do i=1,10 a(i)=1 do j=1,10 if(s(i)