主题:帮忙运行一下结果
caofeike525
[专家分:0] 发布于 2007-05-31 20:57:00
declare sub a(m,n)
m=5 ;n =4
call a((m),n)
print m,n
end
sub a(m ,n)
s=m
m = s/ n
n =s mod n
end sub[/b][/size]
[center][/center]
回复列表 (共4个回复)
沙发
moz [专家分:37620] 发布于 2007-05-31 21:32:00
经过我的大脑运行过,结果应该是
5 1
板凳
Matodied [专家分:7560] 发布于 2007-06-01 11:59:00
5 1
3 楼
Matodied [专家分:7560] 发布于 2007-06-01 16:27:00
分析一下:
由于在 CALL a((m),n)中m是值传递的,而n是地址传递的,因此m在子程序里就算改变了值也是没有作用的,即只要m在主程序没有改变值,m的值永远是5。再看n,由于n=5 MOD n(5 MOD 4)=1,所以n的值在子程序中变成了1,也就是主程序中的n也变成了1,所以m,n分别为5,1。
不过我不提倡在用值传递变量时在变量外面加上括号,可以用这样的方式:
比如CALL a(b,c$,d)
如果要值传递b和c$,可以写成CALL a(b+0,c$+"",d),不要写成CALL a((b),(c$),d).
4 楼
a292982250 [专家分:40] 发布于 2007-06-13 13:19:00
5 1
别忘了打分
我来回复