主题:call语句
wangxinling110
[专家分:0] 发布于 2012-07-09 12:03:00
编了一个速度小程序,要用到另一个程序里,怎么把他们联系起来?谢谢大侠们。[em2][em2]
回复列表 (共6个回复)
沙发
xiaoyuan24 [专家分:100] 发布于 2012-07-10 03:33:00
只要是fortran的书都会讲啊,比如调用你所谓的小程序 SUCK,call一下就能把这个小程序和你所谓的另一个程序(main)联系起来了。
program main
implicit none
call SUCK
STOP
END
SUBROUTINE SUCK
IMPLICIT NONE
WRITE(*,*) "YOU SUCK"
RETURN
END
板凳
wangxinling [专家分:0] 发布于 2012-07-14 15:04:00
就是不懂参量怎样写?
3 楼
拜月贪狼 [专家分:20] 发布于 2012-07-14 16:54:00
以二楼的 subroutine 为例 SUCK(x,y,ss,pp)在这个里面调用的时候x,y,ss,pp有输入也有输出
如果x,y为输入 ss,pp为输出。那么你在call SUCK的时候 输入 x,y 算出的结果存放在,ss,pp中
然后 将SS pp做为 输出值在主程序中使用
4 楼
xiaoyuan24 [专家分:100] 发布于 2012-07-17 01:38:00
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 楼
xiaoyuan24 [专家分:100] 发布于 2012-07-17 01:42:00
当然参数的类型和位置要注意。fortran的书都会讲,这个是最基本的东西。找个书看看,会有更深刻地理解。
6 楼
xiaoyuan24 [专家分:100] 发布于 2012-07-17 02:02:00
你说的不错,不过更具有概括性或者更好理解一点,个人观点我觉得x,y也可以叫做输出,只不过有可能他们在子程序里没有被变化,他们也会被返回到主程序中。同样在你的例子里,ss,pp也可以被当做输入,然后经过子程序加工被输出。所以参量既是输入又是输出。
我来回复