vb请教VB程序阅读题!单击命令按钮后窗体上的显示结果

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:34:06
Private Function f1(n As Integer) As Integer
Static i As Integer
While i <= n
f1 = f1 + i: i = i + 1
Wend
End Function

Private Function f2(ByVal na As Integer, n2 As Integer) As Integer
Dim i As Integer
Do While n2 >= n1
f2 = f2 + n2: n2 = n2 - 1
Loop
End Function

Private Sub command1_click()
Dim a As Integer, b As Integer
Print f1(3)
Print f1(5)
a = 5: b = 8
Print f2(a, b)
Print f2(b, a)
End Sub

答案是f1(3)=6 f1(5)=9 f2(a,b)=26 f2(b,a)=9
请高手帮忙解答,尤其f1(5)=9和 f2(b,a)=9详细些,最好能写出每一个步骤的调用和取值 (如:当i= 时, f1= , i= ```h)-----谢谢!!

LZ可能认为f(5)=15了,但实际上是9,因为在f1函数中,声明的变量i是静态变量,所以下一次调用该函数时,i的初始值是上一次调用完以后i的值,而不是0。另外函数f2的变量传递方式是要注意的,第一个变量按值传递,第二个则是按地址传递。按地址传递可能会对实参造成改变。

f1(3)=6应该没有什么问题,i从0一直增加到4,所以,f1(3)=0+1+2+3=6。

计算f1(5)时,由于声明语句为Static i As Integer,i为静态变量,所以,i的初值为上次运算完以后最后i的值4,所以f1(5)=4+5=9。

计算f2(a,b)时,a=5,b=8,所以,函数过程中,n1,n2,的初值分别为5,8。计算完以后,n1的值不变,仍为5,n2的值变为4,函数值等于8+7+6+5=26。函数调用结束时,由于n2的传递方式是按地址传递,所以,n2的值会返回给b,所以,b的值会变为4,a不变,也就是说后面计算f2(b,a)时,实际上是计算f2(4,5),所以答案是9。

你可以按F8键一句一句的执行语句,在本地窗口中看变量的值的变化,另外可以打开立即窗口,将代码中的print改为debug.print,可以看到输出结果。

Private Function f1(n As Integer) As Integer
Static i As Integer
While i <= n
f1 = f1 + i: i = i + 1
Debug.Print f1; " "; i
Wend
End Function

Private Function f2(ByVal n1 As Integer, n2 As Integer) As Integer
Dim i As Integer
Do While n2 >= n1
f2 = f2 + n2: n2 = n2 - 1
Debug.Print f2; " "; n2
Loop
End Function

Private S