vb二级考试题。请教。
来源:百度知道 编辑:UC知道 时间:2024/05/24 02:13:13
Private Sub Form_Click()
multi 20, 3
End Sub
Public Sub multi(k As Integer, s As Integer)
If k < 50 Then
k = k * s
Call multi(k, s)
End If
k = k + k * s
Print k;
End Sub
请详解。。。
从 multi 20, 3
则 k=20 符合k<50
所以
if k<50 then 往下有
k=k*s 得到
k=60 -----注意此时的k
而后有
{
call multi(k,s)
此时k已经>50了.所以执行end if后面的语句(这是针对call multi(k,s))而不是(Public Sub multi(k As Integer, s As Integer) )所以要注意了。
那么很明显后面的一句是 k=k+k*s 得到k=240 后面又有个个print k 则首先要打印一个 240 出来.}
再次注意!以上都是"{}"里的东西都是针对 call multi(k,s)的
执行完了 call multi(k,s)后就是执行Public Sub multi(k As Integer, s As Integer) 这个的 end if
然后 的k=k+k*s
看起来好象这个左边的k也应该是 240
!!!!
但是,注意 !!!!!!!
!!!!!!
此时右边的k不再是上面的那个k=60了!!!!!!
这个也就是 而是240了!!
所以 左边的k应该是960!!!--------这也就是这个题最重要的一点.也是最关键的一点.
其原因就是 整个函数都是在按地址传送的.在经过上面的call muti(k,s)后k已经发生了变化了,教材上有个很好的例子的.
应该是输出
240
240
两个240
首先,k=20,s=3;
k=20*3=60
接着执行 Call multi(k,s) '此时k=60,s=3
进入新一轮multi中
k=60>50 那么执行
k=k+k*s=60+60*3=240
然后print(k) 输出240
------