几道vb题求详解

2024-12-21 18:58:05
推荐回答(3个)
回答1:

1、
Private Sub Command1_Click()
Dim a
a = Array(1, 2, 3, 4, 5, 6, 7)
For i = LBound(a) To UBound(a)'for循环每次对i加1加到Ubound(a)为止,当加到这个值的时候,
a(i) = a(i) * a(i)
Next i
Print a(i)'循环结束i还会再加1,这个时候i的值是Ubound(a)+1已经超过数组范围了,所以就越界了
End Sub

2、
option base 1
Private Sub Form_Click()
Dim arr(3) As Integer'没有给初始值的情况下默认值就是0
For i = 1 To 3
For j = 1 To 3
arr(j) = arr(i) + 1
Next j
Next i
'这两层循环执行操作是:
'a(1) = a(1) + 1 此时a(1) = 1
'a(2) = a(1) + 1 此时a(2) = 2
'a(3) = a(1) + 1 此时a(3) = 2
'a(1) = a(2) + 1 此时a(1) = 3
'a(2) = a(2) + 1 此时a(2) = 3
'a(3) = a(2) + 1 此时a(3) = 4
'a(1) = a(3) + 1 此时a(1) = 5
'a(2) = a(3) + 1 此时a(2) = 5
'a(3) = a(3) + 1 此时a(3) = 5

Print arr(3)'所以输出结果是5
End Sub

3、
private x as integer
private sub command1-click()
x=5:y=3
call proc(x,y)
label1.caption= x
label2.caption= y
end sub
private sub proc(byval a as integer,byval b as integer)'按值传递的简单理解就是这个过程里怎么操作都不影响调用它的过程里的变量,也就是说这里的对x y赋值不影响调用它的值,但是因为x 已经声明为模块级的全局变量了(声明的语句在外面就可以理解为全局变量),那么对x的修改是会影响到外面的x的值的
x=a*a'a 的值调用的时候传入的是5,所以x=5×5=25
y=b+b'y不是全局变量怎么修改都没关系,所以最终输出25 3
end sub

回答2:

1、每循环一次 i的值加1 所以循环结束后 i的值为7 因此越界

2、arr定义为整形数组 因此对应项的默认值是0

3、按值传递:原值不改变

按地址传递:原值可以改变

回答3:

(1)、
Next i
Print a(i)这两句调换一下位置!
(2)、
VB里不一样的地方就是定义的变量的初始植为0
(3)、
按植传递的话,内存为形参和实参分配了不同的地址,形参的改变不影响实参的植,而按地址传递的话,实参和形参公用同一个地址,所以形参一改变,实参也跟着改变!!
不知道我这样讲你是否能明白!!