版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、VbVb中使用的過程分為中使用的過程分為子程序過程子程序過程、函數(shù)過程函數(shù)過程和和屬性過程屬性過程。過程過程子程序過程(子程序過程(SUBSUB) 函數(shù)過程(函數(shù)過程(FUNCTIONFUNCTION)屬性過程(屬性過程(PROPERTYPROPERTY)事件過程事件過程通用過程通用過程窗體過程窗體過程控件過程控件過程(1)控件事件過程形式:)控件事件過程形式: Private Sub Private Sub 控件名控件名_ _事件名事件名 (argument list)(argument list) 語句塊語句塊End SubEnd Sub說明:說明: (1 1)控件名必須與窗體中某個控件相
2、匹配,否則為通用過程。)控件名必須與窗體中某個控件相匹配,否則為通用過程。 (2 2)argument list argument list 指的是參數(shù)列表指的是參數(shù)列表, ,有無參數(shù)由事件本身決有無參數(shù)由事件本身決定,用戶不可以自行添加。定,用戶不可以自行添加。Private Sub command1_Click() endEnd SubPrivate Sub Private Sub FormForm_ _事件名事件名 (argument list)(argument list) 語句塊語句塊End Sub 2)窗體事件過程形式:)窗體事件過程形式:說明:說明:(1 1)Private Pr
3、ivate 表明該過程的使用范圍是模塊級的,在該窗體之表明該過程的使用范圍是模塊級的,在該窗體之外是不可見的。外是不可見的。(2 2)不論定義的窗體名稱為什么,均用)不論定義的窗體名稱為什么,均用FormForm 表示。表示。(3 3)事件由事件由VBVB提供。注意部分事件的發(fā)生順序:提供。注意部分事件的發(fā)生順序:InitializeInitialize、 LoadLoad、ActivateActivate、GotFocusGotFocus事件的發(fā)生順序是依次的。事件的發(fā)生順序是依次的。如有一窗體名為如有一窗體名為f1f1,則可以有如下代碼:,則可以有如下代碼:Private Sub Form
4、_Activate()Private Sub Form_Activate() L2.ForeColor = RGB(0, 255, 255) L2.ForeColor = RGB(0, 255, 255)End Sub 演示演示 引例引例1 1:編程時經(jīng)常要用到兩個數(shù)的交換,可以將其編:編程時經(jīng)常要用到兩個數(shù)的交換,可以將其編寫成過程。寫成過程。 將多次被重復(fù)使用的程序段設(shè)計成一個具有一定功能的將多次被重復(fù)使用的程序段設(shè)計成一個具有一定功能的獨立程序段,即為通用過程。獨立程序段,即為通用過程。1 1、建立通用過程、建立通用過程(1 1)打開代碼編輯器窗口)打開代碼編輯器窗口選擇工具菜單選擇工具
5、菜單選擇添加過程選擇添加過程(2 2)在代碼編輯器窗口中選擇)在代碼編輯器窗口中選擇“通用通用聲明聲明”形式如下:形式如下: Private | PublicStatic Private | PublicStatic SubSub 過程名過程名 ( 參數(shù)列表參數(shù)列表 ) 局部變量和常量聲明局部變量和常量聲明 語句塊語句塊 Exit SubExit Sub 語句塊語句塊 End SubEnd Sub 例例說明:說明: (1 1)Private|PublicPrivate|Public可缺省,若缺則系統(tǒng)默認(rèn)為可缺省,若缺則系統(tǒng)默認(rèn)為PublicPublic。StaticStatic如果不省則指定如
6、果不省則指定過程中的局部變量為過程中的局部變量為“靜態(tài)靜態(tài)”變量變量。 (2 2)過程名命名規(guī)則和變量名相同,且不能重名。)過程名命名規(guī)則和變量名相同,且不能重名。 (3 3)參數(shù)列表中的參數(shù)是形式參數(shù),可為變量名或數(shù)組名)參數(shù)列表中的參數(shù)是形式參數(shù),可為變量名或數(shù)組名() () ,可,可以沒有參數(shù),但是外層()不可省,若有多個參數(shù),則用逗號分開。以沒有參數(shù),但是外層()不可省,若有多個參數(shù),則用逗號分開。 (4)(4)形參格式形參格式:ByVal|ByRef:ByVal|ByRef變量名變量名()As ()As 數(shù)據(jù)類型數(shù)據(jù)類型 (5)過程體中)過程體中Exit Sub可以有多個,執(zhí)行到此語
7、句,立即退出該過可以有多個,執(zhí)行到此語句,立即退出該過程。程。Sub過程不可以嵌套。過程不可以嵌套。 3.SUB過程調(diào)用過程調(diào)用 格式格式1 1:CALL CALL 過程名過程名 (實參表)(實參表) 格式格式2 2:過程名:過程名 實參實參1 1, 實參實參2 2, 說明:說明:(1 1)過程名是被調(diào)用過程的名字,當(dāng)調(diào)用程序執(zhí)行到此)過程名是被調(diào)用過程的名字,當(dāng)調(diào)用程序執(zhí)行到此代碼時,代碼時,VBVB將開始執(zhí)行被調(diào)用過程。將開始執(zhí)行被調(diào)用過程。(2 2)實參可以是變量、常數(shù)或表達式。)實參可以是變量、常數(shù)或表達式。實參的個數(shù)和類實參的個數(shù)和類型、順序應(yīng)與被調(diào)過程的形參相匹配型、順序應(yīng)與被調(diào)過
8、程的形參相匹配,且多個參數(shù)之間,且多個參數(shù)之間應(yīng)用逗號分隔。對于格式應(yīng)用逗號分隔。對于格式1 1,若被調(diào)過程無參數(shù),則(實,若被調(diào)過程無參數(shù),則(實參表)可以省略。而格式參表)可以省略。而格式2 2,不論是否有參數(shù),實參列表,不論是否有參數(shù),實參列表均不需要加括號。均不需要加括號。例題例題若若在應(yīng)用程序中用在應(yīng)用程序中用“Private Sub Sub1(X As Integer, Y As Single)”定義了子程序定義了子程序Sub1,調(diào)用程序中的變量,調(diào)用程序中的變量I,J均為均為Integer型,則正確型,則正確調(diào)用子程序調(diào)用子程序Sub1的的Call語句是語句是_。 Call Su
9、b1(I,J) Call Sub1(3.1415,I) Call Sub1(3.14,234) Call Sub1(245,231.5)A. B. C. D. 無無例例1:調(diào)用兩數(shù)交換過程:調(diào)用兩數(shù)交換過程Public Sub swap(x%, y%)Public Sub swap(x%, y%) Dim t As Integer Dim t As Integer t = x: x = y: y = t t = x: x = y: y = tEnd SubEnd SubPrivate Sub Command1_Click()Private Sub Command1_Click() Dim a
10、As Integer, b As Integer Dim a As Integer, b As Integer a = Val(Text1.Text): b = Val(Text2.Text) a = Val(Text1.Text): b = Val(Text2.Text) call swap (a+0,b+0) call swap (a+0,b+0) Text1.Text = Str(a) Text1.Text = Str(a):Text2.Text = Str(b)Text2.Text = Str(b)End SubEnd Sub或或 swap a, bswap a, b例例2:將以前學(xué)過
11、的冒泡排序改寫成過程調(diào)用的形式:將以前學(xué)過的冒泡排序改寫成過程調(diào)用的形式 Private Sub bubble_sort(sort() As Integer)Private Sub bubble_sort(sort() As Integer) Dim ub As Integer, Tem As Integer Dim ub As Integer, Tem As Integer, I As Integer, switch As BooleanI As Integer, switch As Boolean ub = UBound(sort) ub = UBound(sort) :switch =
12、Trueswitch = True Do While switch Do While switch switch = False switch = False :ub = ub - 1ub = ub - 1 For i = 1 To ub For i = 1 To ub If sort(i) sort(i + 1) Then If sort(i) sort(i + 1) Then switch = True switch = True :Tem = sort(i)Tem = sort(i) sort(i) = sort(i + 1) sort(i) = sort(i + 1) :sort(i
13、+ 1) = Temsort(i + 1) = Tem End If End If Next i Next i Loop Loop End Sub End Sub Option ExplicitOption Explicit :Option Base 1 Option Base 1 Private Sub Command1_Click() Private Sub Command1_Click() Dim number(10) As Integer, i As Integer Dim number(10) As Integer, i As Integer Randomize Randomize
14、For i = 1 To 10 For i = 1 To 10 number(i) = Int(100 - 1) number(i) = Int(100 - 1) * * Rnd) + 1 Rnd) + 1 Text1 = Text1 & Str(number(i) Text1 = Text1 & Str(number(i) Next i Next i Call bubble_sort(number)Call bubble_sort(number) For i = 1 To 10 For i = 1 To 10 Text2 = Text2 & Str(number(i)
15、 Text2 = Text2 & Str(number(i) Next i Next i End Sub End SubPrivate|PublicStatic Private|PublicStatic FunctionFunction 函數(shù)名(函數(shù)名( 參數(shù)列表參數(shù)列表 ) as as 數(shù)據(jù)類型數(shù)據(jù)類型 語句塊語句塊 函數(shù)名函數(shù)名= =表達式表達式 Exit Function Exit Function 語句塊語句塊 函數(shù)名函數(shù)名= =表達式表達式 End FunctionEnd Function Private Function f(x%, y%)as Integer f=x*x+
16、2*yEnd FunctionPublic Function Gcd(x%, y%)as Integer Dim r as Integer r=x mod y Do while r0 x=y:y=r:r=x mod y Loop Gcd=y End Function說明:說明: FunctionFunction函數(shù)和函數(shù)和SubSub過程的主要區(qū)別是過程的主要區(qū)別是有無返回有無返回值值。SUBSUB過程沒有返回值,而過程沒有返回值,而FunctionFunction函數(shù)有返回值。函數(shù)有返回值?!昂瘮?shù)名函數(shù)名= =表達式表達式”語句功能是給函數(shù)名賦值,通常語句功能是給函數(shù)名賦值,通常在函數(shù)體內(nèi)至
17、少要對函數(shù)名進行一次賦值,若缺省,在函數(shù)體內(nèi)至少要對函數(shù)名進行一次賦值,若缺省,則返回對應(yīng)類型的缺省值。因為函數(shù)有返回值,所以則返回對應(yīng)類型的缺省值。因為函數(shù)有返回值,所以函數(shù)名函數(shù)名也有類型。也有類型?!癮s as 數(shù)據(jù)類型數(shù)據(jù)類型”指定函數(shù)類型,指定函數(shù)類型,若缺省,默認(rèn)為變體型。而若缺省,默認(rèn)為變體型。而SUBSUB過程名沒有值,因而過程名沒有值,因而也沒有類型,且在子過程體內(nèi)也不能對子過程名賦值。也沒有類型,且在子過程體內(nèi)也不能對子過程名賦值。格式如下:格式如下:格式格式1 1:函數(shù)函數(shù)名名( 實參表實參表 ) 出現(xiàn)在表達式中出現(xiàn)在表達式中格式格式2 2:CALL CALL 函數(shù)函數(shù)名
18、(實參)名(實參) 格式格式3 3:函數(shù)函數(shù)名名 實參實參 說明:通常用第一種比較多,用后兩種方法調(diào)說明:通常用第一種比較多,用后兩種方法調(diào)用函數(shù)時用函數(shù)時VBVB放棄函數(shù)的返回值。放棄函數(shù)的返回值。 例題例題 在應(yīng)用程序中用在應(yīng)用程序中用“Private Function Fun( X Private Function Fun( X As Integer,Y As Integer)”As Integer,Y As Integer)”定義了函數(shù)定義了函數(shù)Fun.Fun.調(diào)用調(diào)用函數(shù)函數(shù)FunFun的過程中的變量的過程中的變量I I定義為定義為IntegerInteger型,變量型,變量J J定
19、義為定義為STRINGSTRING型,能正確引用函數(shù)型,能正確引用函數(shù)FunFun的是的是_。 Fun(I,J)Fun(I,J) Call Fun(I,3.65)Call Fun(I,3.65) Fun(3.14,234)Fun(3.14,234) Fun(245,231.5)Fun(245,231.5)A. A. B. B. C. C. D. D. B 2 2、編寫一段求三角形面積的函數(shù),并多次調(diào)用。(設(shè)三角形、編寫一段求三角形面積的函數(shù),并多次調(diào)用。(設(shè)三角形三邊長為三邊長為x x,y y,z z,則面積為,則面積為c = 1 / 2 c = 1 / 2 * * (x + y + z) (
20、x + y + z);area = Sqr(c area = Sqr(c * * (c - x) (c - x) * * (c - y) (c - y) * * (c - z) (c - z)) Public Function area(xPublic Function area(x!, y, y!, z, z!) As Single) As Single Dim c As Single Dim c As Single c = 1 / 2 c = 1 / 2 * * (x + y + z) (x + y + z) areaarea = Sqr(c = Sqr(c * * (c - x) (c
21、- x) * * (c - y) (c - y) * * (c - z) (c - z) End Function End Function Private Sub Command1_Click()Private Sub Command1_Click() Dim a As Single, b As Single, c As Single Dim a As Single, b As Single, c As Single Dim d As Single, e As Single, f As Single Dim d As Single, e As Single, f As Single Dim
22、s1 As Single, s2 As Single Dim s1 As Single, s2 As Single a = InputBox( a = InputBox(輸入輸入a a:) b = InputBox( b = InputBox(輸入輸入b b:) c = InputBox( c = InputBox(輸入輸入c c:) d = InputBox( d = InputBox(輸入輸入d d:) e = InputBox( e = InputBox(輸入輸入e e:) f = InputBox( f = InputBox(輸入輸入f f:) s1 = area(a, b, c):
23、s2 = area(d, e, f) s1 = area(a, b, c): s2 = area(d, e, f) Text1.Text = Val(s1 + s2) Text1.Text = Val(s1 + s2) End Sub End Sub函數(shù)調(diào)用函數(shù)調(diào)用例例: 試分別用試分別用Sub Sub 和和FunctionFunction編寫求某級數(shù)部分和的過編寫求某級數(shù)部分和的過程,并調(diào)用之程,并調(diào)用之. .級數(shù)為 x2 xn 1 + x + + + + 2! n!精度為|xn | = eps) Do While (Abs(t) = eps) s = s + t s = s + t t =
24、 t t = t * * x / n x / n n = n + 1 n = n + 1 Loop LoopEnd SubEnd SubSubSub過程:過程:FunctionFunction函數(shù):函數(shù):P Private rivate F Functionunction js1(x As Single, eps As Double) js1(x As Single, eps As Double) As Double As Double Dim n As Integer, s As Double, t As DoubleDim n As Integer, s As Double, t As D
25、oublen = 1: s = 0: t = 1n = 1: s = 0: t = 1 Do While (Abs(t) = eps) Do While (Abs(t) = eps) s = s + t s = s + t t = t t = t * * x / n x / n n = n + 1 n = n + 1 Loop Loop js1 = sjs1 = sEnd FunctionEnd Function分別調(diào)用:分別調(diào)用: Private Sub Command1_Click()Private Sub Command1_Click() Dim f1 As Double, f2 As
26、Double Dim f1 As Double, f2 As Double Dim x As Single Dim x As Single x = Val(Text1.Text) x = Val(Text1.Text) f1 = js1(x, 0.0000001) f1 = js1(x, 0.0000001) Call js2(f2, x, 0.0000001) Call js2(f2, x, 0.0000001) Text2.Text = Str(f1) Text2.Text = Str(f1) Text3.Text = Str(f2) Text3.Text = Str(f2) End Su
27、b End Sub函數(shù)調(diào)用函數(shù)調(diào)用過程調(diào)用過程調(diào)用在程序中只能調(diào)用其他模塊中的公有過程。在程序中只能調(diào)用其他模塊中的公有過程。 1 1、窗體模塊、窗體模塊 格式:格式:CALL CALL 窗體名窗體名. .過程名(過程名( 實參表實參表 ) 2 2、標(biāo)準(zhǔn)模塊、標(biāo)準(zhǔn)模塊 (1 1)若調(diào)用自身模塊中的過程,格式為:)若調(diào)用自身模塊中的過程,格式為:CALL CALL 過程名(實參)過程名(實參) (2 2)若調(diào)用別的模塊中的過程且有兩個或以上的模塊中含有同名)若調(diào)用別的模塊中的過程且有兩個或以上的模塊中含有同名過程則格式為:過程則格式為:CALL CALL 模塊名模塊名. .過程名(實參)過程名(
28、實參) (3 3)如果標(biāo)準(zhǔn)模塊中的過程名是唯一的,應(yīng)用程序中不再有同名)如果標(biāo)準(zhǔn)模塊中的過程名是唯一的,應(yīng)用程序中不再有同名過程存在,則調(diào)用該過程是不用加模塊名。過程存在,則調(diào)用該過程是不用加模塊名。 3 3、類模塊、類模塊 例如窗體模塊中有一過程為例如窗體模塊中有一過程為ss,則可寫成,則可寫成Call Call Form1.Form1.ssss( ( 實參表實參表 ) ) 如果兩模塊如果兩模塊m1和和m2中都含有過程中都含有過程gc,則調(diào),則調(diào)用用m1中的中的gc應(yīng)寫成應(yīng)寫成 Call m1 . gc1、在調(diào)用過程時,下述說明中正確的、在調(diào)用過程時,下述說明中正確的是是 。A 只能使用只能
29、使用CallCall語句調(diào)用語句調(diào)用SubSub過程過程B 調(diào)用調(diào)用SubSub過程時,實在參數(shù)必須用括號括過程時,實在參數(shù)必須用括號括起來起來C 在表達式中調(diào)用在表達式中調(diào)用FunctionFunction過程時,可以過程時,可以不用括號把實在參數(shù)括起來不用括號把實在參數(shù)括起來D FunctionD Function過程也可以使用過程也可以使用CallCall語句調(diào)用語句調(diào)用 DSubSub過程用過程用CallCall語句調(diào)用(無參數(shù)時括語句調(diào)用(無參數(shù)時括號可省略)或作為一個語句使用。當(dāng)做語號可省略)或作為一個語句使用。當(dāng)做語句使用時實參表不需要加括號;句使用時實參表不需要加括號;Func
30、tionFunction過程的調(diào)用和過程的調(diào)用和VBVB內(nèi)部函數(shù)的方法一樣,此內(nèi)部函數(shù)的方法一樣,此時有返回值,若像調(diào)用時有返回值,若像調(diào)用SubSub過程那樣調(diào)用過程那樣調(diào)用FunctionFunction過程,其返回值被放棄。過程,其返回值被放棄。 在調(diào)用有參過程時,先進行參數(shù)的在調(diào)用有參過程時,先進行參數(shù)的“形實結(jié)合形實結(jié)合” ” 過程,實現(xiàn)主調(diào)程序和過程,實現(xiàn)主調(diào)程序和過程之間的數(shù)據(jù)傳遞,在過程之間的數(shù)據(jù)傳遞,在結(jié)合時一定要結(jié)合時一定要按順序進行并且類型要相同按順序進行并且類型要相同,特別注意,特別注意不可以按名字進行結(jié)合。該傳遞分為傳不可以按名字進行結(jié)合。該傳遞分為傳值和傳址(引用)
31、兩種方式。值和傳址(引用)兩種方式。 按值傳送時傳送的是實參的值,僅將實參變按值傳送時傳送的是實參的值,僅將實參變量的值復(fù)制給形參,執(zhí)行完調(diào)用語句后,調(diào)用程量的值復(fù)制給形參,執(zhí)行完調(diào)用語句后,調(diào)用程序中的實參值不變。序中的實參值不變。 形式參數(shù)為形式參數(shù)為: : byval byval變量名變量名 ()()AS AS 類型類型,byvalbyval變量名變量名 ()()AS AS 類型類型 例:例: Private Sub Command1_Click()Private Sub Command1_Click() Dim m As Integer, n As Integer Dim m As I
32、nteger, n As Integer m = 15: n = 20 m = 15: n = 20 Call value(m, n) Call value(m, n) Print m=; m, n=; n Print m=; m, n=; n End Sub End Sub Private Sub value(ByVal x As Integer, ByVal y As Integer) Private Sub value(ByVal x As Integer, ByVal y As Integer) x = x + 20: y = y + x x = x + 20: y = y + x P
33、rint x=; x, y=; y Print x=; x, y=; y End Sub End Subm,n的值不變的值不變沒有數(shù)值往回傳遞沒有數(shù)值往回傳遞接收接收m的值的值接收接收n的值的值 按地址傳送時傳送的是實參的地址,在調(diào)用時,被調(diào)用過程按地址傳送時傳送的是實參的地址,在調(diào)用時,被調(diào)用過程直接將接受到的地址里的值進行修改,從而將原來的實參值覆蓋直接將接受到的地址里的值進行修改,從而將原來的實參值覆蓋掉,所以,執(zhí)行完調(diào)用語句后,實參的值將會有所改變。掉,所以,執(zhí)行完調(diào)用語句后,實參的值將會有所改變。 形式參數(shù)為形式參數(shù)為 byrefbyref變量名變量名 ()()AS AS 類型類型
34、,byrefbyref變量名變量名 ()()AS AS 類型類型 例:例: Private Sub Command2_Click()Private Sub Command2_Click() Dim m As Integer, n As Integer Dim m As Integer, n As Integer m = 15: n = 20 m = 15: n = 20 Call value1(m), n) Call value1(m), n) Print m=; m, n=; n Print m=; m, n=; n End Sub End Sub Private Sub value1(By
35、Ref Private Sub value1(ByRef x x As Integer, As Integer, y y As As Integer)Integer) x = x + 20: y = y + x x = x + 20: y = y + x Print x=; x, y=; y Print x=; x, y=; y End Sub End Sub 接收接收m的地址的地址接收接收n的地址的地址m,n的值即為的值即為x,y的值的值(數(shù)值往主調(diào)過程傳遞)(數(shù)值往主調(diào)過程傳遞)例題例題用語句用語句Private Sub Convert(Y As Integer) Private Sub
36、Convert(Y As Integer) 定義的定義的SubSub過程時,以下不是按值傳遞的語句是過程時,以下不是按值傳遞的語句是_2525_。A. Call Convert(X)A. Call Convert(X)B. Call Convert(XB. Call Convert(X* *1)1)C. Convert(X)C. Convert(X)D. Convert XD. Convert X 說明:說明:按地址傳送的形參,若調(diào)用時與之結(jié)合的實參是常數(shù)按地址傳送的形參,若調(diào)用時與之結(jié)合的實參是常數(shù)或表達式,則或表達式,則vb會將之變?yōu)闀⒅優(yōu)椤鞍粗祩鬟f按值傳遞”例例1 1:按地址傳遞按地
37、址傳遞求求1 1!+2+2!+3+3!+4+4!+5+5!的和。!的和。 Private Static Function fact( Private Static Function fact( n n As Integer) As As Integer) As IntegerIntegerfact = 1fact = 1Do While n 0Do While n 0fact = fact fact = fact * * n nn = n 1n = n 1LoopLoopEnd FunctionEnd Function Private Sub Form_Click()Private Sub F
38、orm_Click() Dim sum As Integer, i As Integer Dim sum As Integer, i As Integer For i = 5 To 1 Step 1 For i = 5 To 1 Step 1 sum = sum + sum = sum + fact(i)fact(i) Next I Next I Print sum=; sum Print sum=; sumEnd SubEnd Subsum = sum + sum = sum + factfact(( (i i) ))sum= 120 錯誤結(jié)果錯誤結(jié)果sum= 153形參的值改變后實參的跟形
39、參的值改變后實參的跟著變化,要防止產(chǎn)生錯誤著變化,要防止產(chǎn)生錯誤例例2 2:運行下列程序,單擊窗體時后的輸出結(jié)果:運行下列程序,單擊窗體時后的輸出結(jié)果 Private Function add(a As Integer, b As Integer, Private Function add(a As Integer, b As Integer, c As Integer) c As Integer) a = a + 10: b = b + 10: c = c + 10 a = a + 10: b = b + 10: c = c + 10 add = a + b + c add = a + b
40、+ cEnd FunctionEnd FunctionPrivate Sub Form_Click()Private Sub Form_Click() Dim v1 As Integer, v2 As Integer, v3 As Integer Dim v1 As Integer, v2 As Integer, v3 As Integer v1 = 2: v2 = 3: v3 = 4 v1 = 2: v2 = 3: v3 = 4 Print v1 + v2 + v3 Print v1 + v2 + v3 * * add(v1, v2, v3) add(v1, v2, v3)End SubEn
41、d Sub函數(shù)的優(yōu)先級高函數(shù)的優(yōu)先級高例例3 3:驗證:驗證9 9的倍數(shù)(如果一個數(shù)的各位數(shù)之和等于該數(shù)的兩倍的的倍數(shù)(如果一個數(shù)的各位數(shù)之和等于該數(shù)的兩倍的各位數(shù)之和,則該數(shù)為各位數(shù)之和,則該數(shù)為9 9的倍數(shù)。如:的倍數(shù)。如:9999的兩倍是的兩倍是198198,且,且9+9=1+9+89+9=1+9+8,則,則9999就是就是9 9的倍數(shù)。)的倍數(shù)。) P Privaterivate F Functionunction sm(_) As sm(_) As Integer Integer Dim sm1 As Integer Dim sm1 As Integer sm1 = 0 sm1 =
42、0 Do While n 0 Do While n 0 sm1 = sm1 + n Mod 10 sm1 = sm1 + n Mod 10 n = n 10 n = n 10 Loop Loop sm = sm1 sm = sm1 End Function End FunctionByVal n As Integersm(n)的功的功能能求求n的各位的各位數(shù)之和數(shù)之和例例3 3:驗證:驗證9 9的倍數(shù)的倍數(shù) Private Sub Command1_Click() Private Sub Command1_Click() Dim n As Integer, s1 As Integer, s2
43、As IntegerDim n As Integer, s1 As Integer, s2 As Integer n = Val(Text1.Text) n = Val(Text1.Text) s1 = sm(n) s1 = sm(n) s2 = _ s2 = _ If s1 = s2 Then If s1 = s2 Then MsgBox MsgBox 該數(shù)是該數(shù)是9 9的倍數(shù)的倍數(shù) Else Else MsgBox MsgBox 該數(shù)不是該數(shù)不是9 9的倍數(shù)的倍數(shù) End If End If Text1.Text = Text1.Text = Text1.SetFocus Text1.Se
44、tFocus End Sub End Subsm(2 * n)演演 示示數(shù)組可以作為形式參數(shù)。數(shù)組可以作為形式參數(shù)。形參數(shù)組名()形參數(shù)組名()ASAS類型類型 。 但但形參數(shù)組只能是按地址傳遞的參數(shù)形參數(shù)組只能是按地址傳遞的參數(shù)。對應(yīng)。對應(yīng)實參的類型必須和形參一致,實參的類型必須和形參一致,數(shù)組名在實參中后數(shù)組名在實參中后面不加一對括號面不加一對括號。在被調(diào)用的過程中不可以用。在被調(diào)用的過程中不可以用DIMDIM對形參進行聲明,但是動態(tài)數(shù)組時,可以用對形參進行聲明,但是動態(tài)數(shù)組時,可以用REDIMREDIM來重新定義數(shù)組的維界與大小。來重新定義數(shù)組的維界與大小。 例例4 4:求任一一維數(shù)組元
45、素之和:求任一一維數(shù)組元素之和 Private Function tim(Private Function tim(a() As Integera() As Integer) ) Dim t As Double, i%Dim t As Double, i%t = 0t = 0For i = LBound(a) To UBound(a)For i = LBound(a) To UBound(a)t = t + a(i)t = t + a(i)Next iNext itim = ttim = tEnd FunctionEnd FunctionPrivate Sub Form_Click()Priv
46、ate Sub Form_Click()Dim a(1 To 5) As IntegerDim a(1 To 5) As IntegerDim b(2 To 10) As Integer Dim b(2 To 10) As Integer Dim i As IntegerDim i As IntegerDim t1 As IntegerDim t1 As IntegerDim t2 As LongDim t2 As LongFor i = 1 To 5For i = 1 To 5 a(i) = i a(i) = iNext iNext iFor i = 2 To 10For i = 2 To
47、10 b(i) = i b(i) = iNext iNext it1 = tim(t1 = tim(a a) )t2 = tim(t2 = tim(b b) )Print t1=; t1, t2=; t2Print t1=; t1, t2=; t2End SubEnd Sub實參數(shù)組后不實參數(shù)組后不加圓括號加圓括號例例5 5:數(shù)組參數(shù)傳遞(教材:數(shù)組參數(shù)傳遞(教材P P173173)Private Sub change(Private Sub change(a()a() As Integer) As Integer)Dim i%Dim i%ReDim a(7)ReDim a(7)For i =
48、 1 To 7For i = 1 To 7a(i) = Ia(i) = INext INext IEnd SubEnd Sub形參數(shù)組只能形參數(shù)組只能按地址傳遞按地址傳遞Option ExplicitOption ExplicitOption Base 1Option Base 1Private Sub Form_Click()Private Sub Form_Click()Dim Dim arraya()arraya() As Integer, i% As Integer, i%ReDim ReDim arraya(5)arraya(5)Print Print 調(diào)用前上界是調(diào)用前上界是:;
49、UBound(arraya):; UBound(arraya)Call change(Call change(arrayaarraya) )Print Print 調(diào)用后上界是調(diào)用后上界是:; UBound(arraya):; UBound(arraya)Print Print 數(shù)組各元素的值是數(shù)組各元素的值是:;:;For i = 1 To UBound(arraya)For i = 1 To UBound(arraya) Print arraya(i); Print arraya(i);Next iNext iPrintPrintEnd SubEnd Sub 對象也可以作為參數(shù)傳遞,但也對
50、象也可以作為參數(shù)傳遞,但也只能是按地址來傳遞。在形參中若是只能是按地址來傳遞。在形參中若是控件,則類型聲明為控件,則類型聲明為“CONTRAL”CONTRAL”,若是,若是窗體,則類型聲明為窗體,則類型聲明為“FORM”FORM”。 例例6 6:Private Sub Cmd1_Click()Call Objarg(lab1)End SubPrivate Sub Cmd2_Click() Call Frmarg(Frmsecond)End SubPrivate Sub Form_load() frmfirst.Left = 2000 frmfirst.Top = 1500 lab1.Capti
51、on = 學(xué)習(xí)使用學(xué)習(xí)使用VB6.0End SubPrivate Sub Objarg(Lad As Control) Lad.BackColor = &HFF0000 Lad.ForeColor = &HFFFF& Lad.Font = 14 Lad.FontItalic = True Lad.Caption = 對象參數(shù)的傳遞對象參數(shù)的傳遞End SubPrivate Sub Frmarg(F As Form) F.Left = (Screen.Width - F.Width) / 2 F.Top = (Screen.Height - F.Height) / 2 f
52、rmfirst.Hide F.ShowEnd SubPrivate Sub Cmd1_Click()Unload Mefrmfirst.ShowEnd SubFrmfirstFrmsecond 用自身的結(jié)構(gòu)來描述自身稱為“遞歸”即一個過程調(diào)用過程本身,在遞歸調(diào)用中,一個過程執(zhí)行的某一步要用到它自身的上一步或上幾步的結(jié)果。例如:最典型的例子是對階乘運算可作如下定義: n!=n*(n-1)! (n-1)!=(n-1) *(n-2)! 直接遞歸:自己調(diào)用自己直接遞歸:自己調(diào)用自己 間接遞歸:間接遞歸:A A調(diào)用調(diào)用B B,B B調(diào)用調(diào)用A A遞歸過程中必須有遞歸結(jié)束語句。遞歸過程中必須有遞歸結(jié)束語句
53、。 VBVB允許一個子過程或函數(shù)在自身定義的內(nèi)部調(diào)用自己,允許一個子過程或函數(shù)在自身定義的內(nèi)部調(diào)用自己,這樣的子過程或函數(shù)稱為這樣的子過程或函數(shù)稱為遞歸子過程遞歸子過程或或遞歸函數(shù)遞歸函數(shù)。許多問。許多問題中具有遞歸的特性,用遞歸調(diào)用描述它們就非常方便。題中具有遞歸的特性,用遞歸調(diào)用描述它們就非常方便。注意:遞歸過程必須有一個結(jié)束遞歸的終止條件,否則會注意:遞歸過程必須有一個結(jié)束遞歸的終止條件,否則會無限制的執(zhí)行下去。無限制的執(zhí)行下去。例例7 7、 求求fac(n)=n! fac(n)=n! 的值的值 (n n已已4 4為例)為例)遞推遞推fac(4)=4*fac(3)fac(3)=3*fac
54、(2)fac(2)=2*fac(1)fac(1)=1fac(2)=2*1fac(3)=3*2fac(4)=4*6回歸回歸Public Function fac(n As Integer) As IntegerPublic Function fac(n As Integer) As Integer If n=1 Then If n=1 Then fac=1fac=1 Else Else fac=n fac=n* *fac(n-1)fac(n-1) End If End IfEnd FunctionEnd FunctionPrivate Sub Command1_Click()Private Su
55、b Command1_Click() Print “fac(4)=“; fac(4) Print “fac(4)=“; fac(4)End SubEnd Sub遞歸調(diào)用遞歸調(diào)用演示演示 1 1、求階乘。、求階乘。n!=nn!=n* *(n-1)!(n-1)! 2 2、求菲波那契數(shù)列前、求菲波那契數(shù)列前1010項。項。F(1)=1F(1)=1,F(xiàn)(2)=1F(2)=1,后面各項,后面各項滿滿 足:足:F(n)=F(n-1)+F(n-2)F(n)=F(n-1)+F(n-2) 3 3、 求兩個數(shù)的最大公約數(shù)。求兩個數(shù)的最大公約數(shù)。 4、逆轉(zhuǎn)輸出一個字符串。逆轉(zhuǎn)輸出一個字符串。 5 5、漢諾塔游戲。漢
56、諾塔游戲。 相關(guān)習(xí)題:相關(guān)習(xí)題:Private Sub Command1_Click() n = Text1 m = Text2 Text3 = gcd(n, m)End SubPrivate Function gcd(ByVal x, ByVal y) As Integer r = x Mod y If r = 0 Then gcd = y Else gcd = gcd(y, r) End IfEnd Function應(yīng)用程序(.vbp文件)類模塊(.cls)文件一個或若干個窗體模塊(*.frm)文件用戶自定義子過程(Sub)用戶自定義函數(shù)過程(Function)事件過程(Sub)用戶自定義
57、子過程(Sub)用戶自定義函數(shù)過程(Function)一個或若干個標(biāo)準(zhǔn)模塊(*.bas)文件全局級模塊級過程級作用域為定義的過程內(nèi)。指在過程內(nèi)用作用域為定義的過程內(nèi)。指在過程內(nèi)用DimDim語句語句聲明的變量(或不加聲明直接使用的變量),聲明的變量(或不加聲明直接使用的變量),只能在本過程中使用,別的過程不可訪問。局部變只能在本過程中使用,別的過程不可訪問。局部變量隨過程的調(diào)用而分配存儲單元,并進行變量的初始量隨過程的調(diào)用而分配存儲單元,并進行變量的初始化,一旦該過程體結(jié)束,變量的內(nèi)容自動消失,占用化,一旦該過程體結(jié)束,變量的內(nèi)容自動消失,占用的存儲單元釋放。不同的過程中可有相同名稱的變量,的
58、存儲單元釋放。不同的過程中可有相同名稱的變量,彼此互不相干。使用局部變量有利于程序的調(diào)試彼此互不相干。使用局部變量有利于程序的調(diào)試如如 Dim b as stringDim b as string 作用域為定義的窗體作用域為定義的窗體/ /模塊內(nèi)。指在一個窗體模塊內(nèi)。指在一個窗體/ /模塊的任何過程外,即在模塊的任何過程外,即在“通用聲明通用聲明”段中用段中用DimDim語語句句或用或用PrivatePrivate語句聲明的變量,可被本窗體語句聲明的變量,可被本窗體/ /模塊的模塊的任何過程訪問。任何過程訪問。 如如 Dim c as stringDim c as string 作用域為整個應(yīng)
59、用程序內(nèi)。指在窗體或標(biāo)準(zhǔn)模塊的作用域為整個應(yīng)用程序內(nèi)。指在窗體或標(biāo)準(zhǔn)模塊的任何過程或函數(shù)外,即任何過程或函數(shù)外,即在在“通用聲明通用聲明”段中用段中用PublicPublic語語句聲明的變量,可被應(yīng)用程序的任何過程或函數(shù)訪問句聲明的變量,可被應(yīng)用程序的任何過程或函數(shù)訪問。全局變量的值在整個應(yīng)用程序中始終不會消失和重新初全局變量的值在整個應(yīng)用程序中始終不會消失和重新初始化,只有當(dāng)整個應(yīng)用程序結(jié)束時,才會消失。始化,只有當(dāng)整個應(yīng)用程序結(jié)束時,才會消失。 如如 Dim a as stringDim a as string 指在某個窗體或標(biāo)準(zhǔn)模塊內(nèi)定義的過程指在某個窗體或標(biāo)準(zhǔn)模塊內(nèi)定義的過程, ,定義子過程定義子過程或函數(shù)時前加或函數(shù)時前加 PrivatePrivate關(guān)鍵字關(guān)鍵字, ,過程只能被本窗體或本標(biāo)過程只能被本窗體或本標(biāo)準(zhǔn)模塊中的過程調(diào)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025湖南省建筑安全員《C證》考試題庫及答案
- 2025甘肅省建筑安全員-C證(專職安全員)考試題庫
- 2025年山西省建筑安全員A證考試題庫及答案
- XX科技集團開工大吉課件模板
- 班主任工作經(jīng)驗交流52
- 《心理健康案例》課件
- 《撲動及纖顫》課件
- 三年級科學(xué)復(fù)習(xí)
- 單位人力資源管理制度范文大全十篇
- 單位管理制度展示大全人員管理篇
- 2024-2025學(xué)年高中英語選擇性必修 第二冊北師大版(2019)教學(xué)設(shè)計合集
- 高標(biāo)準(zhǔn)農(nóng)田跟蹤審計、工程中間計量、變更價格調(diào)整及竣工結(jié)算審核項目 投標(biāo)方案(技術(shù)方案)
- 感恩節(jié)英文課件
- 慈溪市2024-2025學(xué)年四上數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- 人教版小學(xué)一年級語文上冊全冊試卷全套含答案
- 2025年高考化學(xué)二、三輪復(fù)習(xí)策略講座
- 2024-2025學(xué)年哈爾濱市平房區(qū)四上數(shù)學(xué)期末調(diào)研試題含解析
- 2022年高考數(shù)學(xué)試卷(上海)(秋考)(空白卷)
- 山東省濟南市語文小升初2024年模擬試題與參考答案
- 裝配式建筑復(fù)習(xí)試題及答案
- 空氣動力學(xué)仿真技術(shù):湍流模型:k-ε湍流模型原理與應(yīng)用
評論
0/150
提交評論