第八章子過(guò)程和函數(shù)過(guò)程_第1頁(yè)
第八章子過(guò)程和函數(shù)過(guò)程_第2頁(yè)
第八章子過(guò)程和函數(shù)過(guò)程_第3頁(yè)
第八章子過(guò)程和函數(shù)過(guò)程_第4頁(yè)
第八章子過(guò)程和函數(shù)過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩69頁(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、本章內(nèi)容及要求 8.1 Sub過(guò)程的定義和調(diào)用 8.2 Function函數(shù)過(guò)程的定義和調(diào)用 8.3 參數(shù)傳遞 8.4 過(guò)程的嵌套和遞歸調(diào)用 8.5 變量及過(guò)程的作用域 (1)窗體事件過(guò)程)窗體事件過(guò)程Private Sub Form_事件名事件名(參數(shù)列表參數(shù)列表)語(yǔ)句組語(yǔ)句組End Sub (2)控件事件過(guò)程)控件事件過(guò)程Private Sub 控件名控件名_事件名事件名(參數(shù)列表參數(shù)列表)語(yǔ)句組語(yǔ)句組 End Sub8.1.1 事件事件Sub過(guò)程過(guò)程8.1 Sub子過(guò)程的定義和調(diào)用子過(guò)程的定義和調(diào)用在在VB中中Sub子過(guò)程分為:事件過(guò)程和用戶自定義過(guò)程子過(guò)程分為:事件過(guò)程和用戶自定義過(guò)程

2、方法一方法一: 通過(guò)通過(guò) “工具工具”菜單中的菜單中的“添加過(guò)程添加過(guò)程”命令,出現(xiàn)命令,出現(xiàn)“添加過(guò)程添加過(guò)程”對(duì)話框,選擇過(guò)程類型(子過(guò)程、函數(shù)、屬性、對(duì)話框,選擇過(guò)程類型(子過(guò)程、函數(shù)、屬性、事件)及作用范圍(公有的事件)及作用范圍(公有的Public、私有的、私有的Private),單擊確),單擊確定后得到一個(gè)過(guò)程定義的結(jié)構(gòu)框架(模板),如:定后得到一個(gè)過(guò)程定義的結(jié)構(gòu)框架(模板),如:Sub子過(guò)程的定義子過(guò)程的定義-兩種方法兩種方法8.1.2 用戶自定義用戶自定義 Sub子過(guò)程定義子過(guò)程定義Public Sub Sort( )End SubPublic|PrivateStatic Su

3、b 子過(guò)程名子過(guò)程名(形參表形參表) 語(yǔ)句組語(yǔ)句組 Exit Sub 語(yǔ)句組語(yǔ)句組End Sub 方法二:方法二:直接在代碼窗口中輸入直接在代碼窗口中輸入過(guò)程體過(guò)程體例例1: 編一個(gè)交換兩個(gè)整型變量值的子過(guò)程。編一個(gè)交換兩個(gè)整型變量值的子過(guò)程。Private Sub Swap( X As Integer, Y As Integer)Dim temp As Integer Temp=X X=Y Y=TempEnd Sub例例2:編寫(xiě)求階乘的子過(guò)程。:編寫(xiě)求階乘的子過(guò)程。Private sub fact(n As Integer,f as Double) Dim i As Integer f =

4、1 For i = 1 To n f = f * i NextEnd sub。說(shuō)明:說(shuō)明:(1)子過(guò)程名:子過(guò)程名:命名規(guī)則與變量名規(guī)則相同。子過(guò)程命名規(guī)則與變量名規(guī)則相同。子過(guò)程名不名不返回返回值,而是通過(guò)形參與實(shí)參的傳遞得到結(jié)果,調(diào)用時(shí)可返回多個(gè)值值,而是通過(guò)形參與實(shí)參的傳遞得到結(jié)果,調(diào)用時(shí)可返回多個(gè)值(2)形式參數(shù)列表:形式參數(shù)列表:形式參數(shù)通常簡(jiǎn)稱形式參數(shù)通常簡(jiǎn)稱“形參形參”,僅表示形參,僅表示形參的類型、個(gè)數(shù)、位置,的類型、個(gè)數(shù)、位置,定義時(shí)是無(wú)值的定義時(shí)是無(wú)值的,只有在過(guò)程被調(diào)用時(shí),只有在過(guò)程被調(diào)用時(shí),虛實(shí)參結(jié)合后才獲得相應(yīng)的值。虛實(shí)參結(jié)合后才獲得相應(yīng)的值。(3)過(guò)程可以無(wú)形式參數(shù)

5、,但括號(hào)不能省。過(guò)程可以無(wú)形式參數(shù),但括號(hào)不能省。(4)參數(shù)的定義形式:參數(shù)的定義形式:ByValByRef變量名變量名( )As 類型類型,ByVal表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按值傳遞的;表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按值傳遞的;ByRef表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按地址傳遞的表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按地址傳遞的,缺省時(shí)傳址。缺省時(shí)傳址。 方法一:方法一: Call 子過(guò)程名子過(guò)程名(參數(shù)列表參數(shù)列表)方法二:子過(guò)程名方法二:子過(guò)程名 參數(shù)列表參數(shù)列表 說(shuō)明:說(shuō)明: (1)參數(shù)列表參數(shù)列表稱為實(shí)參或?qū)嵲?,它必須與形參保持個(gè)數(shù)相同,稱為實(shí)參或?qū)嵲?,它必須與形參保持個(gè)數(shù)相同,位置與類型一一

6、對(duì)應(yīng)位置與類型一一對(duì)應(yīng)。 (2)調(diào)用時(shí)把調(diào)用時(shí)把實(shí)參實(shí)參值傳遞給對(duì)應(yīng)的值傳遞給對(duì)應(yīng)的形參形參。其中值傳遞(形參前有其中值傳遞(形參前有ByVal說(shuō)明)時(shí)實(shí)參的值不隨形參的值變說(shuō)明)時(shí)實(shí)參的值不隨形參的值變化而改變。而地址傳遞時(shí)實(shí)參的值隨形參值的改變而改變。化而改變。而地址傳遞時(shí)實(shí)參的值隨形參值的改變而改變。8.1.3 子過(guò)程的調(diào)用子過(guò)程的調(diào)用 (3)當(dāng)參數(shù)是數(shù)組時(shí),形參與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略其當(dāng)參數(shù)是數(shù)組時(shí),形參與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略其維數(shù),維數(shù),但括號(hào)不能省但括號(hào)不能省。 (4)調(diào)用子過(guò)程的形式有兩種,用調(diào)用子過(guò)程的形式有兩種,用Call關(guān)鍵字時(shí),實(shí)參必須關(guān)鍵字時(shí),實(shí)參必須加圓括號(hào)括起加

7、圓括號(hào)括起,反之則不用,反之則不用加圓括號(hào)括起。加圓括號(hào)括起。實(shí)參之間用實(shí)參之間用“,”分隔。分隔。例:調(diào)用上面定義的例:調(diào)用上面定義的Swap子過(guò)程的形式:子過(guò)程的形式: Swap a,b Call Swap(a,b)在某個(gè)事件過(guò)程中調(diào)用已定義在某個(gè)事件過(guò)程中調(diào)用已定義的階乘的過(guò)程的階乘的過(guò)程fact:Private Sub Command1_Click() Dim n As Integer, m As Long n = 5 Call fact(n, m) Print mEnd SubPrivate Sub CmdOK_click() Call Swap(a,b) Swap a,bEnd S

8、ubPrivate Sub Swap(x%,y%) Dim temp% Temp=X X=Y Y=TempEnd Sub 過(guò)程調(diào)用的執(zhí)行過(guò)程:過(guò)程調(diào)用的執(zhí)行過(guò)程: Visual Basic函數(shù)分為函數(shù)分為內(nèi)部函數(shù)內(nèi)部函數(shù)和和外部(自定外部(自定義)函數(shù)義)函數(shù),外部函數(shù)是用戶根據(jù)需要用,外部函數(shù)是用戶根據(jù)需要用Function關(guān)鍵字定義的函數(shù)過(guò)程,關(guān)鍵字定義的函數(shù)過(guò)程,與子過(guò)程不同的是函數(shù)與子過(guò)程不同的是函數(shù)名將返回一個(gè)值名將返回一個(gè)值 。 8.2 Function函數(shù)過(guò)程的定義和調(diào)用函數(shù)過(guò)程的定義和調(diào)用方法一方法一: 通過(guò)通過(guò) “工具工具”菜單中的菜單中的“添加過(guò)程添加過(guò)程”命令,出現(xiàn)命令,

9、出現(xiàn)“添加添加過(guò)程過(guò)程”對(duì)話框,選擇過(guò)程類型(子過(guò)程、對(duì)話框,選擇過(guò)程類型(子過(guò)程、函數(shù)函數(shù)、屬性、事件)及作、屬性、事件)及作用范圍(公有的用范圍(公有的Public、私有的、私有的Private),單擊確定后得到一個(gè)函),單擊確定后得到一個(gè)函數(shù)定義的結(jié)構(gòu)框架(模板),如:數(shù)定義的結(jié)構(gòu)框架(模板),如:Public Function Sort( )End Function8.2.1 Function函數(shù)過(guò)程的定義函數(shù)過(guò)程的定義Function函數(shù)過(guò)程過(guò)程的定義函數(shù)過(guò)程過(guò)程的定義-兩種方法兩種方法Public|PrivateStatic Function 函數(shù)名函數(shù)名()As函數(shù)名函數(shù)名=返回

10、值返回值Exit Function函數(shù)名函數(shù)名=返回值返回值End Function方法二:方法二:直接在代碼窗口中輸入直接在代碼窗口中輸入函數(shù)體函數(shù)體Function fact(n As Integer) As Double Dim i As Integer, f As Double f = 1 For i = 1 To n f = f * i Next fact = fEnd Function把例把例2階乘的階乘的sub 子過(guò)程改為子過(guò)程改為Function函數(shù)過(guò)程函數(shù)過(guò)程說(shuō)明:說(shuō)明:(1)函數(shù)名:函數(shù)名:命名規(guī)則與變量名規(guī)則相同。但不能與系統(tǒng)的命名規(guī)則與變量名規(guī)則相同。但不能與系統(tǒng)的內(nèi)部

11、函數(shù)或其它通用子過(guò)程同名,也不能與已定義的全局變內(nèi)部函數(shù)或其它通用子過(guò)程同名,也不能與已定義的全局變量和本模塊中模塊級(jí)變量同名。量和本模塊中模塊級(jí)變量同名。(2)在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量使用,函數(shù)的返回值就)在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量使用,函數(shù)的返回值就是通過(guò)對(duì)函數(shù)名的賦值語(yǔ)句來(lái)實(shí)現(xiàn)的,是通過(guò)對(duì)函數(shù)名的賦值語(yǔ)句來(lái)實(shí)現(xiàn)的,在函數(shù)過(guò)程中至少要在函數(shù)過(guò)程中至少要對(duì)函數(shù)名賦值一次。對(duì)函數(shù)名賦值一次。(3)AS類型:類型:是指函數(shù)返回值的類型,若省略,則函數(shù)返是指函數(shù)返回值的類型,若省略,則函數(shù)返回變體類型值(回變體類型值(Variant)。)。 (4)Exit Function:表示退出函數(shù)過(guò)程

12、,常常是與選擇結(jié)構(gòu):表示退出函數(shù)過(guò)程,常常是與選擇結(jié)構(gòu)(If或或Select Case語(yǔ)句)聯(lián)用,即當(dāng)滿足一定條件時(shí),退出函語(yǔ)句)聯(lián)用,即當(dāng)滿足一定條件時(shí),退出函數(shù)過(guò)程。數(shù)過(guò)程。(5)形參數(shù)列表形參數(shù)列表:形參的定義與子過(guò)程完全相同。:形參的定義與子過(guò)程完全相同。 調(diào)用形式如下:調(diào)用形式如下: 函數(shù)名(實(shí)參列表)函數(shù)名(實(shí)參列表)說(shuō)明:說(shuō)明:在調(diào)用時(shí)實(shí)參和形參的在調(diào)用時(shí)實(shí)參和形參的數(shù)據(jù)類型、順序、個(gè)數(shù)必須匹配數(shù)據(jù)類型、順序、個(gè)數(shù)必須匹配。函數(shù)調(diào)用只能出現(xiàn)函數(shù)調(diào)用只能出現(xiàn)在表達(dá)式中在表達(dá)式中,其,其功能功能是求得函數(shù)的是求得函數(shù)的返回值返回值。8.2.2 函數(shù)過(guò)程的調(diào)用函數(shù)過(guò)程的調(diào)用調(diào)用階乘的過(guò)

13、程調(diào)用階乘的過(guò)程:Private Sub Command1_Click() Dim S As Integer S = 5 Print fact(S)End Sub2009-03-29以下關(guān)于過(guò)程及過(guò)程參數(shù)的描述中,錯(cuò)誤的是以下關(guān)于過(guò)程及過(guò)程參數(shù)的描述中,錯(cuò)誤的是A)過(guò)程的參數(shù)可以是控件名稱)過(guò)程的參數(shù)可以是控件名稱 B)調(diào)用過(guò)程時(shí)使用的實(shí)參的個(gè)數(shù)應(yīng)與過(guò)程形參的個(gè)數(shù)相同)調(diào)用過(guò)程時(shí)使用的實(shí)參的個(gè)數(shù)應(yīng)與過(guò)程形參的個(gè)數(shù)相同 C)只有函數(shù)過(guò)程能夠?qū)⑦^(guò)程中處理的信息返回到調(diào)用程中)只有函數(shù)過(guò)程能夠?qū)⑦^(guò)程中處理的信息返回到調(diào)用程中 D)窗體可以作為過(guò)程的參數(shù))窗體可以作為過(guò)程的參數(shù)課堂練習(xí)課堂練習(xí)2010

14、-03-22下面是求最大公約數(shù)的函數(shù)的首部下面是求最大公約數(shù)的函數(shù)的首部Function gcd(ByVal x As Integer, ByVal y As Integer) As Integer若要輸出若要輸出8、12、16這這3個(gè)數(shù)的最大公約數(shù),下面正確的語(yǔ)句是個(gè)數(shù)的最大公約數(shù),下面正確的語(yǔ)句是A)Print gcd(8,12),gcd(12,16),gcd(16,8)B)Print gcd(8,12,16)C)Print gcd(8),gcd(12),gcd(16)D)Print gcd(8,gcd(12,16)Visual Basic中不同模塊(過(guò)程)之間數(shù)據(jù)的傳遞有兩種方式:中不同

15、模塊(過(guò)程)之間數(shù)據(jù)的傳遞有兩種方式: 通過(guò)過(guò)程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn);通過(guò)過(guò)程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn);使用全局變量來(lái)實(shí)現(xiàn)各過(guò)程中共享數(shù)據(jù)。使用全局變量來(lái)實(shí)現(xiàn)各過(guò)程中共享數(shù)據(jù)。 1、形式參數(shù)、形式參數(shù) 是指在是指在定義定義子過(guò)程和函數(shù)時(shí),出現(xiàn)在子過(guò)程和函數(shù)時(shí),出現(xiàn)在Sub過(guò)程名或過(guò)程名或Function函數(shù)名函數(shù)名后面括號(hào)內(nèi)的變量后面括號(hào)內(nèi)的變量,是用來(lái)接收傳送給是用來(lái)接收傳送給Sub過(guò)程或過(guò)程或Function的數(shù)據(jù)的數(shù)據(jù),形參表中的各個(gè)變量之間用逗號(hào)分隔。,形參表中的各個(gè)變量之間用逗號(hào)分隔。 8.3 參數(shù)傳遞參數(shù)傳遞8.3.1 形式參數(shù)與實(shí)際參數(shù)形式參數(shù)與實(shí)際參數(shù)2、實(shí)際參數(shù)、實(shí)際參數(shù)

16、 實(shí)際參數(shù)是指在實(shí)際參數(shù)是指在調(diào)用調(diào)用Sub或或Function時(shí),出現(xiàn)在子過(guò)程名時(shí),出現(xiàn)在子過(guò)程名或函數(shù)名后括號(hào)內(nèi)的參數(shù),其作用是或函數(shù)名后括號(hào)內(nèi)的參數(shù),其作用是將它們的數(shù)據(jù)(數(shù)值或地將它們的數(shù)據(jù)(數(shù)值或地址)傳送給址)傳送給Sub或或Function過(guò)程與其對(duì)應(yīng)的形參變量。過(guò)程與其對(duì)應(yīng)的形參變量。 實(shí)參可由常量、表達(dá)式、有效的變量名、實(shí)參可由常量、表達(dá)式、有效的變量名、數(shù)組名(如數(shù)組名(如A( ))組成,實(shí)參表中各參數(shù)用組成,實(shí)參表中各參數(shù)用逗號(hào)分隔逗號(hào)分隔。 參數(shù)傳遞指參數(shù)傳遞指主調(diào)主調(diào)過(guò)程的實(shí)參(調(diào)用時(shí)過(guò)程的實(shí)參(調(diào)用時(shí)已有確定值和內(nèi)存地已有確定值和內(nèi)存地址的參數(shù)址的參數(shù))傳遞給)傳遞

17、給被調(diào)被調(diào)過(guò)程的形參。過(guò)程的形參。 參數(shù)的傳遞有兩種方式:參數(shù)的傳遞有兩種方式:按值傳遞、按地址傳遞按值傳遞、按地址傳遞。 形參前加形參前加“ByVal”關(guān)鍵字的是按關(guān)鍵字的是按值傳遞值傳遞,缺省缺省或加或加“ByRef”關(guān)鍵字則按關(guān)鍵字則按地址傳遞地址傳遞。 8.3.2 傳地址與傳值傳地址與傳值傳址:傳址: 形參得到的是實(shí)參的形參得到的是實(shí)參的地址地址,當(dāng)形參值的改變同時(shí)也改變,當(dāng)形參值的改變同時(shí)也改變實(shí)參的值。因?yàn)樗鼈児灿靡粋€(gè)地址。實(shí)參的值。因?yàn)樗鼈児灿靡粋€(gè)地址。傳值:傳值: 形參只得到的是實(shí)參的形參只得到的是實(shí)參的值值,形參值的改變不會(huì)影響實(shí)參,形參值的改變不會(huì)影響實(shí)參的值。因?yàn)樾螀⒉⒉?/p>

18、知道實(shí)參的地址。的值。因?yàn)樾螀⒉⒉恢缹?shí)參的地址。Sub Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End SubSub Swap1(ByVal x%, ByVal y%)Dim Temp% Temp = x: x = y: y = TempEnd Sub什么是傳址和傳值呢?什么是傳址和傳值呢?傳值傳值傳址傳址傳值傳值Private Sub CmdOK_Click() Dim a%,b% a = 10: b = 20 Swap1 a, b 傳傳 值值 Print A1=; a, B1=; b a = 10: b = 20 Swap2 a

19、, b 傳地址傳地址 Print A2=; a, B2=; bEnd SubSub Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End SubSub Swap1(ByVal x%, ByVal y%)Dim Temp% Temp = x: x = y: y = TempEnd Sub值傳遞的執(zhí)行過(guò)程如下圖:值傳遞的執(zhí)行過(guò)程如下圖:通過(guò)地址傳遞數(shù)據(jù)的執(zhí)行過(guò)程通過(guò)地址傳遞數(shù)據(jù)的執(zhí)行過(guò)程 在子過(guò)程和函數(shù)過(guò)程調(diào)用時(shí),如果實(shí)參是常量在子過(guò)程和函數(shù)過(guò)程調(diào)用時(shí),如果實(shí)參是常量(包括系統(tǒng)常量、用(包括系統(tǒng)常量、用Const自定義的符號(hào)常量)或表自定義的符

20、號(hào)常量)或表達(dá)式,無(wú)論在定義時(shí)使用值傳遞還是地址傳遞,此達(dá)式,無(wú)論在定義時(shí)使用值傳遞還是地址傳遞,此時(shí)都是按值傳遞方式將常量或表達(dá)式計(jì)算的時(shí)都是按值傳遞方式將常量或表達(dá)式計(jì)算的值傳遞值傳遞給形參變量給形參變量。 如果形參定義是按傳地址方式,但調(diào)用時(shí)想使實(shí)如果形參定義是按傳地址方式,但調(diào)用時(shí)想使實(shí)參變量按值方式傳遞,參變量按值方式傳遞,可以把實(shí)參變量加上括號(hào),可以把實(shí)參變量加上括號(hào),將其轉(zhuǎn)換成表達(dá)式即可。將其轉(zhuǎn)換成表達(dá)式即可。 8.3.3 有關(guān)過(guò)程之間數(shù)據(jù)傳遞的幾點(diǎn)說(shuō)明有關(guān)過(guò)程之間數(shù)據(jù)傳遞的幾點(diǎn)說(shuō)明 解決一個(gè)問(wèn)題既可以使用子過(guò)程,也可以使用函解決一個(gè)問(wèn)題既可以使用子過(guò)程,也可以使用函數(shù)過(guò)程,是使

21、用子過(guò)程還是使用函數(shù)過(guò)程呢?數(shù)過(guò)程,是使用子過(guò)程還是使用函數(shù)過(guò)程呢? 如果是需要求得一個(gè)值,一般情況使用函數(shù)過(guò)程如果是需要求得一個(gè)值,一般情況使用函數(shù)過(guò)程,如不是為了求一個(gè)值,而是完成一些操作,如不是為了求一個(gè)值,而是完成一些操作,或需要返或需要返回回多個(gè)多個(gè)值值,則使用子過(guò)程比較方便,則使用子過(guò)程比較方便。使用子過(guò)程還是使用函數(shù)過(guò)程使用子過(guò)程還是使用函數(shù)過(guò)程? Visual Basic中數(shù)組作參數(shù)是中數(shù)組作參數(shù)是通過(guò)傳地址方式通過(guò)傳地址方式傳送。在傳傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):幾點(diǎn): 1為了把一個(gè)數(shù)組的全

22、部元素傳送給一個(gè)過(guò)程,應(yīng)將為了把一個(gè)數(shù)組的全部元素傳送給一個(gè)過(guò)程,應(yīng)將數(shù)組名數(shù)組名寫(xiě)入形參表中,并寫(xiě)入形參表中,并略略去數(shù)組的上下界,但去數(shù)組的上下界,但括號(hào)括號(hào)不能省略。不能省略。Private Sub Sort( a() As single) End Sub其中形參其中形參“a( )”即為數(shù)組。即為數(shù)組。8.3.4 數(shù)組作為過(guò)程的參數(shù)數(shù)組作為過(guò)程的參數(shù)2被調(diào)過(guò)程可通過(guò)被調(diào)過(guò)程可通過(guò)Lbound和和Ubound函數(shù)確定實(shí)參數(shù)組的上、函數(shù)確定實(shí)參數(shù)組的上、下界。下界。3當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類型一當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類型一致。致。4實(shí)參和形參結(jié)合是

23、實(shí)參和形參結(jié)合是按地址傳遞按地址傳遞,即形參數(shù)組和實(shí)參數(shù)組共,即形參數(shù)組和實(shí)參數(shù)組共用一段內(nèi)存單元。用一段內(nèi)存單元。例如:定義了實(shí)參數(shù)組例如:定義了實(shí)參數(shù)組b(1 to 8),給它們賦了值,調(diào)用,給它們賦了值,調(diào)用Sort()函函數(shù)過(guò)程的形式如下:數(shù)過(guò)程的形式如下:Sort b() 或或 Call Sort(b() ) 實(shí)參數(shù)組后面的括號(hào)可以省略實(shí)參數(shù)組后面的括號(hào)可以省略,但為便于閱讀,但為便于閱讀,建議建議一般不要一般不要省略為好。省略為好。 課堂練習(xí)課堂練習(xí)Function FirProc(z As Integer,y As Integer,z As Integer) FirProc2x+

24、y+3zEnd FunctionFunction SecProc(x As Integer,y As Integer,z As Integer) SecProcFirProc(x,y,z)+xEnd FunctionPrivate Sub Command1_Click()() Dim a As Integer,b As Integer,c As Integer a2:b3:c4 Print SecProc(c,b,a)End SubA) 21 B) 19 C) 17 D) 34課堂練習(xí)課堂練習(xí)2010-9-22以下關(guān)于局部變量的敘述中錯(cuò)誤的是以下關(guān)于局部變量的敘述中錯(cuò)誤的是A)在過(guò)程中用)在過(guò)

25、程中用Dim語(yǔ)句或語(yǔ)句或Static語(yǔ)句聲明的變量是局部語(yǔ)句聲明的變量是局部變量變量B)局部變量的作用域是它所在的過(guò)程)局部變量的作用域是它所在的過(guò)程C)在過(guò)程中用)在過(guò)程中用Static語(yǔ)句聲明的變量是靜態(tài)局部變量語(yǔ)句聲明的變量是靜態(tài)局部變量D)過(guò)程執(zhí)行完畢,該過(guò)程中用)過(guò)程執(zhí)行完畢,該過(guò)程中用Dim或或Static語(yǔ)句聲明的語(yǔ)句聲明的變量即被釋放變量即被釋放課堂練習(xí)課堂練習(xí)下列程序的輸出結(jié)果是下列程序的輸出結(jié)果是10 110。Private Sub sub1(ByVal a As Integer, b As Integer)a = a + b: b = b + aEnd SubPrivat

26、e Sub Form_Click()Dim x As Integer, y As Integerx = 10: y = 20Call sub1(x, y)sub1 x, yPrint x; yEnd Sub過(guò)程的嵌套:類似選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的嵌套。也就是過(guò)程的嵌套:類似選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的嵌套。也就是指一個(gè)過(guò)程中包含了另一個(gè)過(guò)程的調(diào)用。指一個(gè)過(guò)程中包含了另一個(gè)過(guò)程的調(diào)用。 8.4.1 過(guò)程的嵌套過(guò)程的嵌套8.4 過(guò)程的嵌套和遞歸調(diào)用過(guò)程的嵌套和遞歸調(diào)用Sub form_click()Call sub1End subSub sub1Y=F1(n)End subFunction F1(x)F1=.

27、End Function過(guò)程的遞歸:簡(jiǎn)單說(shuō)就是自己調(diào)用自己。過(guò)程的遞歸:簡(jiǎn)單說(shuō)就是自己調(diào)用自己。 8.4.2 過(guò)程的遞歸過(guò)程的遞歸Function fact(n %) As Double Dim i As Integer, f As Double f = 1 For i = 1 To n f = f * i Next fact = fEnd FunctionFunction fact(n %) As Double If n=1 then fact=1 else fact=n*fact(n-1)End Function用遞歸實(shí)現(xiàn)用遞歸實(shí)現(xiàn)階乘階乘不用遞歸實(shí)現(xiàn)不用遞歸實(shí)現(xiàn)階乘階乘Function

28、fact(n %) As Double If n=1 then fact=1 else fact=n*fact(n-1)End Function現(xiàn)在假現(xiàn)在假N=4,觀察觀察執(zhí)行過(guò)程執(zhí)行過(guò)程Fact(4)=4*fact(3)Fact(3)=3*fact(2)Fact(2)=2*fact(1)Fact(1)=1Fact(2)=2*1Fact(3)=3*2Fact(4)=4*6注意VB語(yǔ)言語(yǔ)言不不允許過(guò)程的允許過(guò)程的嵌套定義嵌套定義,即一個(gè)過(guò)程內(nèi)不能包,即一個(gè)過(guò)程內(nèi)不能包含另一個(gè)過(guò)程含另一個(gè)過(guò)程.VB語(yǔ)言語(yǔ)言允許允許過(guò)程的過(guò)程的嵌套調(diào)用嵌套調(diào)用,即在調(diào)用一個(gè)過(guò)程的過(guò),即在調(diào)用一個(gè)過(guò)程的過(guò)程中,又調(diào)用

29、另一個(gè)過(guò)程程中,又調(diào)用另一個(gè)過(guò)程 .窗體模塊:文件擴(kuò)展名為窗體模塊:文件擴(kuò)展名為 .frm 窗體模塊是窗體模塊是VB程序的基礎(chǔ),與窗體對(duì)應(yīng),存放著該程序的基礎(chǔ),與窗體對(duì)應(yīng),存放著該窗體的所有信息,如窗體及其上各控件對(duì)象的界面信息、窗體的所有信息,如窗體及其上各控件對(duì)象的界面信息、屬性、事件過(guò)程、通用過(guò)程、變量和常量的聲明等。屬性、事件過(guò)程、通用過(guò)程、變量和常量的聲明等。 可以通過(guò)記事本打開(kāi)查看??梢酝ㄟ^(guò)記事本打開(kāi)查看。8.5.1 窗體模塊和標(biāo)準(zhǔn)模塊窗體模塊和標(biāo)準(zhǔn)模塊8.5 變量及過(guò)程的作用域變量及過(guò)程的作用域標(biāo)準(zhǔn)模塊:標(biāo)準(zhǔn)模塊:文件擴(kuò)展名為文件擴(kuò)展名為Bas 它們可以包含變量、常數(shù)、類型、外部

30、過(guò)程和全它們可以包含變量、常數(shù)、類型、外部過(guò)程和全局過(guò)程的全局局過(guò)程的全局(在整個(gè)應(yīng)用程序范圍內(nèi)有效的在整個(gè)應(yīng)用程序范圍內(nèi)有效的)聲明或模聲明或模塊級(jí)聲明。寫(xiě)入標(biāo)準(zhǔn)模塊的代碼不必綁在特定的應(yīng)用塊級(jí)聲明。寫(xiě)入標(biāo)準(zhǔn)模塊的代碼不必綁在特定的應(yīng)用程序上,則在許多不同的應(yīng)用程序中可以重用標(biāo)準(zhǔn)模程序上,則在許多不同的應(yīng)用程序中可以重用標(biāo)準(zhǔn)模塊。塊。 當(dāng)一個(gè)過(guò)程要被多個(gè)不同對(duì)象或不同模塊中的程當(dāng)一個(gè)過(guò)程要被多個(gè)不同對(duì)象或不同模塊中的程序調(diào)用時(shí),那么該過(guò)程一般可放在標(biāo)準(zhǔn)模塊中。序調(diào)用時(shí),那么該過(guò)程一般可放在標(biāo)準(zhǔn)模塊中。 在在VB中,由于可以在過(guò)程中和模塊中聲明變中,由于可以在過(guò)程中和模塊中聲明變量,根據(jù)定義變

31、量的位置和定義變量的語(yǔ)句不同,量,根據(jù)定義變量的位置和定義變量的語(yǔ)句不同,變量可以分為:變量可以分為:局部變量(過(guò)程級(jí)變量)局部變量(過(guò)程級(jí)變量)窗體窗體/模塊級(jí)變量(私有的模塊級(jí)變量,能被本模塊級(jí)變量(私有的模塊級(jí)變量,能被本模塊的所有過(guò)程和函數(shù)使用)模塊的所有過(guò)程和函數(shù)使用)全局級(jí)變量(公有的模塊級(jí)變量)。全局級(jí)變量(公有的模塊級(jí)變量)。8.5.2 變量的作用域變量的作用域關(guān)于變量的生存期關(guān)于變量的生存期變量的生存期:變量的生存期:是指變量的值能夠保留多長(zhǎng)時(shí)間,即是指變量的值能夠保留多長(zhǎng)時(shí)間,即分配給變量的存儲(chǔ)空間能夠被保留多長(zhǎng)時(shí)間。分配給變量的存儲(chǔ)空間能夠被保留多長(zhǎng)時(shí)間。1、 局部變量局

32、部變量Dim 聲明的局部變量在本過(guò)程執(zhí)行期間有效聲明的局部變量在本過(guò)程執(zhí)行期間有效 Static 聲明的局部變量在整個(gè)應(yīng)用程序運(yùn)行期間有效聲明的局部變量在整個(gè)應(yīng)用程序運(yùn)行期間有效 2、 模塊變量模塊變量 在整個(gè)應(yīng)用程序運(yùn)行期間有效在整個(gè)應(yīng)用程序運(yùn)行期間有效 3、全局變量、全局變量 在整個(gè)應(yīng)用程序運(yùn)行期間有效在整個(gè)應(yīng)用程序運(yùn)行期間有效 局部變量:局部變量:在在過(guò)程內(nèi)過(guò)程內(nèi)聲明的變量,聲明的變量,只能只能在本過(guò)程中使用。在本過(guò)程中使用。 在過(guò)程內(nèi)部使用在過(guò)程內(nèi)部使用 Dim 或者或者 Static 關(guān)鍵字來(lái)聲明關(guān)鍵字來(lái)聲明的變量,的變量,只在聲明它們的過(guò)程中只在聲明它們的過(guò)程中才能被訪問(wèn)或改變?cè)摬?/p>

33、能被訪問(wèn)或改變?cè)撟兞康闹担瑒e的過(guò)程不可訪問(wèn)。所以可以在不同的過(guò)變量的值,別的過(guò)程不可訪問(wèn)。所以可以在不同的過(guò)程中聲明相同名字的局部變量而互不影響。程中聲明相同名字的局部變量而互不影響。 8.5.2.1局部變量局部變量過(guò)程級(jí)變量過(guò)程級(jí)變量例:例:Private Sub Form_Load() Dim n% n= 10End SubPrivate Sub From_Click() Dim n% Print “n=“;nEnd Sub程序運(yùn)行后單擊窗體,其輸出結(jié)果是什么?程序運(yùn)行后單擊窗體,其輸出結(jié)果是什么?局部變量局部變量局部變量局部變量 窗體窗體/模塊級(jí)變量:模塊級(jí)變量:在在“通用聲明通用聲明”

34、段中段中用用Dim語(yǔ)句或用語(yǔ)句或用Private語(yǔ)句聲明的變量,可被本窗體語(yǔ)句聲明的變量,可被本窗體/模塊的任何過(guò)程訪問(wèn)。但其他模塊模塊的任何過(guò)程訪問(wèn)。但其他模塊卻不能訪問(wèn)該變量。卻不能訪問(wèn)該變量。例如:在例如:在“通用聲明通用聲明”段聲明如下變量段聲明如下變量 Private s As String Dim a As Integer,b As Single 8.5.2.2 窗體模塊級(jí)變量窗體模塊級(jí)變量 全局變量全局變量也稱公有的模塊級(jí)變量,在窗體模塊或也稱公有的模塊級(jí)變量,在窗體模塊或標(biāo)準(zhǔn)模塊的標(biāo)準(zhǔn)模塊的頂部的頂部的“通用通用”聲明段聲明段用用Public關(guān)鍵字關(guān)鍵字聲明,它的作用范圍是聲明

35、,它的作用范圍是整個(gè)應(yīng)用程序整個(gè)應(yīng)用程序,即可被本應(yīng),即可被本應(yīng)用程序的任何過(guò)程或函數(shù)訪問(wèn)。用程序的任何過(guò)程或函數(shù)訪問(wèn)。例如:例如: Public a As Integer,b As single8.5.2.3 全局級(jí)變量全局級(jí)變量3種變量聲明及使用規(guī)則如下表:種變量聲明及使用規(guī)則如下表:全局變量與局部變量同名全局變量與局部變量同名 在不同過(guò)程中定義同名變量,它們互不影響,但若在一在不同過(guò)程中定義同名變量,它們互不影響,但若在一過(guò)程中定義使用了與全局變量過(guò)程中定義使用了與全局變量同名同名的變量,則就應(yīng)注意。的變量,則就應(yīng)注意。 注意:注意:當(dāng)變量名相同而作用域不同時(shí),將優(yōu)先訪問(wèn)作用當(dāng)變量名相同

36、而作用域不同時(shí),將優(yōu)先訪問(wèn)作用域域小小的變量。的變量。8.5.2.4 關(guān)于多個(gè)變量同名關(guān)于多個(gè)變量同名小Public x As Integer 定義全局變量定義全局變量Private Sub Form_Load() x = 1 將全局變量將全局變量x 的值設(shè)置成的值設(shè)置成 1End SubPrivate Sub Command1_Click() Dim x As Integer 定義局部變量定義局部變量 x = 2 將局部變量將局部變量x的值設(shè)置成的值設(shè)置成 2 Print “x=; x Print “x=; Form1.xEnd SubPrivate Sub Command2_Click()

37、 Print “x=; x End Sub窗體將輸出什么?窗體將輸出什么?全局變量與全局變量同名全局變量與全局變量同名 如果不同模塊中的全局變量使用同一名字,則通過(guò)如果不同模塊中的全局變量使用同一名字,則通過(guò)同時(shí)引用模塊名和變量名同時(shí)引用模塊名和變量名就可以在代碼中區(qū)分它們。就可以在代碼中區(qū)分它們。例如,如果有一個(gè)在例如,如果有一個(gè)在 Form1 和和 Module1 中都聲中都聲明了公用的明了公用的 Integer 變量變量 X,則把它們作為,則把它們作為 Module1. X 和和Form1. X 來(lái)引用便得到正確值。來(lái)引用便得到正確值。也就是說(shuō)也就是說(shuō)如果不同模塊中的全局變量使用同一名字

38、,如果不同模塊中的全局變量使用同一名字,引用時(shí)就需要使用引用時(shí)就需要使用“模塊名模塊名.變量名變量名”的形式來(lái)區(qū)分的形式來(lái)區(qū)分它們。它們。每次調(diào)用過(guò)程時(shí)每次調(diào)用過(guò)程時(shí)重新分配重新分配存貯單元,存貯單元,初始化初始化變量變量過(guò)程調(diào)用過(guò)程調(diào)用結(jié)束結(jié)束后后釋放釋放存貯單元,變量?jī)?nèi)容自動(dòng)存貯單元,變量?jī)?nèi)容自動(dòng)消失消失動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量動(dòng)態(tài)變量第一次第一次調(diào)用過(guò)程時(shí)調(diào)用過(guò)程時(shí)分配分配存貯單元,存貯單元,初始化初始化變量變量以后以后每次調(diào)用過(guò)程時(shí)每次調(diào)用過(guò)程時(shí)不再不再重新分配存貯單元,變量重新分配存貯單元,變量保持上次保持上次調(diào)用結(jié)束時(shí)的值調(diào)用結(jié)束時(shí)的值過(guò)程名前加過(guò)程名前加Sta

39、tic,表示該過(guò)程內(nèi)的局部變量都是靜,表示該過(guò)程內(nèi)的局部變量都是靜態(tài)變量態(tài)變量靜態(tài)變量靜態(tài)變量(由由static定義)定義)Public|Private Sub 子過(guò)程名子過(guò)程名(形式參數(shù)列表形式參數(shù)列表) End Sub Sub過(guò)程和過(guò)程和Function函數(shù)既可寫(xiě)在函數(shù)既可寫(xiě)在窗體模塊中窗體模塊中也可寫(xiě)在也可寫(xiě)在標(biāo)準(zhǔn)標(biāo)準(zhǔn)模塊中模塊中,在定義時(shí)可選用關(guān)鍵字,在定義時(shí)可選用關(guān)鍵字PrivatePrivate(局部)(局部)和和PublicPublic(全局)(全局),來(lái)決定它們能被調(diào)用的范圍。,來(lái)決定它們能被調(diào)用的范圍。 8.5.3 過(guò)程與函數(shù)的作用域過(guò)程與函數(shù)的作用域1、窗體窗體/模塊級(jí)過(guò)程

40、:模塊級(jí)過(guò)程: 加加Private關(guān)鍵字的過(guò)程,只能被定義的窗體或模塊中的關(guān)鍵字的過(guò)程,只能被定義的窗體或模塊中的過(guò)程調(diào)用。過(guò)程調(diào)用。2、全局級(jí)過(guò)程:全局級(jí)過(guò)程: 加加Public關(guān)鍵字關(guān)鍵字(或缺省)(或缺?。┑倪^(guò)程,可供的過(guò)程,可供該應(yīng)用程序該應(yīng)用程序的的所有所有窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用。窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用。按過(guò)程的作用范圍來(lái)劃分,過(guò)程可分為:按過(guò)程的作用范圍來(lái)劃分,過(guò)程可分為: 模塊級(jí)過(guò)程模塊級(jí)過(guò)程 全局級(jí)過(guò)程全局級(jí)過(guò)程總結(jié)歸納過(guò)程的定義及作用域如下表總結(jié)歸納過(guò)程的定義及作用域如下表8.7 過(guò)程的嵌套和遞歸調(diào)用過(guò)程的嵌套和遞歸調(diào)用8.7.1 過(guò)程的嵌套過(guò)程的嵌套 在程序

41、中調(diào)用一子過(guò)程,而在子過(guò)程中又調(diào)用另外的子過(guò)程,這種程序結(jié)構(gòu)稱為過(guò)程的嵌套。過(guò)程的嵌套調(diào)用執(zhí)行過(guò)程如下圖:8.7.2 過(guò)程的遞歸調(diào)用過(guò)程的遞歸調(diào)用 用自身的結(jié)構(gòu)來(lái)描述自身,稱遞歸。例如,對(duì)階乘的定義:)!2() 1()!1()!1(!nnnnnn Visual Basic允許在一個(gè)Sub子過(guò)程和Function過(guò)程的定義內(nèi)部調(diào)用自己,即遞歸Sub子過(guò)程和遞歸Function函數(shù)。例例編求階乘fac(n)=n! 的遞歸函數(shù)Private Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Else fac = n * fac(n

42、 - 1) End IfEnd FunctionPrivate Sub Form_Click() Print “fac(4)=”;fac(4)End Sub程序的遞歸過(guò)程:程序的遞歸過(guò)程:說(shuō)明:說(shuō)明:遞歸處理一般用棧來(lái)實(shí)現(xiàn),分遞推和回歸兩個(gè)過(guò)程,如上圖所示。遞推過(guò)程:每調(diào)用一次自身,把當(dāng)前參數(shù)(形參、局部變量、返回地址等)壓入棧,直到遞歸結(jié)束條件成立。回歸過(guò)程:然后從棧中彈出當(dāng)前參數(shù),直到??铡_f歸算法設(shè)計(jì)簡(jiǎn)單,解決同一問(wèn)題,使用遞歸算法消耗的機(jī)時(shí)和占據(jù)的內(nèi)存空間要比使用非遞歸算法大。使用遞歸算法必須要滿足以下的遞歸條件:使用遞歸算法必須要滿足以下的遞歸條件: (1)存在遞歸結(jié)束條件及結(jié)束時(shí)的

43、值; (2)能用遞歸形式表示,且遞歸向終止條件發(fā)展。*8.8 過(guò)程的可選參數(shù)與不定數(shù)量參數(shù)過(guò)程的可選參數(shù)與不定數(shù)量參數(shù)8.8.1 可選參數(shù)(可選參數(shù)(Optional)概念:概念: 當(dāng)然用戶在自定義子過(guò)程或函數(shù)時(shí)也可以定義可選參數(shù)。要指定某個(gè)形參為可選參數(shù),這就是在形參變量前加入Optional關(guān)鍵字即可。 如果一個(gè)過(guò)程某個(gè)形參為可選參數(shù),則在調(diào)用此過(guò)程時(shí)可以不提供對(duì)應(yīng)于這個(gè)形參的實(shí)參, 若一個(gè)過(guò)程有多個(gè)形參,當(dāng)它的一個(gè)形參被設(shè)定為可選參數(shù),則這個(gè)參數(shù)之后面的其它參數(shù)也必是可選的,并且要用 Optional 關(guān)鍵字來(lái)聲明。例例可選參數(shù)的使用Private Sub Nadres(x As Str

44、ing, Optional y As String) Text1.text= x Text2.text= yEnd Sub Private Sub Command1_Click ()Dim strName As StringDim strAddress As StringstrName = 張玉張玉strAddress = 杭州市學(xué)院路杭州市學(xué)院路85號(hào)號(hào) 提供了兩個(gè)參數(shù)。提供了兩個(gè)參數(shù)。 Call Nadres (strName, strAddress)End Sub說(shuō)明:說(shuō)明:1、 檢測(cè)可選參數(shù)是否被省略檢測(cè)可選參數(shù)是否被省略 使用使用VB的內(nèi)部函數(shù)的內(nèi)部函數(shù)IsMissing(可選參數(shù)名

45、)(可選參數(shù)名) 來(lái)測(cè)試過(guò)來(lái)測(cè)試過(guò)程被調(diào)用時(shí),某個(gè)參數(shù)是否被省略。如果可選參數(shù)被省略程被調(diào)用時(shí),某個(gè)參數(shù)是否被省略。如果可選參數(shù)被省略了,則返回了,則返回True,未省略,返回,未省略,返回False。 注意:若可選參數(shù)是其它類型,則注意:若可選參數(shù)是其它類型,則IsMissing()總是返()總是返回回False,不能起到檢測(cè)的作用。,不能起到檢測(cè)的作用。 例:例:Private Sub Nadres(x As String, Optional y As Variant) Text1.Text = x If Not IsMissing(y) Then Text2.Text = y End I

46、fEnd Sub2指定可選參數(shù)的缺省值指定可選參數(shù)的缺省值 也可以給可選參數(shù)指定缺省值。在下例中,如果未將可選也可以給可選參數(shù)指定缺省值。在下例中,如果未將可選參數(shù)傳遞到函數(shù)過(guò)程,則返回一個(gè)缺省值。參數(shù)傳遞到函數(shù)過(guò)程,則返回一個(gè)缺省值。Sub Nadres(x As String, Optional y As String= 杭州市學(xué)院路杭州市學(xué)院路85號(hào)號(hào)) Text1.text= x Text2.text= yEnd Sub Private Sub Command1_Click () Dim strName As String strName = 張玉張玉 未提供第二個(gè)參數(shù)。未提供第二個(gè)參

47、數(shù)。 Call Nadres (strName) End Sub8.8.2 使用不定數(shù)量的參數(shù)使用不定數(shù)量的參數(shù)一般說(shuō)來(lái),過(guò)程調(diào)用中的參數(shù)個(gè)數(shù)應(yīng)等于過(guò)程說(shuō)明的參數(shù)個(gè)一般說(shuō)來(lái),過(guò)程調(diào)用中的參數(shù)個(gè)數(shù)應(yīng)等于過(guò)程說(shuō)明的參數(shù)個(gè)數(shù)。可用數(shù)??捎?ParamArray 關(guān)鍵字指明,過(guò)程將接受任意個(gè)關(guān)鍵字指明,過(guò)程將接受任意個(gè)數(shù)的參數(shù)。數(shù)的參數(shù)。 其定義形式如下:其定義形式如下:Sub 過(guò)程名過(guò)程名(ParamArray 數(shù)組名數(shù)組名() Function 函數(shù)名函數(shù)名(ParamArray 數(shù)組名數(shù)組名() As 數(shù)據(jù)類型數(shù)據(jù)類型8.9 應(yīng)用舉例應(yīng)用舉例8.9.1 查找問(wèn)題查找問(wèn)題例例使用順序查找法,在一組

48、數(shù)中查找某給定的數(shù)使用順序查找法,在一組數(shù)中查找某給定的數(shù)x 算法設(shè)計(jì):算法設(shè)計(jì): 設(shè)一組數(shù)據(jù)存放在數(shù)組設(shè)一組數(shù)據(jù)存放在數(shù)組a(1)-a(n)中,待查找的數(shù)據(jù)放在中,待查找的數(shù)據(jù)放在x 中,把中,把x與與a數(shù)組中的元素從頭到尾一數(shù)組中的元素從頭到尾一 一進(jìn)行比較查找。用一進(jìn)行比較查找。用變量變量p表示表示a數(shù)組元素下標(biāo),數(shù)組元素下標(biāo),p初值為初值為1,使,使x與與a(p)比較,如比較,如果果x不等于不等于a(p),則使,則使p=p+1,不斷重復(fù)這個(gè)過(guò)程;一旦,不斷重復(fù)這個(gè)過(guò)程;一旦x等等于于a(p)則退出循環(huán);另外,如果則退出循環(huán);另外,如果p大于數(shù)組長(zhǎng)度,循環(huán)也應(yīng)該大于數(shù)組長(zhǎng)度,循環(huán)也應(yīng)該停

49、止,則可由以下語(yǔ)句來(lái)實(shí)現(xiàn)它。停止,則可由以下語(yǔ)句來(lái)實(shí)現(xiàn)它。 For P=1 to n IF a(p)=x then Exit ForNext 下面編寫(xiě)一查找函數(shù)下面編寫(xiě)一查找函數(shù)Find(),若找到,若找到x則返回下標(biāo)值,找則返回下標(biāo)值,找不到返回不到返回0Private Function Find( a() As Single, x As Single) As Integer Dim n%,p%,m% m=Lbound(a) n=Ubound(a) For P=m to n IF a(p)=x then Exit For Next If pn then p=0 Find=pEnd Funct

50、ion 例例使用折半查找法,在一批有序數(shù)列中查找給定的數(shù)使用折半查找法,在一批有序數(shù)列中查找給定的數(shù)x。分析:分析:設(shè)設(shè)n個(gè)有序數(shù)(從小到大)存放在數(shù)組個(gè)有序數(shù)(從小到大)存放在數(shù)組a(1)-a(n)中,中,要查找的數(shù)為要查找的數(shù)為x。用變量。用變量bot、top、mid 分別表示查找數(shù)據(jù)范分別表示查找數(shù)據(jù)范圍的底部(數(shù)組下界)、頂部(數(shù)組的上界)和中間,圍的底部(數(shù)組下界)、頂部(數(shù)組的上界)和中間,mid=(top+bot)/2,折半查找的算法如下:,折半查找的算法如下:(1)x=a(mid),則已找到退出循環(huán),否則進(jìn)行下面的判斷;,則已找到退出循環(huán),否則進(jìn)行下面的判斷;(2)xa(mid),x必定落在必定落在mid+1和和top的范圍之內(nèi),即的范圍之內(nèi),即bot=mid+1;(4)在確定了新的查找范圍后,重復(fù)進(jìn)行以上比較,直到)在確定了新的查找范圍后,重復(fù)進(jìn)行以上比較,直到找到或者找到或者bota(p) and p a(p) And p = n 確定x應(yīng)插入的位置 p = p + 1 Loop For

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論