notebook of fortran解析.docx
- 文档编号:26979320
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:15
- 大小:34.25KB
notebook of fortran解析.docx
《notebook of fortran解析.docx》由会员分享,可在线阅读,更多相关《notebook of fortran解析.docx(15页珍藏版)》请在冰豆网上搜索。
notebookoffortran解析
1、文件名的扩展名:
固定格式:
.for 或 .f [fixed.for]
自由格式:
.f90[free.f90]
2、程序单位:
主程序(PROGRAM)
辅程序:
可以是函数辅程序(FUNCTION)和子程序辅程序(SUBROUTINE)
块数据(BLOCKDATA):
用来对有名公用块的数据对象规定初始值用于定义全局常数和进行全局初始化。
内部过程:
在主程序中定义的内部过程必须跟在CONTAINS语句之后,主程序是它的内部程序的宿主。
模块(MODULE):
在主程序中通过USE语句与之相联系,模块用于组装若干功能(如:
过程,类型定义,语义扩展等)为一个集团。
3、程序单位=单位起始语句+程序体+单位结束语句。
程序体=说明部分+执行部分。
4、整个程序中只能有一个PROGRAM,一个BLOCKDATA,可以有多个各自命名的FUNCTION和SUBROUTINE辅程序。
5、变量名和程序名的命名规则:
F77中:
变量名和程序名等使用的英文名最长是由6个字符(包含英文字母A-Z、数字0-9构成,且第一个字符必须是字母。
其英文名的有效使用范围原则上限于一个程序单位之内(内部过程除外)。
F90中:
变量名和程序名等使用的英文名最长是由31个字符(包含英文字母A-Z、数字0-9构成和下划线“—”)且第一个字符必须是字母。
其英文名的有效使用范围原则上限于一个程序单位之内(内部过程除外)。
6、fortran中的标号和标签:
(1)标号:
1-5位的十进制数。
且至少一位不为零,前导零不起作用。
f90中不可以对空语句加上标号语句。
(2)标签:
英文名,后面接冒号(F90)
(3)不能使用整型变量来指定转向语句的标号。
如下是错误的。
n=10
GOTOn
(4)例:
(F90)
DOk=1,100
loop2:
DO
....
ENDDOloop2!
已有标签名时不能省略标签名。
ENDDO
7、在程序中规定变量的类型可以用以下几种方法。
[1]隐含约定(“I—N规则”):
Fortran规定,凡以字母I,J,K,L,M,N六个字母开头的变量名,如无另外说明则为整型变量。
以其它字母开头的变量为实型变量。
表示用I到N之间的字母开头的变量为整型。
例如:
I,J,IMAX,NUMBER,LINE,JOB,Kl为整型变量,而A,Bl,COUNT,AMOUNT,TOTAL,BOOK为实型变量。
[2]类型指定:
如果想改变“I—N规则”对变量类型的约束,可以用类型说明语句专门指定某些变量的类型。
Fortran中有六个类型说明语句:
(1)INTEGER语句(整型说明语句)
(2)REAL语句(实型说明语句)
(3)DOUBLEPRECISION语句(双精度说明语句)
(4)COMPLEX语句(复型说明语句)
(5)LOGICAL语句(逻辑型说明语句)
(6)CHARACTER语句(字符型说明语句)
IMPLICIT语句(隐含说明语句)指定:
可以用IMPLICIT语句将某一字母开头的全部变量指定为所需的类型,还可以用一个IMPLICIT语句同时指定几种类型。
例如:
IMPLICITINTEGER(A,C,T-V)
IMPLICITREAL(I,J)
IMPLICITINTEGER(A,B),REAL(I,K),INTEGER(X-Z)
注:
(1)以上三种方法中,以类型说明语句最优先,IMPLICIT语句次之,“I—N规则”的隐含约定级别最低。
如下程序中IMAX变量为整型,而其它以I、J开头的变量为实型:
IMPLICITREAL(I,J)
INTEGERIMAX
(2)类型说明语句和IMPLICIT语句是非执行语句。
(3)类型说明只在本程序单位内有效。
(4)IMPLICIT语句和类型说明语句应该出现在本程序单位中的所有执行语句之前,其中IMPLICIT语句又应在所有的类型说明语句之前。
8、Fortran语言中表达式的注意事项:
(1)由于用“/”号作为除号,因此在写除法运算式子时应加上必要的括号。
(2)乘号不能省略,如,必须写成A*SIN(X),而不能写成ASIN(X)。
(3)Fortran中无大、中、小括号之分,一律用小括号。
(4)乘方按“先右后左”原则处理。
(5)对单项运算符(如-A中的符号)相当于在它前面有一个运算量“0”,如:
-A**2相当于0-A**2而非(-A)**2。
Fortran算术表达式的求值运算的优先次序为:
①括号>②函数>③**>④*/>⑤+-,即括号内的运算级别最高,加减最低。
9、数值类型的级别:
整型(低)→实型(高)
10、赋值过程中的类型转换:
一个算术赋值语句中的被赋值的变量(V)和表达式(e)的类型可以相同,也可以不相同。
F77作如下规定:
(1)如果变量V与表达式e的类型相同,则直接进行赋值。
(2)如果类型不同,则应先进行表达式的求值,然后将该表达式的值转换为被赋值变量的类型。
如:
I=3.5*2.1
表达式3.5*2.1的值为7.35,实型。
而变量I为整型,因此I的值等于7。
又如:
T=3*5/7
表达式的值为2,整型。
由于T为实型,故系统先将整数2转换成实数2.0,再赋给变量T,T的值为2.0。
(3)当赋值号两侧的类型不同时,往往会产生程序设计者事先预想不到的结果。
所以在编写程序时,应尽可能使贼值号两侧保持同类型。
11、关系表达式
.GT.greaterto
.GE.greaterthanorequalto
.LT.lessto
.LE.lessthanorequalto
.EQ.equalto
.NE.notequalto
11、case表达式是整型、字符型或逻辑型表达式,不能是实型和复型表达式。
SELECTCASE是入口语句,ENDSELECT是出口语句。
12、主程序名并不是必要的,是可有可无的,但是如果要写PROGRAM语句的话,就必须是主程序的第一个语句,而且要起一个名字。
其形式为:
programname
(类型说明)13、(F77)类型说明语句应该置于程序单位第一个可执行语句之前,类型语句所列变量只在该类型语
句所在的程序单位有效。
而且,在一个程序单位中,一个名字用显式说明其类型不得多于一次。
14、(F77)隐式说明:
IMPLICITINTEGER(R-T),REAL(I-N)
表示出类型语句中被显式说明的符号名外,凡是以R,S,T开头的符号名都是整型的,凡是以I,J,K,L,M,N开头的符号名都是实型的
IMPLICIT语句值适用予其所在的程序单位,一个程序单位的可以包含若干个IMPLICIT语句,implicit语句必须置于除parameter语句外的所有其他说明语句的前面。
无论是显式说明还是隐式说明,均为非执行语句。
关于PPARAMETER:
15、PARAMETER语句用于给常数一个符号名,语句的形式为PARAMETER(P=e),如:
PARAMETER(PI=3.1415926)
16、PARAMETER语句和赋值语句不同,它是非执行语句。
在同一个程序单位中,一个常数符号名只能定义一次,即在一个程序中定义一个常数符号名后不能再改写它的值。
17、PARAMETER语句一次可以定义几个常数符号名,如:
parameter(I=300,PI=3.1415926,X=-9.2)(相当予C语言中的宏定义)
18、符合先定义后使用的原则,常数符号名不得用来定义常数的另外一部分,如:
形成一个复常数的任一部分。
常数符号名不能作为语句标号,也不能出现在FORMAT语句中代替常数。
关于输入语句:
19、read*,a,b,c这条语句中的“*”表示使用表控格式读入数据。
对数组输入数据的时候按照左对齐原则,不足的用空格填满。
20、一下输入值正确的:
read*,i,j,k
在键盘上输入:
3*2↙
这里采用的是r*c的输入方法,其中c是常数,r为无符号非零整数。
相当于常数c连续出现r次。
因此上例中相当于输入中是连续的3个2,即i,j,k分别都被赋值为2.
21、read*,i,j,k
在键盘上输入:
“5.5/”↙
"/"为终止执行符,在“/”出现后,还未被赋值的变量则保持原来的变量值不变。
22、一条输入语句,如过输入的时候没有出现输入终止符“/”,则必须等输入语句变量列表中的所有变量都被赋值后,这条语句才能执行完毕。
否则程序将在这里暂停执行。
这时,一条输入语句便可读入多组的输入数据,知道所有变量都被赋值为止。
如:
read*,x,y,x
输入为:
32.2↙
28.9↙
50.1↙
Print语句和write语句
23、输出数据的排放格式为右对齐,不足则左端填补空格。
24、每条print语句的输出总是在新的一行开始,如果print语句中无输出数据,则表示输出一空行,即‘print*’表示输出一个空行。
25、编辑描述符:
I型:
rIW,整型编辑描述符
F型:
rFW.d,实型编辑描述符
E型:
rWE.d,实数的指数型编辑描述符
A型:
rAW,字符型编辑描述符
X型:
nX,空格编辑描述符
H型:
nHh1h2……hn,文字型编辑描述符,其中的n表示要输出的字符宽度,h1h2……hn表示要输出的具体字符,H前的n和其后的字符实际长度要一直,否则F77以出错对待。
说明:
r:
为非零无符号整常数,称为重复说明,表示一个描述符连续重复出现的次数。
W:
非零无符号整常数,表示字段宽度
d:
无符号整常数,表示实数中小数部分的字段宽度
write(6,*)其中的6指的是6号部件。
在6号部件输出其后的数据。
程序中断:
Ctral+C
分支结构:
26、计算GOTO语句:
GOTO(S1,S2…),I
Si是与计算GOTO语句在同一程序单位中的可执行语句的语句标号。
同一个语句标号可以在同一个GOTO语句中出现多次。
例如:
写程序完成下面的计算
Y=
程序为:
10Read*,x
I=int(x)
GOTO(20,30,40,50),I
GOTO10
20Y=(2*X+3)*X
GOTO60
30U=(X-3)*X+2
GOTO60
40Y=X+5
GOTO60
50Y=X
60PRINT*,Y
END
28、赋值GOTO语句和语句标号赋值语句(ASSIGN)
赋值GOTO语句的形式为:
GOTOI[[,](S[,S]…)]
其中I为整型变量名(注意这里的I为整型变量名,而计算GOTO语句中的I为整型表达式),S是与GOTO语句在同一个程序单位的一个语句标号。
29、算术IF语句:
if(e)S1,S2,S3
S1,S2,S3为语句标号
e<0时转向S1语句,e=0时转向S2语句,e>0时转向S3语句
30、逻辑IF语句:
If(e)S
其中:
e为逻辑表达式,S为语句标号
若逻辑表达式e为真则执行S,若为假,则执行if语句的下一条语句。
循环结构
31、Loop-while型循环:
该类循环的特点是先判断后执行。
Loop-until型循环:
该类循环的特点是先执行后判断。
以上两种循环结构都可以用IF结构和GOTO语句实现,GOTO语句在这两种结构中的地位很重要,但是要注意GOTO语句的使用,滥用会使得源程序的可读性降低。
32、数组的说明:
DIMENSIONA(5,3),B(-3:
3)
A是二维数组,5行,3列。
行标是从1到5,列标是从1到3。
B是一维数组,下标的范围为-3到3,共七个数组元素,
A(0)是有效的。
33、数组格式说明:
RealA(-2:
3),N(2,3)
等价于:
DIMENSIONA(-2:
3),N(2,3)
REALN(2,3)
32、数组的存储:
如果要将数组:
存入数组:
A(3,3)
A(3,3)在计算机中的排列是:
A(1,1)A(2,1)A(3,1)
A(1,2)A(2,2)A(3,2)A(1,3)A(2,3)A(3,3)
(是以列优先的方式排列的)
所以数据的输入顺序是:
147,258,369
33、数组的赋值:
DIMENSIONA(10,20)
DATAA/200*0.0/
该例中的所有元素都被赋值为0.0
DIMENSIONX(3,5)
DATAX(1,1),X(2,1),X(3,1)/3*1.0/
该例中,将数组的第一列的所有元素都赋值为1.0
34、DO循环:
DOS,I=e1,e2,e3
其中:
S为一条可执行语句的标号,该语句一般是循环体的最后一条语句。
这条语句经常是继续语句,格式如下:
CONTINUE
I为以整型,实型或是双精度型变量名,称为DO变量(也称为循环控制变量),e1,e2,e3均为整型,实型或双精度型的表达式。
其中:
e1的值(M1)称之为初值,即循环开始时,DO变量所具有的值。
e2的值(M2)称之为终值,即循环要结束是DO变量应具有的值。
e3的值(M3)称之为步长,即循环一次DO变量的增值。
M3=1的时候,e3可以省略。
(和C语言中的for循环是相似的)
注意:
DO循环的终止语句不得为无条件GOTO、赋值GOTO、算术IF、块IF、ELESEIF、ELSE、ENDIFRETURN、STOP、END以及DO语句。
34、DOWHILE语句:
DOSWHILE(e)
其中:
S为循环终止语句标号。
通常为CONTINUE语句。
DOWHILE语句的执行是这样的:
先判定逻辑表达式e的值,为真则执行循环体,为假则表示循环结束,跳出循环,执行S语句后的语句。
35、隐DO循环:
dlist,I=e1,e2,e3
READ*,(A(I),I=1,3)
相当于给A
(1),A
(2),A(3)通过键盘输入数据。
36、当dlist中的变量名和数组元素同时出现的时候,应将它们视作每次循环的一个整体,如:
READ*,(X,A(I),I=1,3)
这时的输入顺序是:
X,A
(1),X,A
(2),X,A(3)
关于过程:
37、语句函数:
FUN(x,y,z)=e
x,y,z代表语句函数的自变量,称为语句函数的虚元。
虚元表只用来指出函数变元的个数、次序和类型。
e代表语句函数所代表的表达式。
例如:
ROOT(A,B,C)=(-B+SQRT(B*B-4.0*A*C))/(2.0*A)
语句函数的注意事项:
1)语句函数语句属于非执行语句,它在程序单位中的为止必须位于该程序单位中的说明之后,且位于第一条可执行语句之前。
2)在引用时虚元和实元是按照为止一一对应结合的。
因而实元的个数、类型、次序应与虚元对应一致。
38、外部函数的定义是以FUNCTION开始的。
外部函数的引用和C语言中的函数引用是一样的。
39、FORTRAN没有保留字,在适用内部函数的时候,要用INTRINSIC来加以声明,INTRINSIC语句的作用是声明函数是内部函数。
40、实元是外部过程名的时候,,必须在调用程序中用外部语句EXTERNAL来指明用作实元的外部函数名
programsimpsoncalculator
externalf1,f2
print*,'entera,b,n='
read(*,*)a,b,n
callsimpson(a,b,n,f1,s1)
write(*,10)s1
10format(1x,'s1=',f10.5)
callsimpson(a,b,n,f2,s2)
write(*,20)s2
20format(1x,'s2=',f10.5)
end
subroutinesimpson(a,b,n,f,s)
h=(b-a)/(2*n)
s=f(a)-f(b)
do30i=1,2*n-1,2
x1=a+i*h
x2=x1+h
s=s+4*f(x1)+2*f(x2)
30continue
s=s*h/3.0
end
functionf1(x)
intrinsicsin
f1=sin(x)/(1+x)
end
functionf2(x)
intrinsiccos,exp
f2=cos(x)*exp(x)
end
41、指针类型主要是用于构造各种形式的动态数据结构。
如C语言中的链表等。
但是FORTRAN语言不提供这种数据结构类型。
42、字符子串名的形式是:
V(e1,e2)
A(s,s1……)(e1,e2)
字符运算符只有一个,“//”,叫做并置运算符。
43、字符处理的内部函数
长度函数“LEN(e)”,起作用为给出实元e中所包含的字符个数。
“子串下标”函数INDEX(e1,e2)
其中e1和e2均为字符型的实元,INDEX的作用是指出e2在e1中全相同的第一个子串的开始位置(整数)。
44、字符型实体只能与另一个字符型实体等价。
若同一等价表中的两个不同元素具有相同的类型,则在包含该等价语句的程序单位中,这两个元素始终具有相同的值。
若两个变元的类型不同时,则它们之间没有数值上的联系。
当其中的一个元素赋值时,另一个就变成无意义的了(其值无实际含义)。
COMMON语句的使用
45、公用语句和等价语句连用的时候,不能导致存数单元发生矛盾。
46、公用块的延伸只允许公用块末端延伸,而不允许想顶端延伸。
数据块辅程序的使用
47、定义形式为:
BLOCKDATA[SUB]
END
作用:
用来给有名公用块中的变量和数组元素提供初值
说明:
SUB是数据块辅程序的符号名,是全局变量,因而不允许与其他的全局变量名相同,也不能与该辅程序的任何局部名相同。
当省略SUB时,称为无名数据块辅程序,在一个可执行程序单元中,无名数据块辅程序只能有一个。
有名数据辅程序则可有若干个。
辅程序体只可有注解行,DATA,COMMON,PARAMETER,DIMENSION,SAVE,EQUIVALENCE,
IMPLICIT和类型语句。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- notebook of fortran解析 fortran 解析