前言
当一个程序超过几百行时,大型程序很难去Follow。Fortran 解决实际工程问题时候,通常有几万行程序。唯一去处理这样的大型程序的办法是使用模块化的方法,将大程序分成很多的独立的小程序,我们把这些独立的小程序叫做,subprograms。Fotran有两种子程序,一种叫做Functions, 另外一种叫做Subroutines
一、Functions
Fotran的function只会返回一个返回值。
Fortran77有很多内置的函数。
abs
min
max
sqrt
sin
cos
tan
atan
exp
log
通常情况下,一个函数都有一个type,上述内置函数的输入参数类型都是generic,意思是你可以输入任何类型的参数。但是,遗憾的是Fortran并不是一个真正的智能语言。所以你在使用函数的时候还是匹配你的函数所要求的参数类型。
通用的Fortran函数格式如下
type function name (list-of -variables)
declarations
statements
return
end
c2345678
real function r(m, t)
integer m
real t
r = 0.1*t*(m**2+14*m+46)
if (r .LT. 0) r = 0.0
return
end
自定义的函数名称必须和返回值一样。比如上述定义的函数,r(m, t), r在函数中的名字也是r。其他与主函数不一样的地方在于:
自定义函数需要一个返回值的type,这个type出现在函数的定义位置。
函数结束的标志是return,而不是stop.
严格意义来说,Fortran不允许使用recursion, 但是有些编译器会支持的。
二、Subroutines
由于Fortran的function只会返回一个函数值。通常我们希望返回两个或者多个值。为了这个目标,我们采用subroutine来实现多个或者没有返回值的subprogram.子程序。
通用定义subroutine的语法是这样的
subroutine name(list-of-variabes)
declarations
statements
return
end
下面将展示一个subroutine, 用来交换两个数的值。
c2345678
subroutine swap(a, b)
integer a, b
c local variables
integer tmp
tmp = a
a = b
b= tmp
return
end
在subroutine的变量定义中,分成两个部分。一种是调用和被调用共有的变量,就是将括号里的变量重新定义一下。
然后是是属于subroutine的局部变量。
总结
本文简单介绍了,Fortran怎么实现定义子程序的方法。包括定义子函数和子线程。