FORTRAN2

  • 格式:docx
  • 大小:132.47 KB
  • 文档页数:8

六、FORTRAN过程
1、语句函数:
定义:语句函数名( [形参变量名1][,形参变量名2]…)=表达式
引用:语句函数名( [形参变量名1][,形参变量名2]…)
REAL F,X; F(X)=3*X**2+2; READ *,X;PRITN *,F(X)
见YUJUHANSHU
2、函数子程序(FUNCTION):
定义:
[类型说明] FUNCTION 函数名([形参列表] ) [RESULT (函数结果名)] 说明语句
执行语句
END [ FUNCTION [函数名] ]
调用:函数名([实参列表])
<1主程序中必须对函数子程序名进行变量定义,子程序中定义与否均可;
<2函数返回值默认保存在函数名的变量里,如果返回值在其他变量中,则需用RESULT声明(但仍需在主程序中对函数子程序名进行变量定义,而对返回变量定义与否均可);
见FUNCTION
3、子例子程序:
定义:
SUBROUTINE子例行程序名([形参列表变量])
说明语句
执行语句
END [SUBROUTINE [子例行程序名] ]
调用:CALL 子例行程序名(实参列表)
见ZILI ZICHENGXU
<1函数子程序只能返回一个函数值或者数组;而子例子程序能求多个值或不求值(子例子程序应用更广泛);
<2值传递:常量、表达式;
址传递:变量、数组;
<3跳出子例子程序:RETURN
跳出主程序:GOTO 100 ; 100 END
<4传递参数为常量时,应该在子程序中定义为变量;
<5函数子程序或者子例子程序中,写说明语句时,要对形参进行说明;
4、特殊参数属性:
①INTENT属性:指定形参的INTENT属性;
格式:类型语句,INTENT (格式说明符)::形参列表
INTEGER ,INTENT (IN) :: A
<1格式说明符:IN,OUT,INOUT。

IN说明形参仅用于向子程序中传入数据,在子程序中不允许被修改;OUT输出;INOUT 输入输出;
<2 INTENT仅对形参有效,只能出现在子程序或接口中,其实该属性
无太多应用。

②接口(INTERFACE)
格式:
INTERFACE [类属说明]
[接口体]…
[MODULE PROCEDURE 过程名表]
END INTERFACE [类属说明]
<1接口体:为函数或子例子程序除执行语句外的格式;
FUNCTION 函数名([形参列表] ) [RESULT (函数结果名)]
说明语句
END [ FUNCTION [函数名] ]
或者:
SUBROUTINE 子例行程序名([形参列表变量])
说明语句
END [SUBROUTINE [子例行程序名] ]
1)说明语句只用说明形参和返回变量;
<2使用接口:
1)函数子程序返回值为数组;
此时不能在主程序中对子程序名定义;
此时必须在接口和子程序中声明返回数组的类型,而不能在主程序中声明返回数组类型(使用其它数组名(非函数名)返回结果时
主程序中声明返回数组名与否均可);
2)所调用的函数子程序参数数目不确定;
见INTERFACE
③可选参数OPTIONAL:
格式:REAL,OPTIONAL :: H (必须有逗号和两个冒号)
<1可用PRESENT(H)检查是否输入H,有输入则返回.TRUE.,即结果为真;
见OPTIONAL
④SAVE属性:
再次调用过程的时候,过程中SAVE属性的变量值不会消失;格式:
类型说明,SAVE :: 变量名称表
或SAVE 变量名称
<1定义的时候附初值相当于SAVE属性;
见SAVE
4、内部过程:
过程:内部过程,外部过程,模块过程,内在过程;
①内部过程:
CONTAINS
<1在宿主程序单元内,且在所有可执行程序单元内;
<2分为内部函数子程序和内部子例子程序,其定义和调用方法与之前基本相同,但END语句中的关键字FUNCTION和SUBROUTINE不能省略;
5、特殊的过程类型
①递归过程:
只需在普通的子程序前面加上RECURSIVE即可;
格式:RECURSIVE SUBROUTINE 子例行程序名([形参列表])
说明语句
执行语句
END SUBROUTINE [子例程序名]
七、文件及高级I/O应用
1、基本概念:
①设备号:输入输出语句使用设备号进行文件关联;
<1以下情形无设备号:
PRINT *,A 默认设备为显示器,’*’表示格式;
READ *,A 默认设备为键盘;
<2设备号可以随便设,但一个设备号只能连一个文件;
2、文件操作语句:
①OPEN:
OPEN ( [UNIT=] int_expr [,FILE=char_expr]…)
<1第一个为设备号,第二个为文件名,可仅写文件名(默认路径为源文件所在路径),也可写完整路径;
3、写数据到文件:
---打开文件---写---关闭文件
OPEN (1, FILE = ’FILE01.TXT’) ;WRITE (1,*),A ; CLOSE(1);
见YOUGESHI SHUNXU
4、从文件读数据:
OPEN (2, FILE = ’FILE01.TXT’) ;READ (2,*),A ; CLOSE(2);
①利用READ (1,*) 可仅仅只读入数据:
READ (1,*) !可过滤非数字部分
READ(1,*),(A(I,:),I=1,N)
READ (1,*)
READ (1,*),B
见FangCheng\XianXingFangChengZu
八、结构体及指针
1、派生数据类型:
派生数据类型是一种数据类型,类似于整型,实型;
结构体是在存储器内按照派生数据类型描述的内容分配具体的存储区域,它是派生数据类型的具体体现;
定义格式:
TYPE [::] 派生类名
成员列表
END TYPE [派生类名]
2、结构体:
①定义:
结构体数组定义格式:
TYPE (派生数据类型名),DIMENSION (维说明符[,维说明符])::结构体数组名
或:TYPE(派生数据类型名) [::] 结构数组名(维说明符[,维说明符])
②结构体成员引用:
结构体%成员名
结构体.成员名
③结构体初始化:
<1赋值语句初始化:
结构体变量名=派生数据类型(成员初值表)
DATE1=DATE_RECORD(75,9,3)
<2是用DATA语句初始化:
DATA DATE1/DATE_RECORD(75,9,3)/
DATA DATE2/ DATE_RECORD(75,9,3), DATE_RECORD(1,2,3)/(数组) ④输入输出:
可用结构体名输出或者引用结构体成员输出;
见JIEGOU
九、FORTRAN模块及面向对象的程序设计
①模块:
<1模块的定义和使用:
定义:MODULE 模块名
[说明部分]
[CONTAINS
模块过程部分]
END [ MODULE [模块名]]
使用:USE 模块名
1)模块和主程序可以放在不同的源文件中,如果在同一个文件中,则模块应该在主程序之前;
2)USE行必须在IMPLICIT NONE行之前;
3)调用模块相当于调用了模块中的一些声明语句;
<2模块中的变量:
模块中声明全局变量:COMMON X;或者 SAVE X;
见MOKUAI
十、FORTRAN常见函数
1、随机数产生函数
<1利用RANDOM_SEED()启动随机数生成器;
<2利用RANDOM_UNMBER产生0-1的随机数;
RANDOM_SEED() …RANDOM_UNMBER(T)
1)上述两个语句不能放在一起;见INTERFACE。