(33) 在窗体上画一个命令按钮,然后编写下列程序
Private Sub Command3_Click()
Tcl 2
Tcl 3
Tcl 4
End Sub
Sub Tcl(a As Integer)
Static x As Integer
x=x + a
Print x;
End Sub
程序运行后,单击命令按钮,输出结果为
A) 2 3 4
B) 2 5 9
C) 3 5 4
D) 2 4 3
解析:在过程TCL中,将Integer型变量x定义为静态变量(Static),Static语句的格式与Dim语句完全一样,但Static语句只能出现在事件过程,Sub过程或Function过程中,在过程中的Static变量只有局部的作用域,即只能在本过程中可见,但可以和模块级变量传递,即使过程结束后,其值仍能保留。Tcl过程是将变量a的值加上x赋给x,然后输出x的值;第一次调用Tcl过程时,x未赋值,默认为0,所以输出结果为2,第二次调用Tcl过程时,因为x为静态变量,所以它的值为上次调用后的值,即为2,加上a后,x的值变为5,输出结果为5,同理,第三次调用后输出结果为9。
(34) 下面程序段,运行后的结果是Private Sub Command1_Click()
Dim b%(1 To 4) , i%, t#
For i=1 To 4
b(i) =i
Next i
t=Tof(b() )
Print "t="; t,
End Sub
Function Tof(a() As Integer)
Dim t#, i%
t=1
For i=2 To UBound(A)
t=t * a(i)
Next i
Tof=t
End Function
A) t=18
B) t=24
C) t=30
D) t=32
解析:程序开始调用循环语句对数组b()赋值,b(i) = I,且数组b的上下界分别为1和4;接着将数组b()作为对象,调用Tof过程,在Tof过程中,定义了两个变量t和I,I作为For循环的循环变量,初始值为2,终值为数组b的上界;循环体为"t = t * a(i) ",即将b(i)的值乘以t,然后在赋给t,当循环结束后,程序返回的就是数组b中除第一个元素以外所有元素值的乘积,此题的结果为2×3×4=24,输出结果为t=24。
(35) 单击按钮时,以下程序运行后的输出结果是
Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer
x=1: y=2: z=3
Call God(x, x, z)
Print x; x; z
Call God(x, y, y)
Print x; y; y
End Sub
Private Sub God(x As Integer, y As Integer, z As Integer)
x=3 * z + 1
y=2 * z
z=x + y
End Sub
A) 6 6 12
7 11 11
B) 8 5 10
5 11 11
C) 9 6 12
9 10 15
D) 8 10 10
5 9 10
解析:从整体上看,可得主调过程将两次调用过程God后,实参的值将随形参变化而变化,现在分析一下这两次调用实参和形参是怎么变化的:第一次调用被调过程God,主调过程把实参x,x和z的地址分别传给形参x,y和z,此时形参x,y和z值分别为1,1和3,执行语句x = 3 * z+1后,形参x值变为10,此时相对应的实参x也变为10,执行语句y = 2 * z后,形参y值变为6,则相对应的实参x值变为6。执行z = x + y后,形参z值应为12,当然这次调用后,程序代码输出的数值为6,6,12;第二次调用被调过程God,主调过程把实参x,x和y的地址分别传给形参x,y和z。应注意,此时实参x的值为6而不是1,所以此时形参x,y和z值分别为6,2和2,执行语句x = 3 * z+1后,形参x值为7,相对实参x值也相应的变为7。执行语句y = 2 * z后,形参y值变为4,相应的实参y值也变为4,执行z = x + y后,形参z值变为11,相应的实参y的值变为11,而形参y和z的地址相同,所以最后它们值都应为11,所以此次调用后,输出的数值为7,11和11。