(27) 下列程序段的执行结果为
a=5
For k=1 To 0
a=a + k
Next k
Print k; a
A) -1 6
B) -1 16
C) 1 5
D) 11 21
解析:此题是考查For循环结构语句。
For循环有两种格式,其中一种格式是:
For 循环变量=初值 To 终值 Step[步长]
语句
[Exit For]
语句
Next[循环变量]
此循环语句的执行过程为:"循环变量"首先取得"初值",检查是否超过"终值",如果超过,就一次也不循环而跳出循环,属于"先检查后执行"的类型。现在来看程序段,For k=1 To 0中,初值为1,终值为0,显然当"循环变量"首先取得"初值"1,检查后超过"终值"0,所以一次也不执行,即最后执行Print时,k=1,a=5。
(28) 下列程序段的执行结果为
a=3
b=1
For I=1 To 3
f=a + b
a=b
b=f
Print f
Next I
A) 4 3 6
B) 4 5 9
C) 6 3 4
D) 7 2 8
解析:本题考查的是For循环结构语句,现在看程序段是如何运行的。
开始a=3,b=1。For循环中步长缺省值为1,循环变量I的初值为1,终值为3,所以此循环结构可以循环3次。
第一次循环后,结果为:f=4,a=1,b=4
第二次循环后,结果为:f=5,a=4,b=5
第三次循环后,结果为:f=9,a=5,b=9
所以每循环一次,便输出f当前值,循环3次即便输出3个f值分别为4,5,9。
(29) 下列程序段的执行结果为
I=9
x=5
Do
I=I + 1
x=x + 2
Loop Until I >=7
Print "I="; I
Print "x="; x
A) I=4x=5
B) I=7x=15
C) I=6x=8
D) I=10x=7
解析:此题用的是Do循环结构,其格式为:
Do [语句块]
[Exit Do]
Loop Until 循环条件
此循环由于"先执行后检查",所以至少执行一次。本题中,程序运行到循环条件I>=7的值为True,才停止。所以当程序结束运行后I=10,x=7。
(30) 以下程序段运行时从键盘上输入字符"-",则输出结果为
op$=InputBox("op=")
If op$="+" Then a=a + 2
If op$="-" Then a=a - 2
Print a
A) 2
B) -2
C) 0
D) +2
解析:此题是根据用户的输入计算变量a的值并显示。当输入字符"-"时,第一个If条件不成立,跳过,而第二个If语句条件满足,因此执行a=a-2,使a=-2。所以选项B)是正确答案。
(31) 以下程序段的输出结果为
Dim l, a(10) , p(3)
k=5
For i=0 To 10
a(i) =i
Next i
For i=0 To 2
p(i) =a(i (i + 1) )
Next i
For i=0 To 2
k=k + p(i) 2
Next i
Print k
A) 20
B) 21
C) 56
D) 32
解析:第一个循环对数组a()进行赋值,第二个循环对数组p()进行赋值,第三个循环对k进行累加,k的初值等于5,第一次循环k=k+p(0) *2=5,……,第三次循环k=k+p(2) *2=21并输出,所以选项B)正确。
(32) 下列程序的执行结果为
Private Sub Command1_Click()
Dim x As Integer, y As Integer
x=12: y=20
Call Value(x, y)
Print x; y
End Sub
Private Sub Value(ByVal m As Integer, ByVal n As Integer)
m=m * 2: n=n - 5
Print m; n
End Sub
A) 20 12
20 15
B) 12 20
12 25
C) 24 15
12 20
D) 24 12
12 15
解析:被调过程Value的两个参数m和n前面都有关键字"ByVal"修饰,即在主调过程用此过程时,实参与形参之间是以传值方式传递信息的,而当实参与形参以传值方式相结合时,形参的改变并没有影响到实参,单单就这一点来说,当程序代码执行主调过程中的Print x;y语句时,x和y的值应不变,还是12和20,这样就能够排除选项A)和选项B)了。当主调过程调用被调过程时,把实参x、y的值分别传给形参m和n,这就是说此时形参m值为12,n值为20,执行被调过程中的m = m * 2: n = n - 5语句后,m值为24,n值为15,所以Print m; n后, 程序输出的结果为24和15。最后程序输出的结果如选项C)所示。
(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。