codecamp

Fortran 定义和调用

子程序的一般结构如下所示:

!!! 不带初始化变量的子程序
subroutine subr1
implicit none
real a, b
integer i
......
......
end subroutine subr1

!!! 带初始化变量的子程序
subroutine subr2(x, m, y, n)
implicit none
real x, y, a, b, z(10)
integer m, n, i, k
......
......
end subroutine subr2

!!! 调用子程序
real z
integer m
call subr1
m = 21
call subr2(10.0, 100, z, m*5+1)

子程序是以 subroutine 开头、以 end subroutine 结尾,其中第一行与一般主程序一样需要添加一行 implicit none 的声明。

值得注意的是,子程序可以在主程序中被任意调用若干次,但同时也是依赖主程序存在的,即只有子程序的代码无法被执行。

从上面的例子可以看出,无论是初始化还是没初始化变量,子程序都可以在主程序中被调用执行。只不过带初始化变量的子程序应该在被调用时给定相应的变量,否则无法正常被调用。

如下所示是一个完整包含主程序和子程序的代码示例。主程序是以 program 开头、以 end program 结尾的代码片段。子程序代码不被包含在主程序代码片段中,但与主程序在同一文件中。

子程序可以位于主程序代码片段之前或之后,不会影响在主程序中的正常调用。

program stest1
implicit none
real x, y
x = 5.0
y = 100.0
call subr(x, y, 10)
print *, x, y
end program stest1

subroutine subr(x, y, n)
implicit none
real x, y
integer n
x = n
y = y*x
end subroutine subr

子程序的调用和主程序的执行顺序是:主程序 → 子程序 → 主程序

由于子程序被调用时实际上不会与其他正在被执行的子程序相互干扰,所以可以在一个主程序中重复调用同一子程序。如果在子程序中需要根据某个条件判断中断退出,可以如下所示利用 ​if​ 语句和 ​return​ 关键字来返回主程序。

subroutine subr(x, y, m, n)
implicit none
real x, y
integer m, n
......
if (m < n) return
......
end subroutine subr


Fortran 多重循环下的 exit 与 goto 语句
Fortran 子程序变量的局部性
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }