关于Visual Basic的一个问题
发布网友
发布时间:2022-05-11 02:31
我来回答
共1个回答
热心网友
时间:2023-05-22 21:41
53题:
注意函数P中第一句“Static Sum”,Sum被声明为一个静态变量,函数P会记住该变量的值,而不是像一般变量那样每次都初始化,所以有:
P(1)=0+1=1----------Sum=1
P(2)=1+1+2=4--------Sum=4
P(3)=4+1+2+3=10-----Sum=10
P(4)=10+1+2+3+4=20--Sum=20
所以S=1+4+10+20=35
54题:解释一下PickMid函数应该就可以了
Private Function PickMid(xstr As String) As String
'xstr = "abcdef"
Dim tempstr As String, strlen As Integer
tempstr = ""
strlen = Len(xstr)
'strlen=6
i = 1
Do While i <= Len(xstr) - 3
'Len(xstr) - 3 = 3
tempstr = tempstr + Mid(xstr, i, 1) + Mid(xstr, strlen - i + 1, 1)
i = i + 1
Loop
'这个Do循环的作用是从xstr字符串中取左边第一个、右边第一个字符,然后再取左边第二个、右边第二个字符,
'然后再取左边第三个,右边第三个字符,至此Do循环结束,所以tempstr="afbecd"
PickMid = tempstr
End Function
57题:
Sub作为一个过程,它的语法是这样的:
[Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]
End Sub
其中arglist 参数的语法是这样的:
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
其中
ByVal 可选的。表示该参数按值传递。
ByRef 可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
所以,Proc1过程中的x、y、z三个参数是按地址传递的,也就是说,该过程会按照传递过来的变量的地址来直接调用该变量,而Proc1过程完成后,该过程所调用的变量的值可能已经被该过程改变,但变量不会随着该过程的结束而结束,因为这些变量是另一个正在运行的过程(就是调用Proc1过程的那个)所声明的。
那么:
x = 1: y = 2: z = 3
这是初始赋值
Call Proc1(x, x, z)
进入Proc1过程,
Proc1过程的参数x调用的是主过程的x=1
Proc1过程的参数y调用的是主过程的x=1
Proc1过程的参数z调用的是主过程的z=3
所以,在Proc1过程中有:
x=3*z=3*3=9(主过程的x=9)
y=2*z=2*3=6(主过程的x=6,Proc1过程的x也就是主过程的x,也=6)
z=x+y=6+6=12(主过程的z=12)
现在Proc1过程结束了,回到主过程
Print x; x; z
打印“ 6 6 12”
Call Proc1(x, y, y)
进入Proc1过程,
Proc1过程的参数x调用的是主过程的x=6
Proc1过程的参数y调用的是主过程的y=2
Proc1过程的参数z调用的是主过程的y=2
所以,在Proc1过程中有:
x=3*z=3*2=6(主过程的x=6)
y=2*z=2*2=4(主过程的y=4)
z=x+y=6+4=10(主过程的y=10,Proc1过程的z也就是主过程的y,也=10)
现在Proc1过程结束了,回到主过程
Print x; y; y
打印“ 6 10 10”
总之,注意变量的作用范围和传值的方式,不要被变量的名字所迷惑,实在不行也可以把Proc1过程中的变量都换个名字,注意换的时候一定不要漏了,要一一对应,然后就可以更清楚了。