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

------