VB程序設(shè)計(jì)-過(guò)程和函數(shù)ppt課件_第1頁(yè)
VB程序設(shè)計(jì)-過(guò)程和函數(shù)ppt課件_第2頁(yè)
VB程序設(shè)計(jì)-過(guò)程和函數(shù)ppt課件_第3頁(yè)
VB程序設(shè)計(jì)-過(guò)程和函數(shù)ppt課件_第4頁(yè)
VB程序設(shè)計(jì)-過(guò)程和函數(shù)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩48頁(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、VB程序設(shè)計(jì)唐四薪6.1 子過(guò)程的定義與調(diào)用6.2 函數(shù)的定義與調(diào)用6.3 子過(guò)程與函數(shù)的參數(shù)傳遞6.4 變量、過(guò)程的作用域6.5 遞歸6.6 常用算法舉例第6章 過(guò)程與函數(shù)本節(jié)課要求本節(jié)課要求1 . 掌握掌握Sub過(guò)程、過(guò)程、Function函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用2. 理解理解Sub過(guò)程和過(guò)程和Function函數(shù)的區(qū)別函數(shù)的區(qū)別3. 掌握編寫(xiě)過(guò)程和函數(shù)的一般流程掌握編寫(xiě)過(guò)程和函數(shù)的一般流程引入過(guò)程和函數(shù)的目的引入過(guò)程和函數(shù)的目的1.依據(jù)結(jié)構(gòu)化程序設(shè)計(jì)的思想,實(shí)現(xiàn)模塊化的程序設(shè)計(jì)依據(jù)結(jié)構(gòu)化程序設(shè)計(jì)的思想,實(shí)現(xiàn)模塊化的程序設(shè)計(jì)當(dāng)需解決的問(wèn)題規(guī)模較大、復(fù)雜時(shí)當(dāng)需解決的問(wèn)題規(guī)模較大、復(fù)雜

2、時(shí),可以按功能細(xì)分成可以按功能細(xì)分成一個(gè)一個(gè)小的功能模塊一個(gè)一個(gè)小的功能模塊,這樣的小程序段,在這樣的小程序段,在VB中被稱中被稱為過(guò)程為過(guò)程;2. 簡(jiǎn)化程序中多處重復(fù)出現(xiàn)處理相同功能的程序段的設(shè)簡(jiǎn)化程序中多處重復(fù)出現(xiàn)處理相同功能的程序段的設(shè)計(jì)問(wèn)題計(jì)問(wèn)題過(guò)程的定義:過(guò)程是一段能完成一個(gè)或多個(gè)特定功能的過(guò)程的定義:過(guò)程是一段能完成一個(gè)或多個(gè)特定功能的獨(dú)立的程序段,并可以被其他過(guò)程調(diào)用獨(dú)立的程序段,并可以被其他過(guò)程調(diào)用特點(diǎn):功能獨(dú)立;可被調(diào)用特點(diǎn):功能獨(dú)立;可被調(diào)用 VB VB中的過(guò)程有兩種中的過(guò)程有兩種: : (1) (1) 系統(tǒng)提供的內(nèi)部函數(shù)過(guò)程和事件過(guò)程。系統(tǒng)提供的內(nèi)部函數(shù)過(guò)程和事件過(guò)程。

3、(2) (2) 用戶根據(jù)應(yīng)用的需要而設(shè)計(jì)的過(guò)程。用戶根據(jù)應(yīng)用的需要而設(shè)計(jì)的過(guò)程。 在在VBVB中根據(jù)應(yīng)用的要求可分為幾種類型的自定義過(guò)中根據(jù)應(yīng)用的要求可分為幾種類型的自定義過(guò)程程: : (1) (1) 以以“SubSub保留字開(kāi)始的子過(guò)程。保留字開(kāi)始的子過(guò)程。 (2) (2) 以以“FunctionFunction保留字開(kāi)始的函數(shù)過(guò)程。保留字開(kāi)始的函數(shù)過(guò)程。 (3) (3) 以以“PropertyProperty保留字開(kāi)始的屬性過(guò)程。保留字開(kāi)始的屬性過(guò)程。 (4) (4) 以以“EventEvent保留字開(kāi)始的事件過(guò)程。保留字開(kāi)始的事件過(guò)程。 本 書(shū) 僅 討 論 以本 書(shū) 僅 討 論 以 “

4、S u bS u b 開(kāi) 頭 的 子 過(guò) 程 和 以 開(kāi) 頭 的 子 過(guò) 程 和 以“FunctionFunction開(kāi)頭的函數(shù)過(guò)程。開(kāi)頭的函數(shù)過(guò)程。 過(guò)程和函數(shù)在在VBVB中,過(guò)程有兩種,一種是中,過(guò)程有兩種,一種是SubSub子過(guò)程,一種子過(guò)程,一種是是FunctionFunction函數(shù)。函數(shù)。兩者的區(qū)別在于:兩者的區(qū)別在于:SubSub子過(guò)程只執(zhí)行程序而不返回值,子過(guò)程只執(zhí)行程序而不返回值,而而FunctionFunction函數(shù)執(zhí)行程序后會(huì)返回值。函數(shù)執(zhí)行程序后會(huì)返回值。函數(shù)Function和過(guò)程Sub的區(qū)別函數(shù)函數(shù)Function參數(shù)1參數(shù)2返回值返回值過(guò)程過(guò)程Sub函數(shù):既有輸入

5、又有輸出:如數(shù)控機(jī)床、打爆米花函數(shù):既有輸入又有輸出:如數(shù)控機(jī)床、打爆米花的機(jī)器的機(jī)器過(guò)程:只有輸入沒(méi)有輸出:如光驅(qū)過(guò)程:只有輸入沒(méi)有輸出:如光驅(qū)參數(shù)n打爆米花打爆米花建立函數(shù)的一般過(guò)程建立函數(shù)的一般過(guò)程Function Function 函數(shù)名(函數(shù)名( 形式參數(shù)形式參數(shù)1 1,形式參數(shù),形式參數(shù)2 2,)End FunctionEnd Function輸入:?輸入:?輸出:?輸出:?Function Function 打爆米花糧食,糖精)打爆米花糧食,糖精)打爆米花打爆米花= =爆米花爆米花End FunctionEnd Function6.1.1 子過(guò)程的定義 在在VBVB中用中用Sub

6、 Sub 語(yǔ)句定義的過(guò)程叫做子過(guò)程。語(yǔ)句定義的過(guò)程叫做子過(guò)程??砂聪铝懈袷蕉x子過(guò)程:可按下列格式定義子過(guò)程: Sub Sub 子過(guò)程名子過(guò)程名 ( ( 形式參數(shù)列表形式參數(shù)列表 ) 語(yǔ)句序列語(yǔ)句序列 End SubEnd Sub 子過(guò)程的定義Sub sub1 (a as long, b as long) c = a+bprint cEnd Sub形式參數(shù)列表由若干個(gè)形式參數(shù)構(gòu)成,參數(shù)之間用逗號(hào)分隔。每個(gè)形式參數(shù)按下列格式定義:: 形式參數(shù)名 As 類型名省略類型說(shuō)明則表示是Variant類型。子過(guò)程中可以使用Exit Sub語(yǔ)句跳出子過(guò)程。 6.1.2 子過(guò)程的調(diào)用 子過(guò)程只能作為語(yǔ)句被調(diào)用

7、,不能作為表達(dá)式被子過(guò)程只能作為語(yǔ)句被調(diào)用,不能作為表達(dá)式被調(diào)用調(diào)用( (即不能把子過(guò)程賦值給某個(gè)變量即不能把子過(guò)程賦值給某個(gè)變量) )??梢杂孟隆?梢杂孟铝袃煞N方法調(diào)用子過(guò)程:列兩種方法調(diào)用子過(guò)程: Call Call 子過(guò)程名子過(guò)程名( ( 實(shí)際參數(shù)列表實(shí)際參數(shù)列表 ) )或或 子過(guò)程名子過(guò)程名 實(shí)際參數(shù)列表實(shí)際參數(shù)列表 以上兩種調(diào)用方法功能完全一致。留意,當(dāng)使用以上兩種調(diào)用方法功能完全一致。留意,當(dāng)使用 Call Call 語(yǔ)法時(shí),參數(shù)必須在括號(hào)內(nèi)。語(yǔ)法時(shí),參數(shù)必須在括號(hào)內(nèi)。 Call sub1Call sub12 2,3 3)或或 sub1 2sub1 2,3 3 6.1.2 通用子過(guò)

8、程 7End Sub標(biāo)志Sub過(guò)程執(zhí)行結(jié)束,程序?qū)⒎祷卣{(diào)用該Sub過(guò)程的語(yǔ)句處繼續(xù)執(zhí)行; 8過(guò)程不能嵌套定義。 Private Sub Command1_Click()Call P() End SubPrivate Sub ()Print “輸出結(jié)果為:”End Sub事件過(guò)程事件過(guò)程 事件過(guò)程的調(diào)用:當(dāng)有事件發(fā)生時(shí),系統(tǒng)會(huì)自事件過(guò)程的調(diào)用:當(dāng)有事件發(fā)生時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用與事件相對(duì)應(yīng)的事件過(guò)程。事件過(guò)程是與動(dòng)調(diào)用與事件相對(duì)應(yīng)的事件過(guò)程。事件過(guò)程是與對(duì)象相關(guān)聯(lián)的,是對(duì)象對(duì)事件做出的響應(yīng)。事件對(duì)象相關(guān)聯(lián)的,是對(duì)象對(duì)事件做出的響應(yīng)。事件過(guò)程的名稱由對(duì)象名、下劃線、事件名連接而成。過(guò)程的名稱由對(duì)象名、

9、下劃線、事件名連接而成。 Sub過(guò)程子程序)SubSub子程序的語(yǔ)法如下:子程序的語(yǔ)法如下:Sub Sub 子程序名(子程序名( 形式參數(shù)形式參數(shù)1 1,形式參數(shù),形式參數(shù)2 2,)End SubEnd Sub調(diào)用子程序的兩種方式:調(diào)用子程序的兩種方式:(1 1Call Call 子程序名(子程序名( 實(shí)際參數(shù)實(shí)際參數(shù)1 1,實(shí)際參數(shù),實(shí)際參數(shù)2 2,)(2 2子程序名子程序名 實(shí)際參數(shù)實(shí)際參數(shù)1 1,實(shí)際參數(shù),實(shí)際參數(shù)2 2,F(xiàn)unction函數(shù)FunctionFunction函數(shù)的語(yǔ)法如下:函數(shù)的語(yǔ)法如下:Function Function 函數(shù)名(函數(shù)名( 形式參數(shù)形式參數(shù)1 1,形式參

10、數(shù),形式參數(shù)2 2,)End FunctionEnd Function調(diào)用函數(shù)調(diào)用函數(shù)變量變量= Function = Function 函數(shù)名參數(shù)函數(shù)名參數(shù)1 1,參數(shù),參數(shù)2 2,)函數(shù)可以向變量一樣引用和參與運(yùn)算函數(shù)可以向變量一樣引用和參與運(yùn)算6.2 定義Function過(guò)程定義定義Function過(guò)程說(shuō)明:過(guò)程說(shuō)明:1Function過(guò)程以過(guò)程以Function語(yǔ)句開(kāi)頭,以語(yǔ)句開(kāi)頭,以End Function結(jié)束;中間代碼部分為函數(shù)體;結(jié)束;中間代碼部分為函數(shù)體;2函數(shù)名有返回值,其值類型由函數(shù)名有返回值,其值類型由As 數(shù)據(jù)類型指定;數(shù)據(jù)類型指定;3函數(shù)體內(nèi)一般都會(huì)至少為函數(shù)名賦值一

11、次;如果函數(shù)體內(nèi)一般都會(huì)至少為函數(shù)名賦值一次;如果不賦值,函數(shù)返回值默認(rèn)為不賦值,函數(shù)返回值默認(rèn)為0或空;或空;4函數(shù)中途可以利用函數(shù)中途可以利用Exit Function退出。退出。Function函數(shù)返回值的方式與與SubSub過(guò)程不同的是,過(guò)程不同的是,F(xiàn)unctionFunction函數(shù)通過(guò)函數(shù)名返回函數(shù)通過(guò)函數(shù)名返回一個(gè)值,這個(gè)值是在過(guò)程的語(yǔ)句中賦給函數(shù)名的。一個(gè)值,這個(gè)值是在過(guò)程的語(yǔ)句中賦給函數(shù)名的。Function mySquare(intA,intB)Function mySquare(intA,intB) intA intA和和intBintB是形式參數(shù)是形式參數(shù)Dim ln

12、gSumDim lngSumlngSum=intA2+intB2 lngSum=intA2+intB2 mySquare=lngSummySquare=lngSumEnd FunctionEnd Function函數(shù)可以作為表達(dá)式來(lái)調(diào)用。格式為:函數(shù)可以作為表達(dá)式來(lái)調(diào)用。格式為:函數(shù)名函數(shù)名 (實(shí)際參數(shù)列表)(實(shí)際參數(shù)列表) 如果函數(shù)要直接作為語(yǔ)句來(lái)使用,則必須按照如果函數(shù)要直接作為語(yǔ)句來(lái)使用,則必須按照子過(guò)程的方式來(lái)調(diào)用,當(dāng)然此時(shí)也就不能利用函數(shù)的子過(guò)程的方式來(lái)調(diào)用,當(dāng)然此時(shí)也就不能利用函數(shù)的返回值了。返回值了。例如下列三條語(yǔ)句都可以調(diào)用前面定義的函數(shù)例如下列三條語(yǔ)句都可以調(diào)用前面定義的函數(shù)

13、Fun1Fun1: Print fun1(2, 3)Print fun1(2, 3) Call fun1(2, 3) Call fun1(2, 3) fun1 2, 3 fun1 2, 3 6.2.2 函數(shù)的調(diào)用6.2 定義Function過(guò)程例如,求n!Private Function fac%(n As Integer) If n0 Then fac = -1:Exit FunctionElsefac = 1For i = 1 To nfac = fac*iNext iEnd IfEnd Function6.2 定義Function過(guò)程例如,求例如,求m, n的最大公約數(shù)的最大公約數(shù)Pri

14、vate Function gcd%(ByVal m%,ByVal n%) Dim r%,t%If mn Then Call Change(m, n) r = m Mod nDo While r0m = nn = rr = m Mod nLoopgcd = nEnd FunctionPrivate Sub Change(x1%, x2%)Dim Temp As IntegerTemp = x1x1 = x2x2 = TempEnd Sub過(guò)程和函數(shù)需注意的幾點(diǎn)過(guò)程和函數(shù)需注意的幾點(diǎn)過(guò)程的定義不可以嵌套過(guò)程的定義不可以嵌套函數(shù)和過(guò)程必須先定義才能使用函數(shù)和過(guò)程必須先定義才能使用使用自定義過(guò)程的兩

15、個(gè)步驟:使用自定義過(guò)程的兩個(gè)步驟:定義過(guò)程和調(diào)用過(guò)程定義過(guò)程和調(diào)用過(guò)程函數(shù)和過(guò)程的相互轉(zhuǎn)換函數(shù)和過(guò)程的相互轉(zhuǎn)換寫(xiě)函數(shù)首先要確定函數(shù)的輸入和輸出寫(xiě)函數(shù)首先要確定函數(shù)的輸入和輸出Private Sub Command1_Click()Print sum(5, 3)End SubFunction sum(x, y)s = x + ysum = sEnd Function定義函數(shù)定義函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)函數(shù)和過(guò)程的相互轉(zhuǎn)換函數(shù)和過(guò)程的相互轉(zhuǎn)換Private Sub Command1_Click()Call sum(5, 3, s)Print sEnd SubSub sum(x, y, s)s = x

16、+ yEnd Sub定義過(guò)程定義過(guò)程調(diào)用過(guò)程調(diào)用過(guò)程例題編寫(xiě)一個(gè)求任意三角形面積的函數(shù)編寫(xiě)一個(gè)求任意三角形面積的函數(shù)Private Function Area!(a!, b!, c!)Dim t!t = (a+b+c)/2Area = Sqr(t*(t-a)*(t-b)*(t-c)End Function例題編寫(xiě)一個(gè)求任意三角形面積的子過(guò)程編寫(xiě)一個(gè)求任意三角形面積的子過(guò)程Private Sub Area (a!, b!, c!, s!)Dim z!z = (a+b+c)/2s = Sqr(z*(z-a)*(z-b)*(z-c)End Sub過(guò)程實(shí)例過(guò)程實(shí)例定義定義Sub過(guò)程判斷手機(jī)號(hào)碼格式是否

17、正確并調(diào)用它過(guò)程判斷手機(jī)號(hào)碼格式是否正確并調(diào)用它 Sub IsTel ()if len()=11 and IsNumeric() thenPrint 手機(jī)號(hào)碼格式正確手機(jī)號(hào)碼格式正確elsePrint 格式不正確,請(qǐng)重新輸入格式不正確,請(qǐng)重新輸入end ifend SubCall IsTel調(diào)用調(diào)用Sub過(guò)程過(guò)程 函數(shù)的實(shí)例函數(shù)的實(shí)例限制標(biāo)題顯示的內(nèi)容長(zhǎng)度的函數(shù)限制標(biāo)題顯示的內(nèi)容長(zhǎng)度的函數(shù) ,如果輸入的字符串如果輸入的字符串tit長(zhǎng)度大于指定的長(zhǎng)長(zhǎng)度大于指定的長(zhǎng)度度n),則返回按指定的長(zhǎng)度截取前面部分并加省略號(hào)的字符串,如果長(zhǎng)度),則返回按指定的長(zhǎng)度截取前面部分并加省

18、略號(hào)的字符串,如果長(zhǎng)度小于等于指定長(zhǎng)度,則返回原字符串。小于等于指定長(zhǎng)度,則返回原字符串。 function title(tit,n)if len(tit)n thentitle=left(tit,n)& 返回函數(shù)值返回函數(shù)值elsetitle=tit 返回函數(shù)值返回函數(shù)值end ifend function5.7 參數(shù)傳遞參數(shù)傳遞5.7.1 形參與實(shí)參 形參:置于過(guò)程定義時(shí),參數(shù)列表中的變形參:置于過(guò)程定義時(shí),參數(shù)列表中的變量或數(shù)組;在過(guò)程被調(diào)用前,系統(tǒng)不對(duì)其量或數(shù)組;在過(guò)程被調(diào)用前,系統(tǒng)不對(duì)其分配空間;分配空間; 實(shí)參:當(dāng)程序中想調(diào)用某過(guò)程時(shí),所提供實(shí)參:當(dāng)程序中想調(diào)用某過(guò)程時(shí),所

19、提供的實(shí)際值;的實(shí)際值; 當(dāng)實(shí)參和形參結(jié)合的時(shí)候,形參才被分配當(dāng)實(shí)參和形參結(jié)合的時(shí)候,形參才被分配空間,接收由實(shí)參傳遞過(guò)來(lái)的值;空間,接收由實(shí)參傳遞過(guò)來(lái)的值; 形參、實(shí)參個(gè)數(shù)、類型、位置要一致。形參、實(shí)參個(gè)數(shù)、類型、位置要一致。6.4.1 形參與實(shí)參 常見(jiàn)的錯(cuò)誤 Private Sub F1(a%,b%) . End Sub Private Sub Command1_Click()Dim x!,y!x = 3.14:y = 123Call F1(x,y) Call F1(x) End Sub5.7.2 參數(shù)傳遞方式 傳值傳值ByVal) 傳址傳址ByRef或省略默認(rèn))或省略默認(rèn)) 區(qū)別區(qū)別1:

20、形參定義前面放的關(guān)鍵字不一樣;:形參定義前面放的關(guān)鍵字不一樣; 區(qū)別區(qū)別2:形參接收到的值不一樣;:形參接收到的值不一樣; 區(qū)別區(qū)別3:形參對(duì)實(shí)參的影響不一樣:形參對(duì)實(shí)參的影響不一樣6.4.23 參數(shù)傳遞方式 例如:(兩個(gè)數(shù)的交換) Private Sub Exchange(ByVal a%, ByVal b%) Dim t% t = a a = b b = t Print a,b End SubPrivate Sub Command1_Click()Dim x%,y%x = 12y = 21Call Exchange(x,y)Print “主過(guò)程中:“;x,yEnd Sub6.4.23 參數(shù)

21、傳遞方式 闡明:闡明: 形參前加形參前加ByVal時(shí)表示傳值時(shí)表示傳值 不加或加不加或加ByRef時(shí)表示傳址時(shí)表示傳址 傳值是單方向的傳值是單方向的 傳址是傳址是“雙方向的雙方向的”6.4.23 參數(shù)傳遞方式 Private sub add(x as integer, y as integer, z as integer)z=x+yx=x+1y=y+1print “子過(guò)程中子過(guò)程中” & x & y & z End sub Private sub Form_Click()dim a as integer, b as integer, c as integera=3:b=

22、2:c=1add a, b, c 或者寫(xiě)成或者寫(xiě)成Call add(a,b,c)print “外部過(guò)程中外部過(guò)程中” & a & b & c End sub1.1.參數(shù)傳遞方式參數(shù)傳遞方式 過(guò)程的參數(shù)有兩種傳遞方式:過(guò)程的參數(shù)有兩種傳遞方式:傳值傳值ByValByVal)傳地址傳地址ByRefByRef)(默認(rèn)方式)。)(默認(rèn)方式)。 按值傳遞參數(shù)按值傳遞參數(shù): :在形式參數(shù)前加上關(guān)鍵字在形式參數(shù)前加上關(guān)鍵字ByValByVal表示指定按值傳遞參數(shù)。調(diào)用時(shí)實(shí)際參數(shù)僅將值表示指定按值傳遞參數(shù)。調(diào)用時(shí)實(shí)際參數(shù)僅將值傳遞給形式參數(shù),形式參數(shù)的任何改變不會(huì)影響傳遞給形式參數(shù),形

23、式參數(shù)的任何改變不會(huì)影響實(shí)際參數(shù)。實(shí)際參數(shù)。 6.3 子過(guò)程與函數(shù)的參數(shù)傳遞按地址傳遞參數(shù)按地址傳遞參數(shù): :在形式參數(shù)前加上關(guān)鍵字在形式參數(shù)前加上關(guān)鍵字ByRefByRef表示指定按地址傳遞參表示指定按地址傳遞參數(shù)。數(shù)。調(diào)用時(shí)如果實(shí)際參數(shù)是表達(dá)式,則傳遞方式與按值傳遞調(diào)用時(shí)如果實(shí)際參數(shù)是表達(dá)式,則傳遞方式與按值傳遞效果相同;如果實(shí)際參數(shù)是變量,則將實(shí)際參數(shù)的內(nèi)存效果相同;如果實(shí)際參數(shù)是變量,則將實(shí)際參數(shù)的內(nèi)存地址傳遞給形式參數(shù),形式參數(shù)與實(shí)際參數(shù)指向同一個(gè)地址傳遞給形式參數(shù),形式參數(shù)與實(shí)際參數(shù)指向同一個(gè)內(nèi)存地址,形式參數(shù)的改變也就是實(shí)際參數(shù)的改變。內(nèi)存地址,形式參數(shù)的改變也就是實(shí)際參數(shù)的改變

24、。 6.3 子過(guò)程與函數(shù)的參數(shù)傳遞【例6-4】下列程序運(yùn)行后,每次單擊窗體就會(huì)顯示“a=3”,“b=8”。 Option Explicit Dim a As Long Dim b As Integer Sub s(c As Long) c = c + 1 End Sub Sub Form_Click() a = 2 b = 8 s a Print a=; a s (b) Print b=; bEnd Sub 闡明:本例中,圓括號(hào)用于將實(shí)際參數(shù)由變量b轉(zhuǎn)換為表達(dá)式,即按值傳遞(s(b),否則就是按址傳遞(s a)。2.2.可選參數(shù)可選參數(shù) 在形式參數(shù)前加上關(guān)鍵字在形式參數(shù)前加上關(guān)鍵字Option

25、alOptional可以指定該形式參數(shù)為可選參可以指定該形式參數(shù)為可選參數(shù)。可選參數(shù)在過(guò)程調(diào)用時(shí)可以不提供與可選參數(shù)對(duì)應(yīng)的實(shí)際參數(shù)。數(shù)??蛇x參數(shù)在過(guò)程調(diào)用時(shí)可以不提供與可選參數(shù)對(duì)應(yīng)的實(shí)際參數(shù)。可選參數(shù)可以指定默認(rèn)的缺省值。可選參數(shù)可以指定默認(rèn)的缺省值。3.3.命名參數(shù)命名參數(shù) 實(shí)際參數(shù)使用實(shí)際參數(shù)使用“形式參數(shù)名形式參數(shù)名:= := 實(shí)際參數(shù)的格式即為命名參數(shù)。實(shí)際參數(shù)的格式即為命名參數(shù)。命名參數(shù)出現(xiàn)的位置可以與定義時(shí)的順序無(wú)關(guān)。但需注意非命名參數(shù)命名參數(shù)出現(xiàn)的位置可以與定義時(shí)的順序無(wú)關(guān)。但需注意非命名參數(shù)仍需按定義時(shí)的位置出現(xiàn),所以非命名參數(shù)在定義時(shí)應(yīng)排在第一個(gè)命仍需按定義時(shí)的位置出現(xiàn),所以

26、非命名參數(shù)在定義時(shí)應(yīng)排在第一個(gè)命名參數(shù)之前。名參數(shù)之前。4.4.數(shù)組作為參數(shù)和返回值數(shù)組作為參數(shù)和返回值 數(shù)組可以作為實(shí)際參數(shù)傳遞到過(guò)程中。此時(shí)形式參數(shù)應(yīng)為數(shù)組可以作為實(shí)際參數(shù)傳遞到過(guò)程中。此時(shí)形式參數(shù)應(yīng)為VariantVariant類型或與實(shí)際參數(shù)類型完全相同的數(shù)組類型。作為形式參數(shù)類型或與實(shí)際參數(shù)類型完全相同的數(shù)組類型。作為形式參數(shù)的數(shù)組應(yīng)為可變數(shù)組,用數(shù)組名跟空的圓括號(hào)表示。函數(shù)的返回值也的數(shù)組應(yīng)為可變數(shù)組,用數(shù)組名跟空的圓括號(hào)表示。函數(shù)的返回值也可以是數(shù)組,此時(shí)類型說(shuō)明為可以是數(shù)組,此時(shí)類型說(shuō)明為VariantVariant類型或類型或“As As 類型()類型()”。6.3 子過(guò)程與

27、函數(shù)的參數(shù)傳遞【例【例6-76-7】下列程序運(yùn)行后,單擊窗體時(shí)顯示】下列程序運(yùn)行后,單擊窗體時(shí)顯示“9”9”、 “ “8”8”、“7”7”。 Option ExplicitOption Explicit Function f(a() As Long) As Long() Function f(a() As Long) As Long() f = a f = a End Function End Function Sub Form_Click() Sub Form_Click() Dim b() As Long Dim b() As Long Dim c(2) As Long Dim c(2)

28、As Long c(0) = 9 c(0) = 9 c(1) = 8 c(1) = 8 c(2) = 7 c(2) = 7 b = f(c) b = f(c) print b(0) print b(0) b()=f(c() b()=f(c() print b(1) print b(1) Print f(c)(2) Print f(c)(2) 函數(shù)表達(dá)式直接帶數(shù)組下標(biāo)代函數(shù)表達(dá)式直接帶數(shù)組下標(biāo)代表數(shù)組元素表數(shù)組元素 End SubEnd Sub6.3 子過(guò)程與函數(shù)的參數(shù)傳遞5.5.可變個(gè)數(shù)參數(shù)可變個(gè)數(shù)參數(shù) 將最后一個(gè)形式參數(shù)聲明為將最后一個(gè)形式參數(shù)聲明為VariantVariant類型的數(shù)組,同

29、時(shí)在前面加上類型的數(shù)組,同時(shí)在前面加上ParamArrayParamArray關(guān)鍵字,就變成可變個(gè)數(shù)的參數(shù);調(diào)用過(guò)程時(shí)可輸入任意個(gè)關(guān)鍵字,就變成可變個(gè)數(shù)的參數(shù);調(diào)用過(guò)程時(shí)可輸入任意個(gè)數(shù)的參數(shù),輸入的參數(shù)轉(zhuǎn)變?yōu)閿?shù)組的元素;也可以省略該參數(shù)。數(shù)的參數(shù),輸入的參數(shù)轉(zhuǎn)變?yōu)閿?shù)組的元素;也可以省略該參數(shù)。ParamArray ParamArray 關(guān)鍵字不能與關(guān)鍵字不能與 ByValByVal或或ByRefByRef一起使用,也不能在參數(shù)列表一起使用,也不能在參數(shù)列表中出現(xiàn)中出現(xiàn)OptionalOptional?!纠纠?-86-8】下列程序運(yùn)行后,每次單擊窗體就會(huì)顯示】下列程序運(yùn)行后,每次單擊窗體就會(huì)顯

30、示“6”6”。 Option ExplicitOption Explicit Function f(a, ParamArray b() Function f(a, ParamArray b() f = a + b(0) + b(1) f = a + b(0) + b(1) End Function End Function Sub Form_Click() Sub Form_Click() Print f(1, 2, 3) Print f(1, 2, 3) End Sub End Sub 留意:在用可變個(gè)數(shù)參數(shù)時(shí),實(shí)參個(gè)數(shù)不能少于使用的形參個(gè)數(shù)。留意:在用可變個(gè)數(shù)參數(shù)時(shí),實(shí)參個(gè)數(shù)不能少于使用的

31、形參個(gè)數(shù)。6.3 子過(guò)程與函數(shù)的參數(shù)傳遞6.4 變量、過(guò)程的作用域 1.1.過(guò)程的作用域過(guò)程的作用域 定義過(guò)程時(shí)在過(guò)程名前加關(guān)鍵字定義過(guò)程時(shí)在過(guò)程名前加關(guān)鍵字PrivatePrivate,則該過(guò)程為私有過(guò)程,僅,則該過(guò)程為私有過(guò)程,僅在定義該過(guò)程的模塊內(nèi)有效,其他模塊的過(guò)程不能調(diào)用該過(guò)程。如果沒(méi)有在定義該過(guò)程的模塊內(nèi)有效,其他模塊的過(guò)程不能調(diào)用該過(guò)程。如果沒(méi)有加關(guān)鍵字加關(guān)鍵字PrivatePrivate或加了關(guān)鍵字或加了關(guān)鍵字PublicPublic,則該過(guò)程為公共過(guò)程,在整個(gè)工,則該過(guò)程為公共過(guò)程,在整個(gè)工程內(nèi)有效,其他模塊內(nèi)的過(guò)程可以調(diào)用該過(guò)程。程內(nèi)有效,其他模塊內(nèi)的過(guò)程可以調(diào)用該過(guò)程。

32、調(diào)用當(dāng)前過(guò)程所在模塊定義的過(guò)程可以直接使用過(guò)程名。調(diào)用其他窗調(diào)用當(dāng)前過(guò)程所在模塊定義的過(guò)程可以直接使用過(guò)程名。調(diào)用其他窗體模塊或其他標(biāo)準(zhǔn)模塊定義的過(guò)程,運(yùn)用體模塊或其他標(biāo)準(zhǔn)模塊定義的過(guò)程,運(yùn)用“模塊名模塊名. .過(guò)程名的格式。過(guò)程名的格式。Private Sub Form_Click() Print 第1次調(diào)用過(guò)程b b Print Print 第2次調(diào)用過(guò)程b b Print Print 第1次調(diào)用靜態(tài)過(guò)程e e 0 Print Print 第2次調(diào)用靜態(tài)過(guò)程e e 0End Sub6.4 變量、過(guò)程的作用域 運(yùn)行結(jié)果如圖所示。 過(guò)程如果直接或間接地調(diào)用了自身,這就是過(guò)程如果直接或間接地調(diào)用

33、了自身,這就是遞歸過(guò)程。遞歸過(guò)程。例【例【6-126-12】求】求n!n!的遞歸函數(shù)。的遞歸函數(shù)。Public Function FN(n As Integer) As Public Function FN(n As Integer) As IntegerIntegerif n=1 Thenif n=1 ThenFN=1FN=1ElseElseFN=nFN=n* *FN(n-1)FN(n-1)End ifEnd ifEnd FunctionEnd Function可見(jiàn)遞歸是一個(gè)不斷自己調(diào)用自己的過(guò)程可見(jiàn)遞歸是一個(gè)不斷自己調(diào)用自己的過(guò)程6.5 遞歸【例6-13】一只猴子一天從山上摘來(lái)一袋桃子,從

34、這天開(kāi)始,它每天都要把袋中的桃子平分為二堆,吃掉其中的一堆,然后再?gòu)氖O碌奶抑心贸鲆粋€(gè)解讒,等到第10天,它發(fā)現(xiàn)袋中只有一只桃可吃,問(wèn)猴子總共摘了多少桃。程序如下運(yùn)行結(jié)果如下圖):Private Sub Command1_Click() Dim Num As Integer Num = Val(InputBox(請(qǐng)輸入天數(shù):) Label1.Caption = 桃子數(shù)量為: & Eat(Num)End SubPrivate Function Eat(N As Integer) 遞歸函數(shù) If N = 1 Then Eat = 1 Else Eat = 2 * Eat(N - 1) +

35、2 End IfEnd Function6.5 遞歸6.6 常用算法舉例 程序設(shè)計(jì)不僅僅需要具備程序設(shè)計(jì)語(yǔ)言的語(yǔ)法知識(shí),更重要的是要掌握基本的算法并能靈活的加以應(yīng)用。下面給出一些常用算法的應(yīng)用實(shí)例 。1.歐幾里德算法求最大公約數(shù)和最小公倍數(shù) 歐幾里德算法也叫做輾轉(zhuǎn)相除法,是計(jì)算兩個(gè)數(shù)最大公約數(shù)的傳統(tǒng)算法。步驟如下:(1如果a b,則交換a和b。(2令c是a / b的余數(shù)。(3如果c0,則令gcdb并終止;否則令ab,bc并轉(zhuǎn)向步驟2)。 具體算法應(yīng)用見(jiàn)下例:【例【例6-156-15】求最大公約數(shù)的函數(shù)為:】求最大公約數(shù)的函數(shù)為: Function gcd(ByVal a As Long, By

36、Val b As Long) As LongFunction gcd(ByVal a As Long, ByVal b As Long) As Long Dim c As LongDim c As Long If a b ThenIf a L Then j = 0 Next i code = aEnd Function Private Sub Form_click() Dim a() As Byte Dim b() As Byte Dim c() As Byte a = 用于加密的密碼 b = 密碼 Print 加密前的明文:; a a = code(a, b) 將原文與密碼進(jìn)行異或運(yùn)算,實(shí)現(xiàn)對(duì)原文的加密 Print 加密后的密文:, a a = code(a, b) 將密文與密碼進(jìn)行異或運(yùn)算,實(shí)現(xiàn)對(duì)密文的解密 Print 解密后的明文:, aEnd Sub3.3.數(shù)制轉(zhuǎn)換數(shù)制轉(zhuǎn)換【例【例6-186-18】將任意進(jìn)制正整數(shù)形式的字符串轉(zhuǎn)換為數(shù)值】將任意進(jìn)制正整數(shù)形式的字符串轉(zhuǎn)換為數(shù)值( (十進(jìn)制十進(jìn)制) ),實(shí)現(xiàn),實(shí)現(xiàn)函數(shù)如下:函數(shù)如下: Function str2n(ByVal a As String, Optional ByVal b As Long) Function str2n(ByVal a As St

溫馨提示

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