vb子程序和函數(shù)_第1頁(yè)
vb子程序和函數(shù)_第2頁(yè)
vb子程序和函數(shù)_第3頁(yè)
vb子程序和函數(shù)_第4頁(yè)
vb子程序和函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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、整理課件第八章第八章 子程序和函數(shù)子程序和函數(shù) 8.1 子程序概述子程序概述 在在VB5.0/6.0中,除了系統(tǒng)提供的內(nèi)部函數(shù)過(guò)中,除了系統(tǒng)提供的內(nèi)部函數(shù)過(guò)程和事件過(guò)程外,用戶可自定義過(guò)程下列四種過(guò)程和事件過(guò)程外,用戶可自定義過(guò)程下列四種過(guò)程:程: “Sub” 保留字開(kāi)始的為子過(guò)程保留字開(kāi)始的為子過(guò)程“Function” 保留字開(kāi)始的為函數(shù)過(guò)程保留字開(kāi)始的為函數(shù)過(guò)程 “Property”保留字開(kāi)始的為屬性過(guò)程保留字開(kāi)始的為屬性過(guò)程“Event”保留字開(kāi)始保留字開(kāi)始的事件過(guò)程的事件過(guò)程整理課件 在在VB中,的中,的Sub子過(guò)程分為:事件過(guò)程和通用過(guò)程子過(guò)程分為:事件過(guò)程和通用過(guò)程 8.2.1 事

2、件過(guò)程事件過(guò)程 (1)窗體事件的語(yǔ)法)窗體事件的語(yǔ)法Private Sub Form_事件名事件名(參數(shù)列表參數(shù)列表)語(yǔ)句組語(yǔ)句組End Sub(2)控件事件的語(yǔ)法)控件事件的語(yǔ)法Private Sub 控件名控件名_事件名事件名(參數(shù)列表參數(shù)列表)語(yǔ)句組語(yǔ)句組 End Sub8.2 Sub過(guò)程過(guò)程整理課件子過(guò)程的定義形式如下:子過(guò)程的定義形式如下:Public|PrivateStatic Sub 子過(guò)程名子過(guò)程名(形參表形參表) 語(yǔ)句組語(yǔ)句組 Exit Sub 語(yǔ)句組語(yǔ)句組End Sub 8.2.2 通用過(guò)程(通用過(guò)程(Sub過(guò)程)的定義過(guò)程)的定義 說(shuō)明:說(shuō)明:(1)子過(guò)程名:命名規(guī)則與變

3、量名規(guī)則相同。子過(guò)程名不)子過(guò)程名:命名規(guī)則與變量名規(guī)則相同。子過(guò)程名不返回值,而是通過(guò)形參與實(shí)參的傳遞得到結(jié)果,調(diào)用時(shí)可返回值,而是通過(guò)形參與實(shí)參的傳遞得到結(jié)果,調(diào)用時(shí)可返回多個(gè)值。返回多個(gè)值。整理課件(2)形式參數(shù)列表:形式參數(shù)通常簡(jiǎn)稱)形式參數(shù)列表:形式參數(shù)通常簡(jiǎn)稱“形參形參”,僅表示,僅表示形參的類型、個(gè)數(shù)、位置,定義時(shí)是無(wú)值的,只有在過(guò)程被形參的類型、個(gè)數(shù)、位置,定義時(shí)是無(wú)值的,只有在過(guò)程被調(diào)用時(shí),虛實(shí)參結(jié)合后才獲得相應(yīng)的值。調(diào)用時(shí),虛實(shí)參結(jié)合后才獲得相應(yīng)的值。(3)過(guò)程可以無(wú)形式參數(shù),但括號(hào)不能省。)過(guò)程可以無(wú)形式參數(shù),但括號(hào)不能省。(4)參數(shù)的定義形式:)參數(shù)的定義形式:ByVa

4、lByRef變量名變量名( )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ù)是按地址傳遞的。 例例8.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整理課件8.2.3 子過(guò)程的建立子過(guò)程的建立 通過(guò)通過(guò) “工具工具”菜單中的菜單中的“添加

5、過(guò)程添加過(guò)程”命令,出現(xiàn)命令,出現(xiàn)“添加過(guò)添加過(guò)程程”對(duì)話框(見(jiàn)圖對(duì)話框(見(jiàn)圖6.1),選擇過(guò)程類型(子過(guò)程、函數(shù)、屬),選擇過(guò)程類型(子過(guò)程、函數(shù)、屬性、事件)及作用范圍(公有的性、事件)及作用范圍(公有的Public、私有的、私有的Private),),單擊確定后得到一個(gè)過(guò)程或函數(shù)定義的結(jié)構(gòu)框架(模板),單擊確定后得到一個(gè)過(guò)程或函數(shù)定義的結(jié)構(gòu)框架(模板),如:如:Public Sub Sort( )End Sub整理課件8.2.4 過(guò)程的調(diào)用過(guò)程的調(diào)用 1 子過(guò)程的調(diào)用子過(guò)程的調(diào)用 子過(guò)程名子過(guò)程名 參數(shù)列表參數(shù)列表 或或 Call 子過(guò)程名子過(guò)程名(參數(shù)列表參數(shù)列表) 2 函數(shù)過(guò)程的調(diào)用

6、函數(shù)過(guò)程的調(diào)用 變量名變量名 = 函數(shù)過(guò)程名函數(shù)過(guò)程名(參數(shù)列表參數(shù)列表)說(shuō)明:說(shuō)明: (1)參數(shù)列表參數(shù)列表稱為實(shí)參或?qū)嵲?,它必須與形參保持個(gè)數(shù)相稱為實(shí)參或?qū)嵲?,它必須與形參保持個(gè)數(shù)相同,位置與類型一一對(duì)應(yīng)。同,位置與類型一一對(duì)應(yīng)。 (2)調(diào)用時(shí)把實(shí)參值傳遞給對(duì)應(yīng)的形參。其中值傳遞(形調(diào)用時(shí)把實(shí)參值傳遞給對(duì)應(yīng)的形參。其中值傳遞(形參前有參前有ByVal說(shuō)明)時(shí)實(shí)參的值不隨形參的值變化而改變。而說(shuō)明)時(shí)實(shí)參的值不隨形參的值變化而改變。而地址傳遞時(shí)實(shí)參的值隨形參值的改變而改變。地址傳遞時(shí)實(shí)參的值隨形參值的改變而改變。整理課件 (3)當(dāng)參數(shù)是數(shù)組時(shí),形參與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略當(dāng)參數(shù)是數(shù)組時(shí),形參

7、與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略其維數(shù),但括號(hào)不能省。其維數(shù),但括號(hào)不能省。 (4)調(diào)用子過(guò)程的形式有兩種,用調(diào)用子過(guò)程的形式有兩種,用Call關(guān)鍵字時(shí),實(shí)參關(guān)鍵字時(shí),實(shí)參必須加圓括號(hào)括起,反之則實(shí)參之間用必須加圓括號(hào)括起,反之則實(shí)參之間用“,”分隔。分隔。例:調(diào)用上面定義的例:調(diào)用上面定義的Sawp子過(guò)程的形式:子過(guò)程的形式: Swap a,b Call Swap(a,b)整理課件Private Sub CmdOK() Call Swap(a,b) Swap a,bEnd SubPrivate Sub Swap(x%,y%) Dim temp% Temp=X X=Y Y=TempEnd Sub 過(guò)程

8、調(diào)用的執(zhí)行過(guò)程:過(guò)程調(diào)用的執(zhí)行過(guò)程:整理課件8.3 Function過(guò)程過(guò)程 Visual Basic函數(shù)分為內(nèi)部函數(shù)和外部函數(shù),外部函數(shù)函數(shù)分為內(nèi)部函數(shù)和外部函數(shù),外部函數(shù)是用戶根據(jù)需要用是用戶根據(jù)需要用Function關(guān)鍵字定義的函數(shù)過(guò)程,關(guān)鍵字定義的函數(shù)過(guò)程,與子與子過(guò)程不同的是函數(shù)過(guò)程將返回一個(gè)值過(guò)程不同的是函數(shù)過(guò)程將返回一個(gè)值 。 8.3.1 函數(shù)過(guò)程(函數(shù)過(guò)程(Function過(guò)程)的定義過(guò)程)的定義 Public|PrivateStaticFunction 函數(shù)名函數(shù)名()As函數(shù)體函數(shù)體函數(shù)名函數(shù)名=返回值返回值Exit Function函數(shù)名函數(shù)名=返回值返回值End Fun

9、ction函數(shù)體函數(shù)體整理課件說(shuō)明:說(shuō)明:(1)函數(shù)名:命名規(guī)則與變量名規(guī)則相同。但不能與系統(tǒng)的)函數(shù)名:命名規(guī)則與變量名規(guī)則相同。但不能與系統(tǒng)的內(nèi)部函數(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)的,在函數(shù)過(guò)程中至少要是通過(guò)對(duì)函數(shù)名的賦值語(yǔ)句來(lái)實(shí)現(xiàn)的,在函數(shù)過(guò)程中至少要對(duì)函數(shù)名賦值一次。對(duì)函數(shù)名賦值一次。(3)AS類型:是指函數(shù)返回值的類型,若省略,則函

10、數(shù)返類型:是指函數(shù)返回值的類型,若省略,則函數(shù)返回變體類型值(回變體類型值(Variant)。)。 (4)Exit Function:表示退出函數(shù)過(guò)程,常常是與選擇結(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ù)列表:形參的定義與子過(guò)程完全相同。)形參數(shù)列表:形參的定義與子過(guò)程完全相同。 例例6.2 整理課件8.3.2 函數(shù)的調(diào)用函數(shù)的調(diào)用調(diào)用形式如下:調(diào)用形式如下: 函數(shù)名(實(shí)參列表)函數(shù)名(實(shí)參列表)說(shuō)明:說(shuō)明: 在調(diào)用時(shí)實(shí)參和形參的數(shù)據(jù)類型、順序、個(gè)數(shù)必須匹在調(diào)

11、用時(shí)實(shí)參和形參的數(shù)據(jù)類型、順序、個(gè)數(shù)必須匹配。函數(shù)調(diào)用只能出現(xiàn)在表達(dá)式中,其功能是求得函數(shù)配。函數(shù)調(diào)用只能出現(xiàn)在表達(dá)式中,其功能是求得函數(shù)的返回值。的返回值。整理課件8.4 過(guò)程的作用域過(guò)程的作用域Public|Private Sub 子過(guò)程名子過(guò)程名(形式參數(shù)列表形式參數(shù)列表) . End Sub概念概念 通用子過(guò)程和函數(shù)過(guò)程既可寫在通用子過(guò)程和函數(shù)過(guò)程既可寫在窗體模塊中窗體模塊中也可寫在也可寫在標(biāo)準(zhǔn)模塊中標(biāo)準(zhǔn)模塊中,在定義時(shí)可選用關(guān)鍵字,在定義時(shí)可選用關(guān)鍵字PrivatePrivate(局部)(局部)和和PublicPublic(全局)(全局),來(lái)決定它們能被調(diào)用的范圍。,來(lái)決定它們能被調(diào)

12、用的范圍。 整理課件1、窗體窗體/模塊級(jí)過(guò)程:模塊級(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ò)程,可供該應(yīng)用程序的的過(guò)程,可供該應(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ò)程用例7.1來(lái)說(shuō)明過(guò)程的作用域 整理課件總結(jié)歸納過(guò)程的定義及作用域如下表(教材總結(jié)歸納過(guò)程的定義及作用域如下

13、表(教材Pg.163)整理課件8.5 過(guò)程之間參數(shù)的傳遞過(guò)程之間參數(shù)的傳遞Visual Basic中不同模塊(過(guò)程)之間數(shù)據(jù)的傳遞有兩種中不同模塊(過(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ù)。 8.5.1 8.5.1 形式參數(shù)與實(shí)際參數(shù)形式參數(shù)與實(shí)際參數(shù)1、形式參數(shù)、形式參數(shù) 是指在定義通用過(guò)程時(shí),出現(xiàn)在是指在定義通用過(guò)程時(shí),出現(xiàn)在Sub或或Function語(yǔ)句中語(yǔ)句中的變量名后面園括號(hào)內(nèi)的數(shù),是用來(lái)接收傳送給子過(guò)程的的變量名后面園括號(hào)內(nèi)的數(shù),是用來(lái)接收傳送給

14、子過(guò)程的數(shù)據(jù),形參表中的各個(gè)變量之間用逗號(hào)分隔。數(shù)據(jù),形參表中的各個(gè)變量之間用逗號(hào)分隔。 整理課件2、實(shí)際參數(shù)、實(shí)際參數(shù) 實(shí)際參數(shù)是指在調(diào)用實(shí)際參數(shù)是指在調(diào)用Sub或或Function過(guò)程時(shí),寫入子過(guò)程過(guò)程時(shí),寫入子過(guò)程名或函數(shù)名后括號(hào)內(nèi)的參數(shù),其作用是將它們的數(shù)據(jù)(數(shù)值名或函數(shù)名后括號(hào)內(nèi)的參數(shù),其作用是將它們的數(shù)據(jù)(數(shù)值或地址)傳送給或地址)傳送給Sub或或Function過(guò)程與其對(duì)應(yīng)的形參變量。過(guò)程與其對(duì)應(yīng)的形參變量。 實(shí)參可由常量、表達(dá)式、有效的變量名、數(shù)組名(后加左、實(shí)參可由常量、表達(dá)式、有效的變量名、數(shù)組名(后加左、右括號(hào),如右括號(hào),如A())組成,實(shí)參表中各參數(shù)用逗號(hào)分隔。)組成,

15、實(shí)參表中各參數(shù)用逗號(hào)分隔。8.5.2 參數(shù)傳遞(虛實(shí)結(jié)合)參數(shù)傳遞(虛實(shí)結(jié)合) 參數(shù)傳遞指主調(diào)過(guò)程的實(shí)參(調(diào)用時(shí)已有確定值和內(nèi)存參數(shù)傳遞指主調(diào)過(guò)程的實(shí)參(調(diào)用時(shí)已有確定值和內(nèi)存地址的參數(shù))傳遞給被調(diào)過(guò)程的形參,參數(shù)的傳遞有兩種方地址的參數(shù))傳遞給被調(diào)過(guò)程的形參,參數(shù)的傳遞有兩種方式:按值傳遞、按地址傳遞。形參前加式:按值傳遞、按地址傳遞。形參前加“ByVal”關(guān)鍵字的是關(guān)鍵字的是按值傳遞,缺省或加按值傳遞,缺省或加“ByRef”關(guān)鍵字的為按地址傳遞。關(guān)鍵字的為按地址傳遞。 整理課件 傳址與傳值傳址與傳值 傳址:傳址: 形參得到的是實(shí)參的地址,當(dāng)形參值的改變同形參得到的是實(shí)參的地址,當(dāng)形參值的改

16、變同時(shí)也改變實(shí)參的值。時(shí)也改變實(shí)參的值。 傳值:傳值: 形參得到的是實(shí)參的值,形參值的改變不會(huì)影形參得到的是實(shí)參的值,形參值的改變不會(huì)影響實(shí)參的值。響實(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例例8.4 整理課件Private Sub CmdOK_Click() a% = 10: b% = 20: Swap1 a, b 傳傳 值值 Print A1=; a, B1=

17、; b a = 10: b = 20: Swap2 a, b 傳地址傳地址 Print A2=; a, B2=; bEnd Sub程序調(diào)用執(zhí)行過(guò)程:整理課件值傳遞的執(zhí)行過(guò)程如下圖:值傳遞的執(zhí)行過(guò)程如下圖:通過(guò)地址傳遞數(shù)據(jù)的執(zhí)行過(guò)程通過(guò)地址傳遞數(shù)據(jù)的執(zhí)行過(guò)程 整理課件數(shù)據(jù)傳遞的幾點(diǎn)說(shuō)明:數(shù)據(jù)傳遞的幾點(diǎn)說(shuō)明:1.參數(shù)的數(shù)據(jù)類型參數(shù)的數(shù)據(jù)類型2.按值傳遞參數(shù)按值傳遞參數(shù)形參是實(shí)參的一個(gè)副本形參是實(shí)參的一個(gè)副本3.按地址傳遞參數(shù)按地址傳遞參數(shù)形參實(shí)參公用內(nèi)存單元形參實(shí)參公用內(nèi)存單元4.子過(guò)程執(zhí)行一系列操作,函數(shù)過(guò)程返回一個(gè)值子過(guò)程執(zhí)行一系列操作,函數(shù)過(guò)程返回一個(gè)值注意:如果實(shí)參是常量(系統(tǒng)常量、符號(hào)常

18、量)或者表達(dá)注意:如果實(shí)參是常量(系統(tǒng)常量、符號(hào)常量)或者表達(dá)式,則無(wú)論定義時(shí)使用值傳遞還是地址傳遞,都是按值傳式,則無(wú)論定義時(shí)使用值傳遞還是地址傳遞,都是按值傳遞將常量或者表達(dá)式的計(jì)算值傳遞給形參。遞將常量或者表達(dá)式的計(jì)算值傳遞給形參。整理課件8.6 高級(jí)用法高級(jí)用法(數(shù)組做為參數(shù)數(shù)組做為參數(shù)) Visual Basic允許把數(shù)組作為實(shí)參傳送到過(guò)程中。數(shù)組作允許把數(shù)組作為實(shí)參傳送到過(guò)程中。數(shù)組作參數(shù)是通過(guò)傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)參數(shù)是通過(guò)傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):1把一個(gè)數(shù)組的全部元素傳送給

19、一個(gè)過(guò)程,應(yīng)將數(shù)組名分把一個(gè)數(shù)組的全部元素傳送給一個(gè)過(guò)程,應(yīng)將數(shù)組名分別寫入形參列表中,并略去數(shù)組的上下界,但括號(hào)不能省別寫入形參列表中,并略去數(shù)組的上下界,但括號(hào)不能省略。略。Private Sub Sort( a() As single) End Sub其中形參其中形參“a( )”即為數(shù)組。即為數(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é)合是按地址傳遞,即形參數(shù)組和實(shí)參數(shù)組實(shí)參和形參結(jié)

20、合是按地址傳遞,即形參數(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)可以省略,但為便于閱讀,建議一般不要省略為好。不要省略為好。 整理課件調(diào)用時(shí)形參數(shù)組調(diào)用時(shí)形參數(shù)組a和實(shí)參數(shù)組和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一段內(nèi)存單元,虛實(shí)結(jié)合,共用一段內(nèi)存單元,如下所示。因此在如下所示。因此在Sort()過(guò)程中改變數(shù)組過(guò)程中改變數(shù)組a的

21、各元素值,也就的各元素值,也就相當(dāng)于改變了實(shí)參數(shù)組相當(dāng)于改變了實(shí)參數(shù)組b中對(duì)應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束時(shí),中對(duì)應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束時(shí),形參數(shù)組形參數(shù)組a成為無(wú)定義。成為無(wú)定義。 b(1) b(2) b(3) b(4) b(5) b(6) b(7) b(8) a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8)參數(shù)為數(shù)組時(shí)虛實(shí)結(jié)合示意圖參數(shù)為數(shù)組時(shí)虛實(shí)結(jié)合示意圖 例例6.7改寫上章例改寫上章例5.3的排序程序,分別將排序用子過(guò)程的排序程序,分別將排序用子過(guò)程Sort(),產(chǎn)生,產(chǎn)生N個(gè)隨機(jī)整數(shù)用子過(guò)程個(gè)隨機(jī)整數(shù)用子過(guò)程GetData(),輸入,輸入N個(gè)數(shù)組個(gè)數(shù)組元素用

22、元素用PrData()子過(guò)程來(lái)完成。子過(guò)程來(lái)完成。整理課件 補(bǔ)充例題:編寫判斷一個(gè)整數(shù)是不是素?cái)?shù)寫函數(shù)過(guò)程。補(bǔ)充例題:編寫判斷一個(gè)整數(shù)是不是素?cái)?shù)寫函數(shù)過(guò)程。如果給定的整數(shù)是素?cái)?shù),則返回邏輯值如果給定的整數(shù)是素?cái)?shù),則返回邏輯值True,否則返回,否則返回False Private Function Prime(n As Integer) As Boolean Dim k%,Yes As Boolean Yes=True For k=2 to n2 IF n mod k =0 then Yes=False : Exit For Next k Prime=Yes 給函數(shù)名賦值,作為函的返回值給函數(shù)名

23、賦值,作為函的返回值End Function如何調(diào)用該函數(shù)呢?如何調(diào)用該函數(shù)呢?使用該函數(shù),編一驗(yàn)證哥德巴赫猜想。使用該函數(shù),編一驗(yàn)證哥德巴赫猜想。整理課件Private Sub Form_Click() Dim n%,n1%,n2% n=Val(InputBox(輸入大于輸入大于6的正整數(shù)的正整數(shù)) For n1=3 to n2 step 2 讓讓n1從從3開(kāi)始分解開(kāi)始分解 n2=n-n1 求得求得n2 如果如果n1和和n2都是素?cái)?shù),則打印輸出都是素?cái)?shù),則打印輸出 If prime(n1) And prime(n2) then Print n & = & n1 & +

24、 & n2 Exit For 結(jié)束循環(huán)結(jié)束循環(huán) End if Next n1End Sub整理課件For i = 1 To n - 1For i = 1 To n - 1 p = i p = i For j = i + 1 To n For j = i + 1 To n If a(p) a(j) Then p = j If a(p) a(j) Then p = j Next j Next j temp = a(i) temp = a(i) a(i) = a(p) a(i) = a(p) a(p) = temp a(p) = tempNext iNext i選擇法排序(升序)的選擇法排序

25、(升序)的VB程序程序:如何寫一個(gè)排序的如何寫一個(gè)排序的VB過(guò)程?過(guò)程?補(bǔ)充例題補(bǔ)充例題2:排序子過(guò)程:排序子過(guò)程整理課件Private Sub Sort( a( ) As single)Private Sub Sort( a( ) As single) Dim i%,j%,p%,n%,temp! Dim i%,j%,p%,n%,temp! n=Ubound(a) n=Ubound(a) For i = 1 To n - 1 For i = 1 To n - 1 p = i p = i For j = i + 1 To n For j = i + 1 To n If a(p) a(j) The

26、n p = j If a(p) a(j) Then p = j Next j Next j temp = a(i) temp = a(i) a(i) = a(p) a(i) = a(p) a(p) = temp a(p) = temp Next I Next IEnd SubEnd Sub整理課件8.7 過(guò)程的嵌套和遞歸調(diào)用過(guò)程的嵌套和遞歸調(diào)用8.7.1 過(guò)程的嵌套過(guò)程的嵌套 在程序中調(diào)用一子過(guò)程,而在子過(guò)程中又調(diào)用另外的子過(guò)在程序中調(diào)用一子過(guò)程,而在子過(guò)程中又調(diào)用另外的子過(guò)程,這種程序結(jié)構(gòu)稱為程,這種程序結(jié)構(gòu)稱為過(guò)程的嵌套。過(guò)程的嵌套。過(guò)程的嵌套調(diào)用執(zhí)行過(guò)過(guò)程的嵌套調(diào)用執(zhí)行過(guò)程如下圖:程如下

27、圖:整理課件8.7.2 過(guò)程的遞歸調(diào)用過(guò)程的遞歸調(diào)用 用自身的結(jié)構(gòu)來(lái)描述自身,稱遞歸。例如,對(duì)階乘的定義:用自身的結(jié)構(gòu)來(lái)描述自身,稱遞歸。例如,對(duì)階乘的定義:)!2() 1()!1()!1(!nnnnnn Visual Basic允許在一個(gè)允許在一個(gè)Sub子過(guò)程和子過(guò)程和Function過(guò)程的定過(guò)程的定義內(nèi)部調(diào)用自己,即遞歸義內(nèi)部調(diào)用自己,即遞歸Sub子過(guò)程和遞歸子過(guò)程和遞歸Function函數(shù)。函數(shù)。例例8.8編求階乘編求階乘fac(n)=n! 的遞歸函數(shù)的遞歸函數(shù)整理課件Private Function fac(n As Integer) As Integer If n = 1 Then

28、fac = 1 Else fac = n * fac(n - 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ò)程,如上遞歸處理一般用棧來(lái)實(shí)現(xiàn),分遞推和回歸兩個(gè)過(guò)程,如上圖所示。圖所示。遞推過(guò)程:每調(diào)用一次自身,把當(dāng)前參數(shù)(形參、局部變遞推過(guò)程:每調(diào)用一次自身,把當(dāng)前參數(shù)(形參、局部變量、返回地址等)壓入棧,直到遞歸結(jié)束條件成立。量、返回地址等)壓入棧,直到遞歸結(jié)束條件成立。回歸過(guò)程:然后從棧中彈出當(dāng)前

29、參數(shù),直到????;貧w過(guò)程:然后從棧中彈出當(dāng)前參數(shù),直到???。遞歸算法設(shè)計(jì)簡(jiǎn)單,解決同一問(wèn)題,使用遞歸算法消耗的遞歸算法設(shè)計(jì)簡(jiǎn)單,解決同一問(wèn)題,使用遞歸算法消耗的機(jī)時(shí)和占據(jù)的內(nèi)存空間要比使用非遞歸算法大。機(jī)時(shí)和占據(jù)的內(nèi)存空間要比使用非遞歸算法大。使用遞歸算法必須要滿足以下的遞歸條件:使用遞歸算法必須要滿足以下的遞歸條件: (1)存在遞歸結(jié)束條件及結(jié)束時(shí)的值;)存在遞歸結(jié)束條件及結(jié)束時(shí)的值; (2)能用遞歸形式表示,且遞歸向終止條件發(fā)展。)能用遞歸形式表示,且遞歸向終止條件發(fā)展。整理課件8.8 應(yīng)用舉例應(yīng)用舉例8.8.1 查找問(wèn)題查找問(wèn)題例例8.11使用順序查找法,在一組數(shù)中查找某給定的數(shù)使用順序

30、查找法,在一組數(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)該停止,則可由以下語(yǔ)句來(lái)實(shí)現(xiàn)

31、它。止,則可由以下語(yǔ)句來(lái)實(shí)現(xiàn)它。 For P=1 to n IF a(p)=x then Exit For Next P整理課件下面編寫一查找函數(shù)下面編寫一查找函數(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 P If pn then p=0 Find=pEnd Function 整

32、理課件例例8.12使用折半查找法,在一批有序數(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(

33、mid),x必定落在必定落在mid+1和和top的范圍之內(nèi),即的范圍之內(nèi),即bot=mid+1;(4)在確定了新的查找范圍后,重復(fù)進(jìn)行以上比較,直到)在確定了新的查找范圍后,重復(fù)進(jìn)行以上比較,直到找到或者找到或者bota(p) and p=0 (3)要注意函數(shù)的值域。)要注意函數(shù)的值域。 如:如:exp(23773) 的值就超出實(shí)數(shù)在計(jì)算機(jī)中的表示范圍。的值就超出實(shí)數(shù)在計(jì)算機(jī)中的表示范圍。8.9 常用內(nèi)部函數(shù)常用內(nèi)部函數(shù) 整理課件 1. 數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù) 常用的數(shù)學(xué)函數(shù)見(jiàn)常用的數(shù)學(xué)函數(shù)見(jiàn)P121表表8-1所示所示 Abs(N) Cos(N) Sin(N) Exp(N) Log(N) Sqr(N

34、) Rnd(N) Sgn(N) 說(shuō)明:說(shuō)明: (1) 在三角函數(shù)中的自變量是以弧度為單位。在三角函數(shù)中的自變量是以弧度為單位。 如:如:sin300 sin(3.14159/180*30) (2) Rnd函數(shù)返回函數(shù)返回0 1(包括(包括0和不包括和不包括1)之間的雙精度隨機(jī))之間的雙精度隨機(jī)數(shù)。數(shù)。 若要產(chǎn)生若要產(chǎn)生1-100的隨機(jī)整數(shù):的隨機(jī)整數(shù): Int(Rnd *100)+1 提問(wèn):怎樣產(chǎn)生提問(wèn):怎樣產(chǎn)生N,M區(qū)間的隨機(jī)數(shù)?區(qū)間的隨機(jī)數(shù)? 整理課件 2. 轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù) 常用的轉(zhuǎn)換函數(shù)見(jiàn)常用的轉(zhuǎn)換函數(shù)見(jiàn)p123表表8-4所示所示 說(shuō)明:說(shuō)明: (1)要區(qū)別兩個(gè)取整函數(shù))要區(qū)別兩個(gè)取整函數(shù)int()和和fix() Fix(N)為截?cái)嗳≌慈サ粜?shù)后的數(shù)。為截?cái)嗳≌慈サ粜?shù)后的數(shù)。 Int(N)不大于不大于N的最大整數(shù)。的最大整數(shù)。 N0與與int(N) 相同,當(dāng)相同,當(dāng)N0時(shí),時(shí), int(N) 與與fix(N) -1相等。相等。 例如:例如: Fix(9.59) =9, Int(9.59) =9 Fix(-9.59) =-9, Int(-9.59) =-10 思考

溫馨提示

  • 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)論