Fortran语言 基本语法
a、Fortran 之基本规定:
在Fortran的规定中,程序的开始需先宣告变量形式,接着才能用这些变量来写程序内容,再整个程序中的第一行必须空白,除非键入英文字母c或*用以表示那一列为说明项而非实际之计算式子。第二行至第五行为地址行,可用数字标示其地址,用以执行程序时控制之用。第六行用以填入一个非零的数字或字母表示连结上一列的式子。 第7行至72行则为程序主体之所在,若不小心在72行之后键入程序Fortran将不于理会。再程序的最后一列用 end命令告知程序终了。
b、变量(Variable)
Fortran语法中的变量相当于函数上变量,但其种类则更多,举凡复数(complex)、整数(integer)、实数(real)、逻辑(logical)和字符串(character)等等。对于变量的规定是变量的第一个字母为英文字母,其长度最长为6个字,除刚刚说的第一个字之外,其余的可为数字或字母,以下为几个简单范例: Integer count,pg1
real time,po2p
c、运算符号与内定函数:
Fortran 基本的运算符号如下:
+ 加法 ;- 减法 ; * 乘法 ;/ 除法** 平方 ;**(n) n次方除了上列之基本运算符号之外,数值计算上常用之函数如三角等等亦以写成内定含式,常用的以下几项:
- log 对数函数;
- exp 指数函数;
- sin、cos、tan、cot、sec和csc等三角函数;
- abs 绝对值;
- asin、acos、atan、acot、asec和acsc等反三角函数。
D、控制结构:
结构化Fortran有一些控制的结构,关系控制即是其中之一种,用以比较两变量之间关系,包含有:
- .lt. 表示小于
- .gt. 表示大于
- .eq. 表示等于
- .le. 表示小于或等于
- .ge. 表示大于或等于
- .ne. 表示不等于
另一种重要的控制为逻辑控制,包含有:
- .not. .not. p => 若p为非真则为真
- .and. p .and. q => p和q为真则为真
- .or. p .or. q => p或q其一为真则为真
- .eqv. p .eqv. q => p和q同为真或同为非真则为真
- .neqv. p .neqv. q => p或q之中一为真一为非真则为真
e、输入与输出结构:
> Fortran 经常会有一些数值需要输入或计算的值需要输出,这时 Fortran 便提供了一些格式码好让使用者将欲输入或输出的数值针对其变量的特性作较佳的安排设计,兹举例如下,其中输出之资料格式完全相同:
a、write(*,10) i,j,k 10 format (1x,2I5,I3) b、assign 10 to ifmt 10 format (1x,2I5,I3) write (*,ifmt) i,j,k c、write (*,'(1x,2I5,I3)') i,j,k d、character*11 fmtch fmtch='(1x,2I5,I3)' write (*,fmtch) i,j,k 其中X表示空格之意,1x即是空一格, write为输出的指令,若改为 read 则为输入指令,I为整数的格式码, 2I5 表示输出的总位数为五,而这样的格式重复两次,其余尚有不同之各种格式码,常用的有:
1. F 格式码,用于实数变量,其一般型态为 rFw.d ,其中F表实数,r为重复次数,w为总位数,而d为小数字数。
2. E 格式码,为指数格式的输出,其一般型态为 rEw.d ,其中E表示输出型态为指数,其余的r、w和d的定义则和F格式码相同。
3. D 格式码,用于倍准度实数的输出入,基本型态为 rDw.d,使用规则与 E 格式码则完全相同。
4. G 格式码,其型态与 E 或 F 格式码相同,但其功用则不同,他是用在当我们无法预知实数的大小值时,使用 G 格式码后,计算机会自动视数值的大小将 G 格式码转为 E 格式码或 F 格式码。
f、选择性结构:
当有两组或更多组程序中之一组要跑但却未能确定时,则必须有某种选择性的控制程序执行路线,这样的语法为选择性控制,在Fortran上为 If 语法,其架构大致如下:
If (logical-expression)then statement-1 . . statement-n else statement-1' . . statement-n' endif
上述的意思是If中的逻辑为真时则执行1至n这一组程序,不然则执行1'至n'这一组程序。若将一组程序简称为block,当上述的逻辑判断较为复杂时,常无法在一个条件中表达完成,故可有以下之另外两种形式:第一种为
If (logical-expression)then
block-1 If (logical-expression)then block-2 endif block-3 endif 第二种为
If (logical-expression-1)then block-1 elseIf (logical-expression-2)then block-2 elseif (logical-expression-3)then block-3 endif g:循环性(回圈)结构:
在数值上常会有收敛值的问题或有同样的程序需执行很多次的情形,这时都需要用到回圈的结构,其基本的语法与结构如下:一、
do n1 n2=n3,n4,n5 block n1 continue 二、
do n2=n3,n4,n5
block enddo 其中n1表示回圈执行该循环重新跑的地址,n2为控制的主要变量,n3为n2的起始值,n4为n2的极限值,也就是说当n2等于n4时回圈及停止,n5为每执行一次回圈n2所需做的增量,其中n5可不设定而由Fortran内定为1,或在block中执行某程序将n2做一定量的修正。另有一种融合选择性结构和回圈结构的语法如下:
while (logical expression) do statement 1 . . statement n endwhile 或是
dowhile ( logical expression ) statement 1 . . statement n enddo h、函数(function)与子程序(subroutine)结构:
在数值计算上重复多次的计算亦可独立写成一个函数或子程序结构,而当主程序需要时即可随时叫用,这样的一组程序称之为函数或子程序,函数或子程序在形式上亦需具备有类似主程序的架构,也就是说需有程序名称、变量宣告等等,其主要结构如下:
function fun-name(n1,n2,....) 宣告变量 statement 1 . . fun-name=...... . return end subroutine subroutine-name(n1,n2,....)
宣告变量
statement 1
. . statement n . return end 上述中n1、n2等等为变量,一般函数或子程序写在主程序的后面,在主
程序中叫用函数或子程序时用call的指令,形式如下:
call fun-name(n1,n2,...) call subroutine-name(n1,n2,....)
其中n1,n2等 变量在主程序中和函数程序中或子程序中的名称可以不同,但相对应的变量必须有相同的变量定义,而函数和子程序不同的地方在于函数本身代表一个函数值,在经 叫用函数之后仅可得回一个函数值,但子程序中的变量是可以传回主程序的,也就是说经子程序可计算多个数值之后传回主程序中。也就因为函数本身代表一个数 值,所以在主程序中函数必须宣告他的定义。
浙公网安备 33010602011771号