第07章過(guò)程(10學(xué)時(shí))b_第1頁(yè)
第07章過(guò)程(10學(xué)時(shí))b_第2頁(yè)
第07章過(guò)程(10學(xué)時(shí))b_第3頁(yè)
第07章過(guò)程(10學(xué)時(shí))b_第4頁(yè)
第07章過(guò)程(10學(xué)時(shí))b_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、VbVb中使用的過(guò)程分為中使用的過(guò)程分為子程序過(guò)程子程序過(guò)程、函數(shù)過(guò)程函數(shù)過(guò)程和和屬性過(guò)程屬性過(guò)程。過(guò)程過(guò)程子程序過(guò)程(子程序過(guò)程(SUBSUB) 函數(shù)過(guò)程(函數(shù)過(guò)程(FUNCTIONFUNCTION)屬性過(guò)程(屬性過(guò)程(PROPERTYPROPERTY)事件過(guò)程事件過(guò)程通用過(guò)程通用過(guò)程窗體過(guò)程窗體過(guò)程控件過(guò)程控件過(guò)程(1)控件事件過(guò)程形式:)控件事件過(guò)程形式: Private Sub Private Sub 控件名控件名_ _事件名事件名 (argument list)(argument list) 語(yǔ)句塊語(yǔ)句塊End SubEnd Sub說(shuō)明:說(shuō)明: (1 1)控件名必須與窗體中某個(gè)控件相

2、匹配,否則為通用過(guò)程。)控件名必須與窗體中某個(gè)控件相匹配,否則為通用過(guò)程。 (2 2)argument list argument list 指的是參數(shù)列表指的是參數(shù)列表, ,有無(wú)參數(shù)由事件本身決有無(wú)參數(shù)由事件本身決定,用戶不可以自行添加。定,用戶不可以自行添加。Private Sub command1_Click() endEnd SubPrivate Sub Private Sub FormForm_ _事件名事件名 (argument list)(argument list) 語(yǔ)句塊語(yǔ)句塊End Sub 2)窗體事件過(guò)程形式:)窗體事件過(guò)程形式:說(shuō)明:說(shuō)明:(1 1)Private Pr

3、ivate 表明該過(guò)程的使用范圍是模塊級(jí)的,在該窗體之表明該過(guò)程的使用范圍是模塊級(jí)的,在該窗體之外是不可見的。外是不可見的。(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:編程時(shí)經(jīng)常要用到兩個(gè)數(shù)的交換,可以將其編:編程時(shí)經(jīng)常要用到兩個(gè)數(shù)的交換,可以將其編寫成過(guò)程。寫成過(guò)程。 將多次被重復(fù)使用的程序段設(shè)計(jì)成一個(gè)具有一定功能的將多次被重復(fù)使用的程序段設(shè)計(jì)成一個(gè)具有一定功能的獨(dú)立程序段,即為通用過(guò)程。獨(dú)立程序段,即為通用過(guò)程。1 1、建立通用過(guò)程、建立通用過(guò)程(1 1)打開代碼編輯器窗口)打開代碼編輯器窗口選擇工具菜單選擇工具

5、菜單選擇添加過(guò)程選擇添加過(guò)程(2 2)在代碼編輯器窗口中選擇)在代碼編輯器窗口中選擇“通用通用聲明聲明”形式如下:形式如下: Private | PublicStatic Private | PublicStatic SubSub 過(guò)程名過(guò)程名 ( 參數(shù)列表參數(shù)列表 ) 局部變量和常量聲明局部變量和常量聲明 語(yǔ)句塊語(yǔ)句塊 Exit SubExit Sub 語(yǔ)句塊語(yǔ)句塊 End SubEnd Sub 例例說(shuō)明:說(shuō)明: (1 1)Private|PublicPrivate|Public可缺省,若缺則系統(tǒng)默認(rèn)為可缺省,若缺則系統(tǒng)默認(rèn)為PublicPublic。StaticStatic如果不省則指定如

6、果不省則指定過(guò)程中的局部變量為過(guò)程中的局部變量為“靜態(tài)靜態(tài)”變量變量。 (2 2)過(guò)程名命名規(guī)則和變量名相同,且不能重名。)過(guò)程名命名規(guī)則和變量名相同,且不能重名。 (3 3)參數(shù)列表中的參數(shù)是形式參數(shù),可為變量名或數(shù)組名)參數(shù)列表中的參數(shù)是形式參數(shù),可為變量名或數(shù)組名() () ,可,可以沒有參數(shù),但是外層()不可省,若有多個(gè)參數(shù),則用逗號(hào)分開。以沒有參數(shù),但是外層()不可省,若有多個(gè)參數(shù),則用逗號(hào)分開。 (4)(4)形參格式形參格式:ByVal|ByRef:ByVal|ByRef變量名變量名()As ()As 數(shù)據(jù)類型數(shù)據(jù)類型 (5)過(guò)程體中)過(guò)程體中Exit Sub可以有多個(gè),執(zhí)行到此語(yǔ)

7、句,立即退出該過(guò)可以有多個(gè),執(zhí)行到此語(yǔ)句,立即退出該過(guò)程。程。Sub過(guò)程不可以嵌套。過(guò)程不可以嵌套。 3.SUB過(guò)程調(diào)用過(guò)程調(diào)用 格式格式1 1:CALL CALL 過(guò)程名過(guò)程名 (實(shí)參表)(實(shí)參表) 格式格式2 2:過(guò)程名:過(guò)程名 實(shí)參實(shí)參1 1, 實(shí)參實(shí)參2 2, 說(shuō)明:說(shuō)明:(1 1)過(guò)程名是被調(diào)用過(guò)程的名字,當(dāng)調(diào)用程序執(zhí)行到此)過(guò)程名是被調(diào)用過(guò)程的名字,當(dāng)調(diào)用程序執(zhí)行到此代碼時(shí),代碼時(shí),VBVB將開始執(zhí)行被調(diào)用過(guò)程。將開始執(zhí)行被調(diào)用過(guò)程。(2 2)實(shí)參可以是變量、常數(shù)或表達(dá)式。)實(shí)參可以是變量、常數(shù)或表達(dá)式。實(shí)參的個(gè)數(shù)和類實(shí)參的個(gè)數(shù)和類型、順序應(yīng)與被調(diào)過(guò)程的形參相匹配型、順序應(yīng)與被調(diào)過(guò)

8、程的形參相匹配,且多個(gè)參數(shù)之間,且多個(gè)參數(shù)之間應(yīng)用逗號(hào)分隔。對(duì)于格式應(yīng)用逗號(hào)分隔。對(duì)于格式1 1,若被調(diào)過(guò)程無(wú)參數(shù),則(實(shí),若被調(diào)過(guò)程無(wú)參數(shù),則(實(shí)參表)可以省略。而格式參表)可以省略。而格式2 2,不論是否有參數(shù),實(shí)參列表,不論是否有參數(shù),實(shí)參列表均不需要加括號(hào)。均不需要加括號(hào)。例題例題若若在應(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語(yǔ)句是語(yǔ)句是_。 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. 無(wú)無(wú)例例1:調(diào)用兩數(shù)交換過(guò)程:調(diào)用兩數(shù)交換過(guò)程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é)過(guò)

11、的冒泡排序改寫成過(guò)程調(diào)用的形式:將以前學(xué)過(guò)的冒泡排序改寫成過(guò)程調(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ù)類型 語(yǔ)句塊語(yǔ)句塊 函數(shù)名函數(shù)名= =表達(dá)式表達(dá)式 Exit Function Exit Function 語(yǔ)句塊語(yǔ)句塊 函數(shù)名函數(shù)名= =表達(dá)式表達(dá)式 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說(shuō)明:說(shuō)明: FunctionFunction函數(shù)和函數(shù)和SubSub過(guò)程的主要區(qū)別是過(guò)程的主要區(qū)別是有無(wú)返回有無(wú)返回值值。SUBSUB過(guò)程沒有返回值,而過(guò)程沒有返回值,而FunctionFunction函數(shù)有返回值。函數(shù)有返回值?!昂瘮?shù)名函數(shù)名= =表達(dá)式表達(dá)式”語(yǔ)句功能是給函數(shù)名賦值,通常語(yǔ)句功能是給函數(shù)名賦值,通常在函數(shù)體內(nèi)至

17、少要對(duì)函數(shù)名進(jìn)行一次賦值,若缺省,在函數(shù)體內(nèi)至少要對(duì)函數(shù)名進(jìn)行一次賦值,若缺省,則返回對(duì)應(yīng)類型的缺省值。因?yàn)楹瘮?shù)有返回值,所以則返回對(duì)應(yīng)類型的缺省值。因?yàn)楹瘮?shù)有返回值,所以函數(shù)名函數(shù)名也有類型。也有類型?!癮s as 數(shù)據(jù)類型數(shù)據(jù)類型”指定函數(shù)類型,指定函數(shù)類型,若缺省,默認(rèn)為變體型。而若缺省,默認(rèn)為變體型。而SUBSUB過(guò)程名沒有值,因而過(guò)程名沒有值,因而也沒有類型,且在子過(guò)程體內(nèi)也不能對(duì)子過(guò)程名賦值。也沒有類型,且在子過(guò)程體內(nèi)也不能對(duì)子過(guò)程名賦值。格式如下:格式如下:格式格式1 1:函數(shù)函數(shù)名名( 實(shí)參表實(shí)參表 ) 出現(xiàn)在表達(dá)式中出現(xiàn)在表達(dá)式中格式格式2 2:CALL CALL 函數(shù)函數(shù)名

18、(實(shí)參)名(實(shí)參) 格式格式3 3:函數(shù)函數(shù)名名 實(shí)參實(shí)參 說(shuō)明:通常用第一種比較多,用后兩種方法調(diào)說(shuō)明:通常用第一種比較多,用后兩種方法調(diào)用函數(shù)時(shí)用函數(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的過(guò)程中的變量的過(guò)程中的變量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è)三角形三邊長(zhǎng)為三邊長(zhǎng)為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編寫求某級(jí)數(shù)部分和的過(guò)編寫求某級(jí)數(shù)部分和的過(guò)程,并調(diào)用之程,并調(diào)用之. .級(jí)數(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過(guò)程:過(guò)程: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)用過(guò)程調(diào)用過(guò)程調(diào)用在程序中只能調(diào)用其他模塊中的公有過(guò)程。在程序中只能調(diào)用其他模塊中的公有過(guò)程。 1 1、窗體模塊、窗體模塊 格式:格式:CALL CALL 窗體名窗體名. .過(guò)程名(過(guò)程名( 實(shí)參表實(shí)參表 ) 2 2、標(biāo)準(zhǔn)模塊、標(biāo)準(zhǔn)模塊 (1 1)若調(diào)用自身模塊中的過(guò)程,格式為:)若調(diào)用自身模塊中的過(guò)程,格式為:CALL CALL 過(guò)程名(實(shí)參)過(guò)程名(實(shí)參) (2 2)若調(diào)用別的模塊中的過(guò)程且有兩個(gè)或以上的模塊中含有同名)若調(diào)用別的模塊中的過(guò)程且有兩個(gè)或以上的模塊中含有同名過(guò)程則格式為:過(guò)程則格式為:CALL CALL 模塊名模塊名. .過(guò)程名(實(shí)參)過(guò)程名(

28、實(shí)參) (3 3)如果標(biāo)準(zhǔn)模塊中的過(guò)程名是唯一的,應(yīng)用程序中不再有同名)如果標(biāo)準(zhǔn)模塊中的過(guò)程名是唯一的,應(yīng)用程序中不再有同名過(guò)程存在,則調(diào)用該過(guò)程是不用加模塊名。過(guò)程存在,則調(diào)用該過(guò)程是不用加模塊名。 3 3、類模塊、類模塊 例如窗體模塊中有一過(guò)程為例如窗體模塊中有一過(guò)程為ss,則可寫成,則可寫成Call Call Form1.Form1.ssss( ( 實(shí)參表實(shí)參表 ) ) 如果兩模塊如果兩模塊m1和和m2中都含有過(guò)程中都含有過(guò)程gc,則調(diào),則調(diào)用用m1中的中的gc應(yīng)寫成應(yīng)寫成 Call m1 . gc1、在調(diào)用過(guò)程時(shí),下述說(shuō)明中正確的、在調(diào)用過(guò)程時(shí),下述說(shuō)明中正確的是是 。A 只能使用只能

29、使用CallCall語(yǔ)句調(diào)用語(yǔ)句調(diào)用SubSub過(guò)程過(guò)程B 調(diào)用調(diào)用SubSub過(guò)程時(shí),實(shí)在參數(shù)必須用括號(hào)括過(guò)程時(shí),實(shí)在參數(shù)必須用括號(hào)括起來(lái)起來(lái)C 在表達(dá)式中調(diào)用在表達(dá)式中調(diào)用FunctionFunction過(guò)程時(shí),可以過(guò)程時(shí),可以不用括號(hào)把實(shí)在參數(shù)括起來(lái)不用括號(hào)把實(shí)在參數(shù)括起來(lái)D FunctionD Function過(guò)程也可以使用過(guò)程也可以使用CallCall語(yǔ)句調(diào)用語(yǔ)句調(diào)用 DSubSub過(guò)程用過(guò)程用CallCall語(yǔ)句調(diào)用(無(wú)參數(shù)時(shí)括語(yǔ)句調(diào)用(無(wú)參數(shù)時(shí)括號(hào)可省略)或作為一個(gè)語(yǔ)句使用。當(dāng)做語(yǔ)號(hào)可省略)或作為一個(gè)語(yǔ)句使用。當(dāng)做語(yǔ)句使用時(shí)實(shí)參表不需要加括號(hào);句使用時(shí)實(shí)參表不需要加括號(hào);Func

30、tionFunction過(guò)程的調(diào)用和過(guò)程的調(diào)用和VBVB內(nèi)部函數(shù)的方法一樣,此內(nèi)部函數(shù)的方法一樣,此時(shí)有返回值,若像調(diào)用時(shí)有返回值,若像調(diào)用SubSub過(guò)程那樣調(diào)用過(guò)程那樣調(diào)用FunctionFunction過(guò)程,其返回值被放棄。過(guò)程,其返回值被放棄。 在調(diào)用有參過(guò)程時(shí),先進(jìn)行參數(shù)的在調(diào)用有參過(guò)程時(shí),先進(jìn)行參數(shù)的“形實(shí)結(jié)合形實(shí)結(jié)合” ” 過(guò)程,實(shí)現(xiàn)主調(diào)程序和過(guò)程,實(shí)現(xiàn)主調(diào)程序和過(guò)程之間的數(shù)據(jù)傳遞,在過(guò)程之間的數(shù)據(jù)傳遞,在結(jié)合時(shí)一定要結(jié)合時(shí)一定要按順序進(jìn)行并且類型要相同按順序進(jìn)行并且類型要相同,特別注意,特別注意不可以按名字進(jìn)行結(jié)合。該傳遞分為傳不可以按名字進(jìn)行結(jié)合。該傳遞分為傳值和傳址(引用)

31、兩種方式。值和傳址(引用)兩種方式。 按值傳送時(shí)傳送的是實(shí)參的值,僅將實(shí)參變按值傳送時(shí)傳送的是實(shí)參的值,僅將實(shí)參變量的值復(fù)制給形參,執(zhí)行完調(diào)用語(yǔ)句后,調(diào)用程量的值復(fù)制給形參,執(zhí)行完調(diào)用語(yǔ)句后,調(diào)用程序中的實(shí)參值不變。序中的實(shí)參值不變。 形式參數(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的值的值 按地址傳送時(shí)傳送的是實(shí)參的地址,在調(diào)用時(shí),被調(diào)用過(guò)程按地址傳送時(shí)傳送的是實(shí)參的地址,在調(diào)用時(shí),被調(diào)用過(guò)程直接將接受到的地址里的值進(jìn)行修改,從而將原來(lái)的實(shí)參值覆蓋直接將接受到的地址里的值進(jìn)行修改,從而將原來(lái)的實(shí)參值覆蓋掉,所以,執(zhí)行完調(diào)用語(yǔ)句后,實(shí)參的值將會(huì)有所改變。掉,所以,執(zhí)行完調(diào)用語(yǔ)句后,實(shí)參的值將會(huì)有所改變。 形式參數(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)過(guò)程傳遞)(數(shù)值往主調(diào)過(guò)程傳遞)例題例題用語(yǔ)句用語(yǔ)句Private Sub Convert(Y As Integer) Private Sub

36、Convert(Y As Integer) 定義的定義的SubSub過(guò)程時(shí),以下不是按值傳遞的語(yǔ)句是過(guò)程時(shí),以下不是按值傳遞的語(yǔ)句是_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 說(shuō)明:說(shuō)明:按地址傳送的形參,若調(diào)用時(shí)與之結(jié)合的實(shí)參是常數(shù)按地址傳送的形參,若調(diào)用時(shí)與之結(jié)合的實(shí)參是常數(shù)或表達(dá)式,則或表達(dá)式,則vb會(huì)將之變?yōu)闀?huì)將之變?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 錯(cuò)誤結(jié)果錯(cuò)誤結(jié)果sum= 153形參的值改變后實(shí)參的跟形

39、參的值改變后實(shí)參的跟著變化,要防止產(chǎn)生錯(cuò)誤著變化,要防止產(chǎn)生錯(cuò)誤例例2 2:運(yùn)行下列程序,單擊窗體時(shí)后的輸出結(jié)果:運(yùn)行下列程序,單擊窗體時(shí)后的輸出結(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)先級(jí)高函數(shù)的優(yōu)先級(jí)高例例3 3:驗(yàn)證:驗(yàn)證9 9的倍數(shù)(如果一個(gè)數(shù)的各位數(shù)之和等于該數(shù)的兩倍的的倍數(shù)(如果一個(gè)數(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:驗(yàn)證:驗(yàn)證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ù)。對(duì)應(yīng)。對(duì)應(yīng)實(shí)參的類型必須和形參一致,實(shí)參的類型必須和形參一致,數(shù)組名在實(shí)參中后數(shù)組名在實(shí)參中后面不加一對(duì)括號(hào)面不加一對(duì)括號(hào)。在被調(diào)用的過(guò)程中不可以用。在被調(diào)用的過(guò)程中不可以用DIMDIM對(duì)形參進(jìn)行聲明,但是動(dòng)態(tài)數(shù)組時(shí),可以用對(duì)形參進(jìn)行聲明,但是動(dòng)態(tài)數(shù)組時(shí),可以用REDIMREDIM來(lái)重新定義數(shù)組的維界與大小。來(lái)重新定義數(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ù)組后不實(shí)參數(shù)組后不加圓括號(hào)加圓括號(hào)例例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 對(duì)象也可以作為參數(shù)傳遞,但也對(duì)

50、象也可以作為參數(shù)傳遞,但也只能是按地址來(lái)傳遞。在形參中若是只能是按地址來(lái)傳遞。在形參中若是控件,則類型聲明為控件,則類型聲明為“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 = 對(duì)象參數(shù)的傳遞對(duì)象參數(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)來(lái)描述自身稱為“遞歸”即一個(gè)過(guò)程調(diào)用過(guò)程本身,在遞歸調(diào)用中,一個(gè)過(guò)程執(zhí)行的某一步要用到它自身的上一步或上幾步的結(jié)果。例如:最典型的例子是對(duì)階乘運(yùn)算可作如下定義: 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遞歸過(guò)程中必須有遞歸結(jié)束語(yǔ)句。遞歸過(guò)程中必須有遞歸結(jié)束語(yǔ)句

53、。 VBVB允許一個(gè)子過(guò)程或函數(shù)在自身定義的內(nèi)部調(diào)用自己,允許一個(gè)子過(guò)程或函數(shù)在自身定義的內(nèi)部調(diào)用自己,這樣的子過(guò)程或函數(shù)稱為這樣的子過(guò)程或函數(shù)稱為遞歸子過(guò)程遞歸子過(guò)程或或遞歸函數(shù)遞歸函數(shù)。許多問。許多問題中具有遞歸的特性,用遞歸調(diào)用描述它們就非常方便。題中具有遞歸的特性,用遞歸調(diào)用描述它們就非常方便。注意:遞歸過(guò)程必須有一個(gè)結(jié)束遞歸的終止條件,否則會(huì)注意:遞歸過(guò)程必須有一個(gè)結(jié)束遞歸的終止條件,否則會(huì)無(wú)限制的執(zhí)行下去。無(wú)限制的執(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項(xiàng)。項(xiàng)。F(1)=1F(1)=1,F(xiàn)(2)=1F(2)=1,后面各項(xiàng),后面各項(xiàng)滿滿 足:足:F(n)=F(n-1)+F(n-2)F(n)=F(n-1)+F(n-2) 3 3、 求兩個(gè)數(shù)的最大公約數(shù)。求兩個(gè)數(shù)的最大公約數(shù)。 4、逆轉(zhuǎn)輸出一個(gè)字符串。逆轉(zhuǎn)輸出一個(gè)字符串。 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)文件一個(gè)或若干個(gè)窗體模塊(*.frm)文件用戶自定義子過(guò)程(Sub)用戶自定義函數(shù)過(guò)程(Function)事件過(guò)程(Sub)用戶自定義

57、子過(guò)程(Sub)用戶自定義函數(shù)過(guò)程(Function)一個(gè)或若干個(gè)標(biāo)準(zhǔn)模塊(*.bas)文件全局級(jí)模塊級(jí)過(guò)程級(jí)作用域?yàn)槎x的過(guò)程內(nèi)。指在過(guò)程內(nèi)用作用域?yàn)槎x的過(guò)程內(nèi)。指在過(guò)程內(nèi)用DimDim語(yǔ)句語(yǔ)句聲明的變量(或不加聲明直接使用的變量),聲明的變量(或不加聲明直接使用的變量),只能在本過(guò)程中使用,別的過(guò)程不可訪問。局部變只能在本過(guò)程中使用,別的過(guò)程不可訪問。局部變量隨過(guò)程的調(diào)用而分配存儲(chǔ)單元,并進(jìn)行變量的初始量隨過(guò)程的調(diào)用而分配存儲(chǔ)單元,并進(jìn)行變量的初始化,一旦該過(guò)程體結(jié)束,變量的內(nèi)容自動(dòng)消失,占用化,一旦該過(guò)程體結(jié)束,變量的內(nèi)容自動(dòng)消失,占用的存儲(chǔ)單元釋放。不同的過(guò)程中可有相同名稱的變量,的

58、存儲(chǔ)單元釋放。不同的過(guò)程中可有相同名稱的變量,彼此互不相干。使用局部變量有利于程序的調(diào)試彼此互不相干。使用局部變量有利于程序的調(diào)試如如 Dim b as stringDim b as string 作用域?yàn)槎x的窗體作用域?yàn)槎x的窗體/ /模塊內(nèi)。指在一個(gè)窗體模塊內(nèi)。指在一個(gè)窗體/ /模塊的任何過(guò)程外,即在模塊的任何過(guò)程外,即在“通用聲明通用聲明”段中用段中用DimDim語(yǔ)語(yǔ)句句或用或用PrivatePrivate語(yǔ)句聲明的變量,可被本窗體語(yǔ)句聲明的變量,可被本窗體/ /模塊的模塊的任何過(guò)程訪問。任何過(guò)程訪問。 如如 Dim c as stringDim c as string 作用域?yàn)檎麄€(gè)應(yīng)

59、用程序內(nèi)。指在窗體或標(biāo)準(zhǔn)模塊的作用域?yàn)檎麄€(gè)應(yīng)用程序內(nèi)。指在窗體或標(biāo)準(zhǔn)模塊的任何過(guò)程或函數(shù)外,即任何過(guò)程或函數(shù)外,即在在“通用聲明通用聲明”段中用段中用PublicPublic語(yǔ)語(yǔ)句聲明的變量,可被應(yīng)用程序的任何過(guò)程或函數(shù)訪問句聲明的變量,可被應(yīng)用程序的任何過(guò)程或函數(shù)訪問。全局變量的值在整個(gè)應(yīng)用程序中始終不會(huì)消失和重新初全局變量的值在整個(gè)應(yīng)用程序中始終不會(huì)消失和重新初始化,只有當(dāng)整個(gè)應(yīng)用程序結(jié)束時(shí),才會(huì)消失。始化,只有當(dāng)整個(gè)應(yīng)用程序結(jié)束時(shí),才會(huì)消失。 如如 Dim a as stringDim a as string 指在某個(gè)窗體或標(biāo)準(zhǔn)模塊內(nèi)定義的過(guò)程指在某個(gè)窗體或標(biāo)準(zhǔn)模塊內(nèi)定義的過(guò)程, ,定義子過(guò)程定義子過(guò)程或函數(shù)時(shí)前加或函數(shù)時(shí)前加 PrivatePrivate關(guān)鍵字關(guān)鍵字, ,過(guò)程只能被本窗體或本標(biāo)過(guò)程只能被本窗體或本標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論