当前位置:文档之家› FORTRAN程序单元

FORTRAN程序单元

• [说明部分]
• [可执行部分]
• [CONTAINS
• 内部过程]
• END [PROGRAM[程序名]]
10.2 语句函数
• 语句函数通过一句代码定义来实现某种特定的处 理功能,它是Fortran 77时代的遗留产物。严格 来说,语句函数不属于程序单元的范畴。但是在 实际应用中,语句函数以其灵活的应用、小巧的 结构在程序中发挥着重要的作用。

'8','9','A','B','C','D','E','F'/)
• INTEGER :: n, j, nn

• HEX= ' '

• DO j=8,1,-1

nn = n/16

HEX(j:j) = H(n - 16*nn)

IF(nn == 0) EXIT

n = nn
• END DO

• END FU后,就可以在程序单元中进 行引用了。实际上,在前一小节的例程中已经演 示了语句函数引用的一般方式。本小节将对语句 函数的引用方式进行具体的说明。
• 语句函数的引用方式与Fortran中内部函数的引用 方式完全一致,就是用程序中定义的实参替换掉 语句函数定义中的虚参。实参必须是与虚参类型 相同的常量、变量或表达式。
第10章 Fortran程序单元
• 一个Fortran程序中通常不是只由一个主程序组成, 而是由几个按某种方式划分的不同程序单元来共 同组成。尽管Fortran程序中允许只有主程序而没 有子程序,但绝不允许只有子程序而没有主程序。 在Fortran中,程序的执行总是从主程序开始的。
• Fortran中的程序单元可以大体划分为主程序、子 程序两种,其中子程序又可以进一步划分为函数 子程序、子例行子程序和数据块子程序。数据块 子程序通常用于实现变量的初始化赋值,函数子 程序和子例行子程序在用途上基本是一致的,但 是也有许多不同之处。本章将详细介绍Fortran中 的程序单元和它们的基本用法。
10.3 函数子程序
• 函数子程序和子例行子程序是子程序的两种常用 基本形式。它们的共同特征就是作为数据处理过 程的集合。但是这两种子程序也不完全相同,函 数子程序会返回一个函数值,且通常不会改变哑 元的数值。因此,函数子程序更像是数学上的一 个函数。而子例行子程序通常用于完成一项更为 复杂的任务,通过哑元或者其他手段返回几个结 果,哑元的数值通常会在程序的执行过程中改变。
10.1 主程序
• 顾名思义,主程序是一个实际程序中的主体,其 他类型的程序单元都是以某种方式来辅助主程序 的执行。在Fortran语言中,一个程序的执行始终 是从主程序的第一条可执行语句开始的,所以每 个完整的Fortran程序都必须有且只允许有一个主 程序。主程序定义的一般语法形式如下:
• [PROGRAM [程序名]]
则哑元列表可以省略,但是函数名后的括号不能省略。 • 3.RESULT关键字 • RESULT关键字用于声明将函数的返回值保存在其后的变量名中,
称为函数结果名。
10.3.2 调用函数子程序
• 函数子程序的调用与内在函数的调用形式一样。 在主调程序的任意位置,可以通过下面的语句形 式将函数子程序的计算结果赋值给变量:
10.3.1 定义函数子程序
• 下面给出函数子程序的一般形式为: • [prefix] FUNCTION name ([d-arg-list]) [RESULT (r-name)] • ... • END [FUNCTION name] • 1.prefix说明项 • prefix说明项是一个可选参数,可以使用如下两种形式来书写: • type [keyword] •或 • keyword [type] • 2.d-arg-list • d-arg-list表示函数的哑元列表。如果函数子程序不包含哑元,
• 在实际的编程过程中,程序员往往会遇到这种情 况:一些简单的函数会在一个程序单元中的不同 地方重复用到,而Fortran系统并不提供这种内部 函数;如果采用函数子程序的形式来描述这些简 单的函数又会觉得没有这种必要。例如,要求解 函数的值,将其编写成函数子程序可以顺利解决。 但是,Fortran语言提供了一种更为简单的手段— —语句函数。
义时才使用; • 语句函数是一种非执行语句,需要放置在所有可执行语句之前和相关的类
型说明语句之后; • 语句函数的作用范围仅限于定义它的程序单元之内,不允许跨程序单元进
行语句函数的调用; • 语句函数不能作为子程序调用时的实参,也不允许在EXTERNAL语句中出现; • 语句函数中出现的虚参必须是变量名,不能是常量、表达式或是数组元素; • 语句函数通过表达式得到的函数值的类型必须与函数名的类型一致。
10.2.1 语句函数的定义
• 在Fortran中定义一个语句函数的形式如下: • fun ([d-arg [, d-arg] ...]) = expr • 1.Fun 2.d-arg 3.Expr 4.语句函数示例 5.需要注意的问题:
在使用语句函数进行编程时,下面一些问题是需要引起注意的: • 语句函数通常在函数比较简单,能够用一条语句(包括换行)就能进行定
10.3.3 函数子程序示例——进制转换
• 下面来看一段函数子程序的实例,代码将一个4字节的整数用16进制的形式表示出来。 首先给出的是程序的函数子程序单元HEX。
• FUNCTION HEX(n)
• IMPLICIT NONE

• CHARACTER(LEN=8) :: HEX
• CHARACTER(LEN=1) :: H(0:15)=(/'0','1','2','3','4','5','6', '7',&
• V = 函数名(实元表) • 其中,V表示用于接收函数计算结果的变量;实元
表是程序中实际传入函数子程序的变量列表,除 非有特殊说明,变量列表中的实元个数以及类型 必须与函数子程序定义时的虚参在个数和类型上 一致。如果函数不包含哑元,则调用形式是在表 达式中直接写上函数名再跟空括号即可: • V = 函数名()
相关主题