(31) 定義過程的格式中,Static關(guān)鍵字的作用是指定過程中的局部變量在內(nèi)存中的存儲方式。若使用了Static關(guān)鍵字,則
A) 每次調(diào)用此過程,該過程中的局部變量都會被重新初始化
B) 在本過程中使用到的,在其他過程中定義的變量也為Statci型
C) 每次調(diào)用此過程時,該過程中的局部變量的值保持在上一次調(diào)用后的值
D) 定義了該過程中定義的局部變量為"自動"變量
解析:Static關(guān)鍵字用于指定局部變量在內(nèi)存中的存儲方式。變量的存儲方式有兩種:靜態(tài)的和自動的。靜態(tài)存儲方式是指當過程運行完畢后,變量所占的內(nèi)存單元不釋放,而變量的值被保存下來,該變量為靜態(tài)變量。Static型變量所占存儲控件只初始化一次,且變量的值在整個程序運行期間都存在;Static關(guān)鍵字對過程之外定義的變量沒有影響;Static關(guān)鍵字是定義該過程中定義的局部變量為靜態(tài)變量。
(32) 單擊命令按鈕時,下列程序的執(zhí)行結(jié)果為
Private Sub Command1_Click()
Dim x As Integer, y As Integer
x=50: y=78
Call PPP(x, y)
Print x; y
End Sub
Public Sub PPP(ByVal n As Integer, ByVal m As Integer)
n=n \ 10
m=m \ 10
End Sub
A) 08
B) 5078
C) 450
D) 7850
解析:在調(diào)用過程時,一般主調(diào)與被調(diào)過程之間有數(shù)據(jù)傳遞,即將主調(diào)過程的實參傳遞給被調(diào)用的過程,完成實參與形參的結(jié)合,然后執(zhí)行被調(diào)過程,在Visual Basic中,實參與形參的結(jié)合有兩種方式,即傳址與傳值。這兩種方法的特點如下:
傳址的結(jié)合過程時,當調(diào)用一個過程時,它將實參的地址傳給形參,因此在被調(diào)用的過程中,對形參的任何操作都變成了對相應(yīng)實參的操作,因此實參的值會隨形參的改變而改變。
傳值的結(jié)合過程時,當調(diào)用一個過程時,系統(tǒng)將實參的值復(fù)制給形參并斷開了聯(lián)系,被調(diào)用過程中的操作是在形參自己的存儲單元中進行的,當過程調(diào)用結(jié)束時,這些形參所占用的存儲單元也同時被釋放,因此在過程中對形參的任何操作不會影響實參。而題中被調(diào)過程PPP中有兩個形參,兩者均為傳值方式。主調(diào)過程分別把實參x、y 傳遞給PPP,所以當過程調(diào)用結(jié)束后,實參x、y的值都沒有改變,最后輸出的值應(yīng)為50 78。
(33) 單擊按鈕時,以下程序運行后的輸出結(jié)果是
Private Sub proc1(x As Integer, y As Integer, z As Integer)
x=3 * z
y=2 * z
z=x + y
End Sub
Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer
x=1: y=2: z=3
Call proc1(x, x, z)
Print x; x; z
Call proc1(x, y, y)
Print x; y; y
End Sub
A) 6 6 12
6 10 10
B) 9 5 10
5 10 10
C) 9 6 12
9 10 15
D) 9 10 10
5 4 10
解析:從整體上看,可得主調(diào)過程將兩次調(diào)用過程Proc1后,實參的值將隨形參變化而變化,現(xiàn)在分析一下這兩次調(diào)用實參和形參是怎么變化的。
第一次調(diào)用被調(diào)過程proc1,主調(diào)過程把實參x,x,z的地址分別傳給形參x,y,z,此時形參x,y,z值分別為1,1,3,執(zhí)行語句x = 3 * z后,形參x值變?yōu)?,此時相對應(yīng)的實參x也變?yōu)?,執(zhí)行語句y = 2 * z后,形參y值變?yōu)?,則相對應(yīng)的實參x值變?yōu)?。執(zhí)行z = x + y后,形參z值應(yīng)為12,當然這次調(diào)用后,程序代碼輸出的數(shù)值為6,6,12;
第二次調(diào)用被調(diào)過程proc1,主調(diào)過程把實參x,x,z的地址分別傳給形參x,y,z。我們應(yīng)注意一下,此時實參x的值為6而不是1,所以此時形參x,y,z值分別為6,2和2,執(zhí)行語句x = 3 * z后,形參x值為6,相對實參x值也相應(yīng)的變?yōu)?。執(zhí)行語句y = 2 * z后,形參y值變?yōu)?,相應(yīng)的實參y值也變?yōu)?,執(zhí)行z = x + y后,形參z值變?yōu)?0,相應(yīng)的實參y的值變?yōu)?0,而形參y和z的地址相同,最后它們值都應(yīng)為10,所以此次調(diào)用后,程序代碼將輸出的數(shù)值為6,10和10。
(34) 單擊命令按鈕時,下列程序的運行結(jié)果為
Private Sub Command1_Click()
Print MyFund(20, 18)
End Sub
Public Function MyFund(m As Integer, n As Integer) As Integer
Do While m <> n
Do While m > n: m=m - n: Loop
Do While m < n: n=n - m: Loop
Loop
MyFund=m
End Function
A) 0
B) 2
C) 4
D) 6
解析:此題程序代碼中,被調(diào)過程采用了Do While…Loop的嵌套語句結(jié)構(gòu),主調(diào)過程只調(diào)用了一次被調(diào)過程,Print MyFund(20, 18) 語句表明,程序最后輸出的只是被調(diào)過程的返回值。主調(diào)過程在調(diào)用被調(diào)過程MyFund時,把數(shù)值20,18分別傳給形參m和n,從被調(diào)過程中的循環(huán)語句來看,因為此時m的值大于n的值,所以執(zhí)行語句m = m - n,m值變?yōu)?,而由語句MyFund = m可看出,此過程的返回值就是m的值,即2。
(35) 在窗體上畫一個命令按鈕,然后編寫如下程序
Private Sub Command4_Click()
Dim a As Integer, b As Integer
a=1
b=2
Print N(a, b)
End Sub
Function N(x As Integer, y As Integer) As Integer
N=IIf(x > y, x, y)
End Function
程序運行后,單擊命令按鈕,輸出結(jié)果為
A) 1
B) 2
C) 5
D) 8
解析:事件過程N的作用是輸出兩個數(shù)中最大的,它調(diào)用了IIF函數(shù),條件部分是(x>y),如果滿足,那么N的值即為x的值,否則為y的值。在Sub過程中,定義了兩個變量a,b,并賦給它們初值1,2,并調(diào)用Print函數(shù),輸出N(a,b)的值,因為x<y,所以輸出y=2。