回 帖 发 新 帖 刷新版面

主题:call语句

编了一个速度小程序,要用到另一个程序里,怎么把他们联系起来?谢谢大侠们。[em2][em2]

回复列表 (共6个回复)

沙发

只要是fortran的书都会讲啊,比如调用你所谓的小程序 SUCK,call一下就能把这个小程序和你所谓的另一个程序(main)联系起来了。
program main
implicit none
call SUCK
STOP
END

SUBROUTINE SUCK
IMPLICIT NONE
WRITE(*,*) "YOU SUCK"
RETURN 
END

板凳


就是不懂参量怎样写?

3 楼

以二楼的  subroutine 为例   SUCK(x,y,ss,pp)在这个里面调用的时候x,y,ss,pp有输入也有输出


如果x,y为输入 ss,pp为输出。那么你在call  SUCK的时候  输入 x,y  算出的结果存放在,ss,pp中

然后  将SS  pp做为  输出值在主程序中使用

4 楼

program main
implicit none
integer a,b
call SUCK(a,b)
a=1
b=2
WRITE(*,*) a,b
STOP
END

SUBROUTINE SUCK(a,b)
IMPLICIT NONE
integer a,b
a=a+1
RETURN 
END

在一楼的例子里稍加改动,参数a,b既是输入又是输出。将a,b当做输入call suck子程序,然后再suck子程序里对a的值加1了,但是对b没有变化。所以call完以后,主程序里的a加1,但是b没有变化。形象点说,子程序就相当于一个加工厂,送进去的参数加工处理后在回到主程序(a被加工,但是b没有被加工,你也可以认为b被加工了,比如加了个0)。所以这里面没有说输入,输出分别写,参数既是输入又是输出。就看你怎么去摆放位置了,这个位置顺序很重要。

5 楼

当然参数的类型和位置要注意。fortran的书都会讲,这个是最基本的东西。找个书看看,会有更深刻地理解。

6 楼


你说的不错,不过更具有概括性或者更好理解一点,个人观点我觉得x,y也可以叫做输出,只不过有可能他们在子程序里没有被变化,他们也会被返回到主程序中。同样在你的例子里,ss,pp也可以被当做输入,然后经过子程序加工被输出。所以参量既是输入又是输出。

我来回复

您尚未登录,请登录后再回复。点此登录或注册