爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6278|回复: 8

[参考资料] 《FORTRAN语言》自学提纲

[复制链接]

新浪微博达人勋

发表于 2016-1-25 18:26:07 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
FORTRAN语言》自学提纲
第一章 1 FORTRAN基础
1. 一个FORTRAN程序由一个主程序或一个主程序与若干个子程序组成。但一个完整的FORTRAN程序只能有一个主程序,主程序的第一个语句是PROGRAM语句,用以说明主程序的名称。这个语句也可以省略,省略时默认为主程序的名称为MAIN
2FORTRAN的子程序主要有三种:
⑴函数子程序,其第一个语句为FUNCTION
⑵子例行子程序,其第一个语句为SUBROUTINE
⑶数据块子程序,其第一个语句为BLOCK DATA
主程序与各个子程序可以独立编译,最后再链接成一个可执行程序。在编写并输入一个FORTRAN程序时,既可以将主程序与各个子程序存放在一个文件中,也可以将它们分别存放在不同的文件中。但必须注意,主程序与各个子程序都是独立的程序单位,每个程序单位的最后一行必须用END语句作为结束。
在主程序中,虽然END语句还具有使程序停止运行的作用,但由于一个程序单位只能在最后一行有END语句,因此,在程序的其它位置处需要停止运行时,只能用STOP语句,不能用END语句。
同样的道理,在子程序中,虽然END语句还具有使程序流程返回到调用程序的作用,但在子程序的其它位置(不是最后一行)需要返回到调用程序时,只能用RETURN语句,不能用END语句。
3FOPTRAN源程序的书写格式有严格的规定。
⑴一行中第一列为“C”或“*”时,该行被认为是注释行。注释行可以写在四个区中的一个区,且注释行可以出现在程序单位的任何位置。但注释行不能有续行,需要时可以将连续若干行都定义为注释行。
FORTRAN语句部分不能占用标号区及续行标志区,只能从第七列开始。当语句太长时,可以使用续行。在继续行的标号区内必须为空白(即继续行不允许有标号),标号只能出现在起始行上。
⑶起始行与继续行或各继续行之间的空格不起作用,因此,对于一般的语句,可以不必到72列才转为继续行,继续行也不必一定要从第7列接着写,但是,包括在引号内的字符串中的空格是有效的,因此,对于字符串要使用继续行时应特别注意,最好写到一行的72列时再转为继续行,且要从继续行的第7列接着写。
⑷标号为无符号整数,不能出现正负号。
4.变量定义的I-N规则
与别的程序设计语言不同,FORTRAN语言中的实型变量和整型变量可以按隐含规则确定。这个隐含规则就是I-N规则。
I-N规则在一定程度上为用户提供了方便,对于常用的一些变量(如循环控制变量等)就不需要专门的类型语句进行说明,只要用合适的变量名就可以满足对变量类型的需要。但这也容易使用户疏忽了对变量类型的说明,以I-N开头的变量名实际是实型变量,但忘了用REAL语句说明,或者以非I-N开头的变量名实际是整型变量,也忘了用INTEGER语句说明。
另外,还要提醒大家注意:由于FORTRAN语言中实型与整型变量遵循I-N规则,因此,在有关FORTRAN的练习或考核中,有时会省略对变量类型的说明,在这种情况下,应根据I-N规则来判断变量的类型。
总之,FORTRAN中的所有变量都是需要说明其类型的,而不能理解为整型与实型变量不需要进行说明。
在对变量类型的说明中,I-N规则只用于整型变量与实型变量;隐含类型说明语句IMPLICIT适用于所有FORTRAN变量的类型;各种专门的类型说明语句适用于对一种类型的变量进行说明。
5.字符型常量和变量
字符常量是用单撇号括起来的若干个字符,字符常量中的字符可以是所用计算机系统中允许使用的任何字符。用来存放字符型常量的变量称为字符型变量。在程序中必须先定义字符型变量才能使用它。定义字符变量用CHARACTER语句或IMPLICIT语句。
字符关系表达式用于字符型数据的比较,比较结果是一个逻辑值。参加比较的字符表达式可以是字符常量、字符型变量、字符型数组元素以及包括字符运算在内的字符表达式。
一个字符串的一部分称为该字符串的子字符串。表示为:
字符变量名(e1e2
字符常数、字符变量、字符型数组元素和子字符串可以出现在输入输出语句的输入/输出表列中。
6.不同类型数据的混合是运算。
FORTRAN77中,允许两个不同类型的算术量(实型量与整型量)作算术运算。遇到这种情况,系统自动将它转换同一类型后再进行运算。转换的规律是:将低级类型转换成高级类型,具体来说,当遇到一个整型量与实型量作某种运算时,首先将整型量转换成实型量后再作相应运算。这就是所谓的算术表达式中不同类型数据的混合运算。
但必须注意,在作不同类型数据的混合运算时,类型的转换是在运算过程中逐步进行的,只要在作某种具体的运算而又遇到两个运算对象的类型不一致时才进行转换,并不是将整个表达式中的不同类型量全部不转换成同一类型后再作表达式的计算。
例如:设A=1.0,B=3.5, I=-5, K=5,求表达式
K+1/5+1*A-B
的值。
在这个例子中,AB为实型变量,IK为整型变量。首先计算K+1,这是整型运算,结果得6;作6/5的运算,这也是整型运算,结果得到1;取相反数,得-1。然后作运算1*A,这是不同类型的两个量作乘法运算,先将I的值-5转换成-0.5后再与A的值1.0相乘,结果为-5.0。再将前面得到的结果-1-5.0相加,先作类型转换,-1转换成-1.0,与-5.0相加后得-6.0。最后减去B的值3.5后得-9.5
由这个例子可以看出,在写FORTRAN表达式时要注意各运算量的类型,特别是在表达式中有除法运算时,应使作除法运算的两个运算量的类型正确,否则会由于整型相除使结果错误。
例如:为了计算并输出级数的值,编制了如下的FORTRAN程序:
S=0.0
N=1,100
DO10
10 1S=S+1/N
WRITE(*,*)’S=’,S
END
这个程序没有任何语法与逻辑错误,但当这个程序输入到计算机后,进行编译、链接,最后运行的结果为S=1.0。显然,这个结果是错误的。问题出在标号为10的这个语句中,赋值号右边的算术表达式中,根据运算顺序,首先计算I/N,当N2时,这个结果总是为0,因为这是一个整数除法,只有当N=1时,其结果才不为0而等于1。因此,最后累加到实型变量S中的值只有1.0。解决这个问题的措施是,只需要在表达式中将“I/N”改成“1.0/N”。
类似于上例中的错误是很容易发生的。
本章需完成以下习题:
P10 一、二、三、四
第二章 计算赋值语句、参数说明语句、赋初值语句与标号赋值语句
本章重点为计算赋值语句、参数说明语句和赋初值语句。
计算赋值语句
(1)数值型计算赋值语句
执行过程为计算赋值号右侧表达的值,转换成左侧变量的类型,最后赋值。
(2)逻辑型计算赋值语句
逻辑赋值语句赋值号左侧的变量必须是逻辑型变量,右侧可以是一个逻辑表达式,也可以是一个逻辑常数、逻辑型变量或关系表达式。
(3)字符型计算赋值语句
字符型赋值语句的赋值号左侧的变量必须为字符型,而且需说明其长度,如右侧的字符表达式长度超出了左侧变量的长度则多出的字符被截去。
参数说明语句
参数语句用来给常数命名,经说明后的常数为符号常数。其类型可以用隐含说明、显式说明等方法来说明。而且符号常数一经定义,其值在运算过程中不能以任何形式来改变。
赋初值语句
此语句为说明语句,但可以出现在程序的任何位置。可用于变量、数组、数组元素、子串等量的赋值。
本章完成以下习题:
P18 一、二
第三章 数据的输入
本章的重点放在:
1.表控格式的输入中应特别注意不同类型数据的输入方法。
2.字符型变量要注意使用格式输入和表控输入的区别。
3.注意READ语句与FORMAT语句的联用,要多做练习。
本章需重点完成以下习题:
P26 一、二、四、七
第四章 数据的输出
本章的重点放在:
1.表控格式输出中特别注意不同类型数据的输出形式及所占位数。
2.格式输出时注意以下编辑描述符的使用:IFEDAL
3.注意WRITE语句与FORMAT语句的联用,要多做练习。
本章需重点完成以下习题:
P42 一、二、四、八、九、十二、十三
第五章 结束、停、暂停与控制转移语句
本章只作一般性了解。注意GOTO语句的使用。
第六章 判定与选择
1.块IF结构
IF结构的一般形式如下:
IF(逻辑表达式1,)THEN (块IF语句)
1 THEN块)
[ELSEIF(逻辑表达式2 ELSE语句)
2 ELSEIF块)
ELSE ELSE语句)
n ELSE块)
ENDIF ENDIF语句)
其中[ ]中的内容为可选项。
IF结构的执行过程如下:
(1)先执行块IF语句,计算逻辑表达式的值;
(2)如果逻辑表达式1的值为“真”,则执行THEN块中的各执行语句;
(3)如果逻辑表达式1的值为“假”,如有ELSEIF语句,则执行ELSE语句,计算逻辑表达式2的值,如果值为“真”,则执行ELSE块中的各执行语句;…;否则执行ELSE块中的各执行语句;
(4)无论是执行完THEN块、ELSEIF块或ELSE块,最后都转到ENDIF语句,结束块IF结构的执行。
因此,块IF结构的执行总是从块IF语句开始,以ENDIF结束,其中THEN块、ELSEIF块与ELSE块不能都执行,只能根据逻辑表达式值的确定执行哪一块。
2.逻辑IF语句
逻辑IF语句用来实现选择结构。它的一般形式为:
IF(逻辑表达式)内嵌语句
逻辑IF语句执行的过程如下:
首先计算逻辑表达式的值,如果逻辑表达式的值为“真”,则执行内嵌语句后继续往下执行;否则不执行内嵌语句,直接执行该语句后面的语句。
复习时,同学们应注意,不要将块IF结构中的块IF语句与逻辑IF语句相混淆,要注意它们的区别:
(1)IF语句只是块IF结构中的第一个语句,它不能单独使用;而逻辑IF语句是单独执行完成一种选择结构的功能。
(2)IF语句中的逻辑表达式后面要有“THEN”,而逻辑IF语句中没有“THEN”。
(3)IF语句中的“THEN”后面不能再有别的语句,所有的语句都包括在THEN块中;而逻辑IF语句中包括一个内嵌语句,但只能是一个语句。
(4)用逻辑IF实现的选择功能一定可以用一个块IF结构实现,但一般的块IF结构不能用一个逻辑IF实现。
3.块IF结构的嵌套
FORTRAN77规定,在一个块IF结构的THEN块或ELSE块中,可以完整地包含另一个(或多个)块IF结构,称为块IF的嵌套。块IF的嵌套可以多层。对于块IF结构的嵌套要注意以下几点:
⑴每一层的块IF结构必须从块IF语句开始,以ENDIF语句结束。
⑵每一层中的块IF结构必须完全包含在外层块IF结构的THEN块或ELSE块中,
不允许交叉。
在利用块IF结构的嵌套或者利用ELSE语句处理多路分支选择的时候,块IF语句或ELSE IF语句中的条件必须正确,否则会出现逻辑错误,程序运行后会得到错误的结果。
4ENDIF语句的使用
ENDIF语句是一个块IF结构的结束语句,它一定要与块IF语句配对使用。在使用ENDIF语句时,有以下几个方面需要注意:
⑴每一个块IF结构不要漏掉ENDIF语句。在没有ELSE语句的块IF结构中,ENDIF语句在THEN块或最后一个ELSEIF块的后面;而在有ELSE语句的块IF结构中,ENDIF语句在ELSE块的后面。
⑵块IF结构中的ELSEIF语句不需要ENDIF语句与之配对。
⑶一对配对的块IF语句、ENDIF语句不能与另一对配对的块IF语句、ENDIF语句出现任何形式的交叉。ENDIF语句只提供THEN块、ELSE块与ELSEIF块的共同出口,它本身不产生任何操作。
⑷本章需重点完成以下习题:
P58 一、三、四
第七章
1DO循环
DO循环的一般形式为:
DO nV=e1e2e3
n 循环体
注意下列语句不能作为DO循环的终端语句:
·GOTO语句
·块IF语句
·ELSE语句
·ELSEIF语句
·ENDIF语句
·DO语句
·STOP语句
·END语句
逻辑IF语句可以作为DO循环的终端语句,但其内嵌语句也不能是上述这些控制语句。如需要用上述语句作终端语句时,用一个继续语句CONTINUE代替。
循环变量在循环体内可以被引用,但不能被改变。例如,下列用法是错误的:
DO 10 I=101002
IFX.L.T.0.0I=101

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-1-25 21:22:25 | 显示全部楼层
学习了{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2016-1-26 10:03:59 | 显示全部楼层
楼主辛苦了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-2-1 11:15:01 | 显示全部楼层
收藏了
谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-2-2 13:21:15 | 显示全部楼层
谢谢楼主分享!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-2-2 13:21:19 | 显示全部楼层
谢谢楼主分享!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-2-2 15:53:34 | 显示全部楼层
谢谢楼主分享,学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-29 18:47:50 | 显示全部楼层
谢谢,学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-15 10:00:51 | 显示全部楼层
感谢楼主分享的知识
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表