函数(一) from《FORTRAN95 程序设计》

1、子例程subroutine的使用

格式 subroutine sub1()
       ......    
retrun
end subroutine sub1()

注意: 最后一个命令通常为return,表示返回到主程序调用它的位置,子例程可以在FORTRAN90中实现自我调用,在FORTRAN77中则不被允许;另外子例程拥有独立的变量和独立的“行代码”。在传递参数的时候应用的是“地址调用”,即主程序所传出的参数和子例程接受的参数,他们使用相同的地址来记录数据,正因为使用相同的内存地址,可以视为同一个变量。这与有些编程语言有着明显不同,例如C语言使用的“传值调用”,即子程序中改变参数的内容不影响调用处的变量,因此这一点值得注意。

2、自定义函数function

自定义函数的使用是为了弥补系统库里没有函数这一缺点,他的使用与子例程不同:

首先在使用前必须声明这个自定义的函数,自定义的函数执行后返回一个数值。因此,自定义函数没有改变接受参数的数值,而只是读取参数,但子例程却可以改变传递参数的数值,因此这个不同之处可以让用户在子例程和自定义函数间做出选择。

program ex5123
 implicit none
 real :: a=1
 real :: b=2
 real,external ::add      ! 声明add是个函数,不是变量;external是可以省略的,但最好不要省略
 write(*,*) add(a,b)
 stop
end
function add(a,b)
 implicit none
 real::a,b
 real::add                !此处用来说明这个函数的返回值类型,不是声明变量;当然可以放到函数开头
 add=a+b                   ! real function add(a,b)
 return
end
3、全局变量common

COMMOM是FORTRAN77的使用全局变量的用法,用它定义一块共享的内存空间,“全局”的意思是无论在主程序中还是在子例程中,只要被定义的COMMON变量可以被任意的程序部分代码调用。因此注意全局变量是被所有代码取用的,因此它至于声明时的相对位置有关,和变量的名称无关,因此不同的变量名称可能用的同一内存位置,因此在程序设计时尽量不要用COMMON设置全局变量,很容易造成混淆,带给我们麻烦。当全局变量很多的时候一般用分区的方式区分,例如下面的例子:

另外需要共享大量的数据,而且有大量程序都会用到这些共享数据的时候才用全局变量。

integer::a,b
common /group1/ a    !变量a放到group1这个区间
common /group2/ b    !变量b放到group2这个区间
a=1
b=2

另外,common变量在设置初值时 要用BLOCK DATA程序模块,即设置初值部分在

block data         !在主程序之前生效,功能只在于设置全局变量的初值
 implicit none
 integer a,b
 common a,b
 data  a,b /1,2/
 integer c,d
 common /group1/ c,d
 data c,d /3,4/
 ......
 ......
end block data

使用COMMON变量应该注意:COMMON提供共享的内存,但是编译器不会负责做类型检查;

另外,由于不负责数据类型检查,当在维护程序时,修改COMMON变量的类型,使得程序中要修改的部分变得很多。因此FORTRAN90会用另外的方式使用全局变量来避免上述问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值