Fortran 90 笔记(一)
来源:互联网 发布:西门子编程电揽电源 编辑:程序博客网 时间:2024/06/02 04:14
拖延症晚期(:з」∠),一边看官方文档一边做笔记
官方文档ISO/IEC 1539 : 1991 (E):ftp://ftp.nag.co.uk/sc22wg5/N001-N1100/N692.pdf
Section 1 : Overview
stmt for statement
attr for attribute
decl for declaration
spec for specifier
def for definition
int for integer
desc for descriptor
arg for argument
op for operator
这些是在文档中所用缩写
is introduces a syntactic class definition
or introduces a syntactic class alternative
[ ] encloses an optional item
[ ] … encloses an optionally repeated item which may occur zero or more times
■ continues a syntax rule
文档所用语
Section 2 : Fortran terms and concepts
R201 executable-program is program-unit
[program-unit] …
An executable-program must contain exactly one main-program program-unit.R202 program-unit is main-program
or external-subprogram
or module
or block-dataR1101 main-program is [ program-stmt ]
[ specification-part ]
[ execution-part ]
[ internal-subprogram-part ]
end-program-stmt
R203 external-subprogram is function-subprogram
or subroutine-subprogram
R1215 function-subprogram is function-stmt
[ specification-part ]
[ execution-part ]
[ internal-subprogram-part ]
end-function-stmt
R1219 subroutine-subprogram is subroutine-stmt
[ specification-part ]
[ execution-part ]
[ internal-subprogram-part ]
end-subroutine-stmt
R1104 module is module-stmt
[ specification-part ]
[ module-subprogram-part ]
end-module-stmt
R1110 block-data is block-data-stmt
[ specification-part ]
end-block-data-stmt
R204 specification-part is [ use-stmt ] …
[ implicit-part ]
[ declaration-construct ] …
R205 implicit-part is [ implicit-part-stmt ] …
implicit-stmt
R206 implicit-part-stmt is implicit-stmt
or parameter-stmt
or format-stmt
or entry-stmt
R207 declaration-construct is derived-type-def
or interface-block
or type-declaration-stmt
or specification-stmt
or parameter-stmt
or format-stmt
or entry-stmt
or stmt-function-stmt
R208 execution-part is executable-construct
[ execution-part-construct ] …
R209 execution-part-construct is executable-construct
or format-stmt
or data-stmt
or entry-stmt
R210 internal-subprogram-part is contains-stmt
internal-subprogram
[ internal-subprogram ] …
R211 internal-subprogram is function-subprogram
or subroutine-subprogram
R212 module-subprogram-part is contains-stmt
module-subprogram
[ module-subprogram ] …
R213 module-subprogram is function-subprogram
or subroutine-subprogram
R214 specification-stmt is access-stmt
or allocatable-stmt
or common-stmt
or data-stmt
or dimension-stmt
or equivalence-stmt
or external-stmt
or intent-stmt
or intrinsic-stmt
or namelist-stmt
or optional-stmt
or pointer-stmt
or save-stmt
or target-stmt
R215 executable-construct is action-stmt
or case-construct
or do-construct
or if-construct
or where-construct
R216 action-stmt is allocate-stmt
or assignment-stmt
or backspace-stmt
or call-stmt
or close-stmt
or computed-goto-stmt
or continue-stmt
or cycle-stmt
or deallocate-stmt
or endfile-stmt
or end-function-stmt
or end-program-stmt
or end-subroutine-stmt
or exit-stmt
or goto-stmt
or if-stmt
or inquire-stmt
or nullify-stmt
or open-stmt
or pointer-assignment-stmt
or print-stmt
or read-stmt
or return-stmt
or rewind-stmt
or stop-stmt
or where-stmt
or write-stmt
or arithmetic-if-stmt
or assign-stmt
or assigned-goto-stmt
or pause-stmt
Constraint: An execution-part must not contain an end-function-stmt, end-program-stmt, or end-subroutine-stmt.
2.2 Program unit concepts (程序单元)
Program units are the fundamental components of a Fortran program. A program unit may be a main program,an external subprogram, a module, or a block data program unit. A subprogram may be a function subprogram or a subroutine subprogram. A module contains definitions that are to be made accessible to other program units. A block data program unit is used to specify initial values for data objects in named common blocks. Each type of program unit is described in Section 11 or 12. An external subprogram is a subprogram that is not contained within a main program, a module, or another subprogram. An internal subprogram is a subprogram that is contained within a main program or another subprogram. A module subprogram is a subprogram that is contained in a module but is not an internal subprogram.
A program unit consists of a set of nonoverlapping scoping units. A scoping unit is
(1) A derived-type definition (4.4.1),
(2) A procedure interface body, excluding any derived-type definitions and procedure interface bodies contained within it (12.3.2.1), or
(3) A program unit or subprogram, excluding derived-type definitions, procedure interface bodies, and subprograms contained within it.
A scoping unit that immediately surrounds another scoping unit is called the host scoping unit.
2.2.1 Executable program (可执行程序)
An executable program consists of exactly one main program unit and any number (including zero) of other kinds of program units. The set of program units may include any combination of the different kinds of program
units in any order.
The main program is described in 11.1.
11.1 Main program
A main program is a program unit that does not contain a SUBROUTINE, FUNCTION, MODULE, or BLOCK DATA statement as its first statement.
R1101 main-program is [ program-stmt ]
[ specification-part ]
[ execution-part ]
[ internal-subprogram-part ]
end-program-stmt
R1102 program-stmt is PROGRAM program-name
R1103 end-program-stmt is END [ PROGRAM [ program-name ] ]
Constraint: In a main-program, the execution-part must not contain a RETURN statement or an ENTRY statement.
Constraint: The program-name may be included in the end-program-stmt only if the optional program-stmt is used and, if included, must be identical to the program-name specified in the program-stmt.
Constraint: An automatic object must not appear in the specification-part (R204) of a main program.
The program name is global to the executable program, and must not be the same as the name of any other program unit, external procedure, or common block in the executable program, nor the same as any local name
in the main program.
An example of a main program is:
PROGRAM ANALYSE
REAL A, B, C (10,10) ! Specification part
CALL FIND ! Execution part
CONTAINS
SUBROUTINE FIND ! Internal procedure
…
END SUBROUTINE FIND
END PROGRAM ANALYSE
11.1.1 Main program specifications
The specifications in the scoping unit of the main program must not include an OPTIONAL statement, an INTENT statement, a PUBLIC statement, a PRIVATE statement, or their equivalent attributes (5.1.2). A SAVE statement has no effect in a main program.
11.1.2 Main program executable part
The sequence of execution-part statements specifies the actions of the main program during program execution. Execution of an executable program (R201) begins with the first executable construct of the main program.
A main program must not be recursive; that is, a reference to it must not appear in any program unit in the executable program, including itself.
Execution of an executable program ends with execution of the end-program-stmt of the main program or with execution of a STOP statement in any program unit of the executable program.
11.1.3 Main program internal procedures
Any definitions of internal procedures in the main program must follow the CONTAINS statement. Internal procedures are described in 12.1.2.2. The main program is called the host of its internal procedures.
一个可执行的程序必须包括一个主程序的程序单元,并可添加其他程序单元。一个程序单元可以是主程序(main-program),或外部子程序(external-subprogram),或模块(module),或是数据块子程序(block-data)。
而一个主程序包括
1.程序声明(program-stmt),由PROGRAM开头,可省略,省略时默认程序名为main。
2.规范部分(specification-part),可省略,包括
零个或多个USE语句(use-stmt,用于调用模块),
隐式部分(implicit-part,包括
implicit语句implicit-stmt——如果使用到了不经定义的变量fortran会根据implicit语句,按照变量的开始字母,自行给变量规定类型,!一般建议加上implicit none来关上implicit,规范代码。
零个或多个隐式声明部分implicit-part-stmt,包括implicit语句implicit-stmt、或parameter语句parameter-stmt——定义常量、或format语句format-stmt——格式化输入输出、或entry语句entry-stmt——在特定语句中提供给外部例程入口。),
零个或多个声明部分(declaration-construct,包括
定义派生类型derived-type-def,
或接口块interface-block——提供函数所使用形参类型说明,
或类型声明type-declaration-stmt——定义变量类型,
或规范声明specification-stmt,包括access语句access-stmt——文件访问、或allocatable语句allocatable-stmt——声明动态数组、或common语句common-stmt——开辟公用区、或data语句data-stmt——给变量或数组赋初值、或dimension语句dimension-stmt——声明数组、或equivalence语句equivalence-stmt——共用内存声明、或external语句external-stmt——声明之后的子程序为外部声明的、或intent语句intent-stmt——声明所传输的参数用途、或intrinsic语句intrinsic-stmt——声明内部函数、或namelist语句namelist-stmt——把一组相关变量封装在一起、或optional语句optional-stmt——允许过程被调用时省略所传输值、或pointer语句pointer-stmt——声明指针、或save语句save-stmt——保存过程执行后其中的变量值、或target语句target-stmt——声明变量为目标或者说是声明显式接口,
或parameter语句parameter-stmt——定义常量,
或format语句format-stmt——格式化输入输出,
或entry语句entry-stmt——在特定语句中提供给外部例程入口,
或函数声明stmt-function-stmt——声明函数。)。
3.执行部分(execution-part),可省略,包括
可执行构造(executable-construct,包括
执行声明action-stmt,包括allocate语句allocate-stmt——分配内存、或赋值语句assignment-stmt、或backspace语句backspace-stmt——使得连接到特殊单元的文件出现在当前记录前、或call语句call-stmt——调用子程序、或close语句close-stmt——关闭文件、或计算的goto语句computed-goto-stmt——以一变量的值为依据跳转到标签表中的某一标签所对应的语句、或continue语句continue-stmt——无意义、或cycle语句cycle-stmt——结束此次循环并开始下一次循环、或deallocate语句deallocate-stmt——释放内存、或endfile语句endfile-stmt——标记最后一个结束记录、或end函数语句end-function-stmt——结束函数、或end程序语句end-program-stmt——结束程序、或end过程语句end-subroutine-stmt——结束过程、或exit语句exit-stmt——跳出循环、或goto语句goto-stmt——跳转到程序的任意语句、或if语句if-stmt——选择结构、或inquire语句inquire-stmt——查询特定命名文件或连接的属性、或nullify语句nullify-stmt——解除指针当前的联合状态并使其指向不能使用的内存地址、或open语句open-stmt——打开文件、或指针赋值语句pointer-assignment-stmt、或print输出语句print-stmt、或read输入语句read-stmt、或返回语句return-stmt、或rewind语句rewind-stmt——将文件的位置指针退回到第一个记录、或stop语句stop-stmt——停止程序、或where语句where-stmt——用于设置数组、或write输出语句write-stmt、或算数if选择语句arithmetic-if-stmt——用于判断一表达式并根据其与零的比较来选择分支、或assign语句assign-stmt——用于在goto语句前赋值、或assign赋值goto语句assigned-goto-stmt——用assign赋值给一变量在根据该变量跳转到一语句、或pause语句pause-stmt——使程序停顿,
或select case选择结构case-construct,
或do循环结构do-construct,
或if选择结构if-construct,
或where选择结构where-construct,)
零个或多个执行部分结构(execution-part-construct ,包括
可执行构造executable-construct——上述,
或format语句format-stmt——格式化输入输出,
或data语句data-stmt——给变量或数组赋初值,
或entry语句entry-stmt——在特定语句中提供给外部例程入口,
4.内部子程序部分(internal-subprogram-part),可省略,包括
contains语句(contains-stmt,声明内部函数、子程序),
一个或多个子程序(internal-subprogram,包括
函数子程序function-subprogram,包括函数声明function-stmt、规范部分specification-part——上述可省略、执行部分execution-part——上述可省略、内部子程序部分internal-subprogram-part——可嵌套可省略、end函数语句end-function-stmt,
子例程subroutine-subprogram,包括例程声明subroutine-stmt、规范部分specification-part——上述可省略、执行部分execution-part——上述可省略、内部子程序部分internal-subprogram-part——可嵌套可省略、end例程语句end-subroutine-stmt,
)
5.end程序语句(end-program-stmt)。
!注意:执行部分(execution-part)不能包含end函数语句(end-function-stmt),end程序语句(end-program-stmt)或end例程语句(end-subroutinestmt)。
一个例子:
PROGRAM ANALYSE
REAL A, B, C (10,10) ! Specification part规范部分
CALL FIND ! Execution part执行部分
CONTAINS
SUBROUTINE FIND ! Internal procedure内部子程序
…
END SUBROUTINE FIND
END PROGRAM ANALYSE
一般性例子:
出处: http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/fortran.html
PROGRAM program-name
IMPLICIT NONE
[specification part]
[execution part]
[subprogram part]
END PROGRAM program-name
- Fortran 90 笔记(一)
- Fortran学习笔记(一)
- Fortran学习笔记2(变量声明)
- Fortran学习笔记4(循环语句)
- Fortran学习笔记5(数组Array)
- Fortran学习笔记6(函数、子程序)
- Fortran 90学习之旅(一)Compaq Visual Fortran 6.5 的安装与第一个例子
- Fortran 90学习之旅(一)Visual Fortran 6.5 的安装与第一个例子
- Fortran学习杂记(一)
- FORTRAN的数组-笔记
- Fortran学习笔记
- 一些Fortran的笔记
- Fortran学习笔记(4)
- Fortran学习笔记(5)
- Fortran学习笔记(6)
- Fortran学习笔记(7)
- Fortran编译错误一例
- Fortran学习记录1(Fortran数据类型)
- JAVA IO 之字节流与字符流
- 贪心算法与动态规划算法的异同
- 综合课程设计三(1)
- Poj 3191 The Moronic Cowmpouter【十进制转负二进制】
- Python利用递归函数移动汉诺塔
- Fortran 90 笔记(一)
- 51nod 1087 1 10 100 1000
- 2017-3-10 SQLserver增,删,改,查语句,主外键约束
- java小程序之百元百鸡
- SQL Server——列属性:默认值或绑定
- 全国计算机二级考试公共知识
- 图像处理算法(四)---边缘检测
- java和xml
- 个人三层知识梳理