版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、VB程序設(shè)計唐四薪6.1 子過程的定義與調(diào)用6.2 函數(shù)的定義與調(diào)用6.3 子過程與函數(shù)的參數(shù)傳遞6.4 變量、過程的作用域6.5 遞歸6.6 常用算法舉例第6章 過程與函數(shù)本節(jié)課要求本節(jié)課要求1 . 掌握掌握Sub過程、過程、Function函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用2. 理解理解Sub過程和過程和Function函數(shù)的區(qū)別函數(shù)的區(qū)別3. 掌握編寫過程和函數(shù)的一般流程掌握編寫過程和函數(shù)的一般流程引入過程和函數(shù)的目的引入過程和函數(shù)的目的1.依據(jù)結(jié)構(gòu)化程序設(shè)計的思想,實現(xiàn)模塊化的程序設(shè)計依據(jù)結(jié)構(gòu)化程序設(shè)計的思想,實現(xiàn)模塊化的程序設(shè)計當(dāng)需解決的問題規(guī)模較大、復(fù)雜時當(dāng)需解決的問題規(guī)模較大、復(fù)雜
2、時,可以按功能細分成可以按功能細分成一個一個小的功能模塊一個一個小的功能模塊,這樣的小程序段,在這樣的小程序段,在VB中被稱中被稱為過程為過程;2. 簡化程序中多處重復(fù)出現(xiàn)處理相同功能的程序段的設(shè)簡化程序中多處重復(fù)出現(xiàn)處理相同功能的程序段的設(shè)計問題計問題過程的定義:過程是一段能完成一個或多個特定功能的過程的定義:過程是一段能完成一個或多個特定功能的獨立的程序段,并可以被其他過程調(diào)用獨立的程序段,并可以被其他過程調(diào)用特點:功能獨立;可被調(diào)用特點:功能獨立;可被調(diào)用 VB VB中的過程有兩種中的過程有兩種: : (1) (1) 系統(tǒng)提供的內(nèi)部函數(shù)過程和事件過程。系統(tǒng)提供的內(nèi)部函數(shù)過程和事件過程。
3、(2) (2) 用戶根據(jù)應(yīng)用的需要而設(shè)計的過程。用戶根據(jù)應(yīng)用的需要而設(shè)計的過程。 在在VBVB中根據(jù)應(yīng)用的要求可分為幾種類型的自定義過中根據(jù)應(yīng)用的要求可分為幾種類型的自定義過程程: : (1) (1) 以以“SubSub保留字開始的子過程。保留字開始的子過程。 (2) (2) 以以“FunctionFunction保留字開始的函數(shù)過程。保留字開始的函數(shù)過程。 (3) (3) 以以“PropertyProperty保留字開始的屬性過程。保留字開始的屬性過程。 (4) (4) 以以“EventEvent保留字開始的事件過程。保留字開始的事件過程。 本 書 僅 討 論 以本 書 僅 討 論 以 “
4、S u bS u b 開 頭 的 子 過 程 和 以 開 頭 的 子 過 程 和 以“FunctionFunction開頭的函數(shù)過程。開頭的函數(shù)過程。 過程和函數(shù)在在VBVB中,過程有兩種,一種是中,過程有兩種,一種是SubSub子過程,一種子過程,一種是是FunctionFunction函數(shù)。函數(shù)。兩者的區(qū)別在于:兩者的區(qū)別在于:SubSub子過程只執(zhí)行程序而不返回值,子過程只執(zhí)行程序而不返回值,而而FunctionFunction函數(shù)執(zhí)行程序后會返回值。函數(shù)執(zhí)行程序后會返回值。函數(shù)Function和過程Sub的區(qū)別函數(shù)函數(shù)Function參數(shù)1參數(shù)2返回值返回值過程過程Sub函數(shù):既有輸入
5、又有輸出:如數(shù)控機床、打爆米花函數(shù):既有輸入又有輸出:如數(shù)控機床、打爆米花的機器的機器過程:只有輸入沒有輸出:如光驅(qū)過程:只有輸入沒有輸出:如光驅(qū)參數(shù)n打爆米花打爆米花建立函數(shù)的一般過程建立函數(shù)的一般過程Function Function 函數(shù)名(函數(shù)名( 形式參數(shù)形式參數(shù)1 1,形式參數(shù),形式參數(shù)2 2,)End FunctionEnd Function輸入:?輸入:?輸出:?輸出:?Function Function 打爆米花糧食,糖精)打爆米花糧食,糖精)打爆米花打爆米花= =爆米花爆米花End FunctionEnd Function6.1.1 子過程的定義 在在VBVB中用中用Sub
6、 Sub 語句定義的過程叫做子過程。語句定義的過程叫做子過程??砂聪铝懈袷蕉x子過程:可按下列格式定義子過程: Sub Sub 子過程名子過程名 ( ( 形式參數(shù)列表形式參數(shù)列表 ) 語句序列語句序列 End SubEnd Sub 子過程的定義Sub sub1 (a as long, b as long) c = a+bprint cEnd Sub形式參數(shù)列表由若干個形式參數(shù)構(gòu)成,參數(shù)之間用逗號分隔。每個形式參數(shù)按下列格式定義:: 形式參數(shù)名 As 類型名省略類型說明則表示是Variant類型。子過程中可以使用Exit Sub語句跳出子過程。 6.1.2 子過程的調(diào)用 子過程只能作為語句被調(diào)用
7、,不能作為表達式被子過程只能作為語句被調(diào)用,不能作為表達式被調(diào)用調(diào)用( (即不能把子過程賦值給某個變量即不能把子過程賦值給某個變量) )??梢杂孟?。可以用下列兩種方法調(diào)用子過程:列兩種方法調(diào)用子過程: Call Call 子過程名子過程名( ( 實際參數(shù)列表實際參數(shù)列表 ) )或或 子過程名子過程名 實際參數(shù)列表實際參數(shù)列表 以上兩種調(diào)用方法功能完全一致。留意,當(dāng)使用以上兩種調(diào)用方法功能完全一致。留意,當(dāng)使用 Call Call 語法時,參數(shù)必須在括號內(nèi)。語法時,參數(shù)必須在括號內(nèi)。 Call sub1Call sub12 2,3 3)或或 sub1 2sub1 2,3 3 6.1.2 通用子過
8、程 7End Sub標(biāo)志Sub過程執(zhí)行結(jié)束,程序?qū)⒎祷卣{(diào)用該Sub過程的語句處繼續(xù)執(zhí)行; 8過程不能嵌套定義。 Private Sub Command1_Click()Call P() End SubPrivate Sub ()Print “輸出結(jié)果為:”End Sub事件過程事件過程 事件過程的調(diào)用:當(dāng)有事件發(fā)生時,系統(tǒng)會自事件過程的調(diào)用:當(dāng)有事件發(fā)生時,系統(tǒng)會自動調(diào)用與事件相對應(yīng)的事件過程。事件過程是與動調(diào)用與事件相對應(yīng)的事件過程。事件過程是與對象相關(guān)聯(lián)的,是對象對事件做出的響應(yīng)。事件對象相關(guān)聯(lián)的,是對象對事件做出的響應(yīng)。事件過程的名稱由對象名、下劃線、事件名連接而成。過程的名稱由對象名、
9、下劃線、事件名連接而成。 Sub過程子程序)SubSub子程序的語法如下:子程序的語法如下:Sub Sub 子程序名(子程序名( 形式參數(shù)形式參數(shù)1 1,形式參數(shù),形式參數(shù)2 2,)End SubEnd Sub調(diào)用子程序的兩種方式:調(diào)用子程序的兩種方式:(1 1Call Call 子程序名(子程序名( 實際參數(shù)實際參數(shù)1 1,實際參數(shù),實際參數(shù)2 2,)(2 2子程序名子程序名 實際參數(shù)實際參數(shù)1 1,實際參數(shù),實際參數(shù)2 2,F(xiàn)unction函數(shù)FunctionFunction函數(shù)的語法如下:函數(shù)的語法如下: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ù)可以向變量一樣引用和參與運算函數(shù)可以向變量一樣引用和參與運算6.2 定義Function過程定義定義Function過程說明:過程說明:1Function過程以過程以Function語句開頭,以語句開頭,以End Function結(jié)束;中間代碼部分為函數(shù)體;結(jié)束;中間代碼部分為函數(shù)體;2函數(shù)名有返回值,其值類型由函數(shù)名有返回值,其值類型由As 數(shù)據(jù)類型指定;數(shù)據(jù)類型指定;3函數(shù)體內(nèi)一般都會至少為函數(shù)名賦值一
11、次;如果函數(shù)體內(nèi)一般都會至少為函數(shù)名賦值一次;如果不賦值,函數(shù)返回值默認為不賦值,函數(shù)返回值默認為0或空;或空;4函數(shù)中途可以利用函數(shù)中途可以利用Exit Function退出。退出。Function函數(shù)返回值的方式與與SubSub過程不同的是,過程不同的是,F(xiàn)unctionFunction函數(shù)通過函數(shù)名返回函數(shù)通過函數(shù)名返回一個值,這個值是在過程的語句中賦給函數(shù)名的。一個值,這個值是在過程的語句中賦給函數(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ù)可以作為表達式來調(diào)用。格式為:函數(shù)可以作為表達式來調(diào)用。格式為:函數(shù)名函數(shù)名 (實際參數(shù)列表)(實際參數(shù)列表) 如果函數(shù)要直接作為語句來使用,則必須按照如果函數(shù)要直接作為語句來使用,則必須按照子過程的方式來調(diào)用,當(dāng)然此時也就不能利用函數(shù)的子過程的方式來調(diào)用,當(dāng)然此時也就不能利用函數(shù)的返回值了。返回值了。例如下列三條語句都可以調(diào)用前面定義的函數(shù)例如下列三條語句都可以調(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過程例如,求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過程例如,求例如,求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過程和函數(shù)需注意的幾點過程和函數(shù)需注意的幾點過程的定義不可以嵌套過程的定義不可以嵌套函數(shù)和過程必須先定義才能使用函數(shù)和過程必須先定義才能使用使用自定義過程的兩
15、個步驟:使用自定義過程的兩個步驟:定義過程和調(diào)用過程定義過程和調(diào)用過程函數(shù)和過程的相互轉(zhuǎn)換函數(shù)和過程的相互轉(zhuǎn)換寫函數(shù)首先要確定函數(shù)的輸入和輸出寫函數(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ù)和過程的相互轉(zhuǎn)換函數(shù)和過程的相互轉(zhuǎn)換Private Sub Command1_Click()Call sum(5, 3, s)Print sEnd SubSub sum(x, y, s)s = x
16、+ yEnd Sub定義過程定義過程調(diào)用過程調(diào)用過程例題編寫一個求任意三角形面積的函數(shù)編寫一個求任意三角形面積的函數(shù)Private Function Area!(a!, b!, c!)Dim t!t = (a+b+c)/2Area = Sqr(t*(t-a)*(t-b)*(t-c)End Function例題編寫一個求任意三角形面積的子過程編寫一個求任意三角形面積的子過程Private Sub Area (a!, b!, c!, s!)Dim z!z = (a+b+c)/2s = Sqr(z*(z-a)*(z-b)*(z-c)End Sub過程實例過程實例定義定義Sub過程判斷手機號碼格式是否
17、正確并調(diào)用它過程判斷手機號碼格式是否正確并調(diào)用它 Sub IsTel ()if len()=11 and IsNumeric() thenPrint 手機號碼格式正確手機號碼格式正確elsePrint 格式不正確,請重新輸入格式不正確,請重新輸入end ifend SubCall IsTel調(diào)用調(diào)用Sub過程過程 函數(shù)的實例函數(shù)的實例限制標(biāo)題顯示的內(nèi)容長度的函數(shù)限制標(biāo)題顯示的內(nèi)容長度的函數(shù) ,如果輸入的字符串如果輸入的字符串tit長度大于指定的長長度大于指定的長度度n),則返回按指定的長度截取前面部分并加省略號的字符串,如果長度),則返回按指定的長度截取前面部分并加省
18、略號的字符串,如果長度小于等于指定長度,則返回原字符串。小于等于指定長度,則返回原字符串。 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ù)列表中的變形參:置于過程定義時,參數(shù)列表中的變量或數(shù)組;在過程被調(diào)用前,系統(tǒng)不對其量或數(shù)組;在過程被調(diào)用前,系統(tǒng)不對其分配空間;分配空間; 實參:當(dāng)程序中想調(diào)用某過程時,所提供實參:當(dāng)程序中想調(diào)用某過程時,所
19、提供的實際值;的實際值; 當(dāng)實參和形參結(jié)合的時候,形參才被分配當(dāng)實參和形參結(jié)合的時候,形參才被分配空間,接收由實參傳遞過來的值;空間,接收由實參傳遞過來的值; 形參、實參個數(shù)、類型、位置要一致。形參、實參個數(shù)、類型、位置要一致。6.4.1 形參與實參 常見的錯誤 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或省略默認)或省略默認) 區(qū)別區(qū)別1:
20、形參定義前面放的關(guān)鍵字不一樣;:形參定義前面放的關(guān)鍵字不一樣; 區(qū)別區(qū)別2:形參接收到的值不一樣;:形參接收到的值不一樣; 區(qū)別區(qū)別3:形參對實參的影響不一樣:形參對實參的影響不一樣6.4.23 參數(shù)傳遞方式 例如:(兩個數(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 “主過程中:“;x,yEnd Sub6.4.23 參數(shù)
21、傳遞方式 闡明:闡明: 形參前加形參前加ByVal時表示傳值時表示傳值 不加或加不加或加ByRef時表示傳址時表示傳址 傳值是單方向的傳值是單方向的 傳址是傳址是“雙方向的雙方向的”6.4.23 參數(shù)傳遞方式 Private sub add(x as integer, y as integer, z as integer)z=x+yx=x+1y=y+1print “子過程中子過程中” & 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 或者寫成或者寫成Call add(a,b,c)print “外部過程中外部過程中” & a & b & c End sub1.1.參數(shù)傳遞方式參數(shù)傳遞方式 過程的參數(shù)有兩種傳遞方式:過程的參數(shù)有兩種傳遞方式:傳值傳值ByValByVal)傳地址傳地址ByRefByRef)(默認方式)。)(默認方式)。 按值傳遞參數(shù)按值傳遞參數(shù): :在形式參數(shù)前加上關(guān)鍵字在形式參數(shù)前加上關(guān)鍵字ByValByVal表示指定按值傳遞參數(shù)。調(diào)用時實際參數(shù)僅將值表示指定按值傳遞參數(shù)。調(diào)用時實際參數(shù)僅將值傳遞給形式參數(shù),形式參數(shù)的任何改變不會影響傳遞給形式參數(shù),形
23、式參數(shù)的任何改變不會影響實際參數(shù)。實際參數(shù)。 6.3 子過程與函數(shù)的參數(shù)傳遞按地址傳遞參數(shù)按地址傳遞參數(shù): :在形式參數(shù)前加上關(guān)鍵字在形式參數(shù)前加上關(guān)鍵字ByRefByRef表示指定按地址傳遞參表示指定按地址傳遞參數(shù)。數(shù)。調(diào)用時如果實際參數(shù)是表達式,則傳遞方式與按值傳遞調(diào)用時如果實際參數(shù)是表達式,則傳遞方式與按值傳遞效果相同;如果實際參數(shù)是變量,則將實際參數(shù)的內(nèi)存效果相同;如果實際參數(shù)是變量,則將實際參數(shù)的內(nèi)存地址傳遞給形式參數(shù),形式參數(shù)與實際參數(shù)指向同一個地址傳遞給形式參數(shù),形式參數(shù)與實際參數(shù)指向同一個內(nèi)存地址,形式參數(shù)的改變也就是實際參數(shù)的改變。內(nèi)存地址,形式參數(shù)的改變也就是實際參數(shù)的改變
24、。 6.3 子過程與函數(shù)的參數(shù)傳遞【例6-4】下列程序運行后,每次單擊窗體就會顯示“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 闡明:本例中,圓括號用于將實際參數(shù)由變量b轉(zhuǎn)換為表達式,即按值傳遞(s(b),否則就是按址傳遞(s a)。2.2.可選參數(shù)可選參數(shù) 在形式參數(shù)前加上關(guān)鍵字在形式參數(shù)前加上關(guān)鍵字Option
25、alOptional可以指定該形式參數(shù)為可選參可以指定該形式參數(shù)為可選參數(shù)??蛇x參數(shù)在過程調(diào)用時可以不提供與可選參數(shù)對應(yīng)的實際參數(shù)。數(shù)。可選參數(shù)在過程調(diào)用時可以不提供與可選參數(shù)對應(yīng)的實際參數(shù)??蛇x參數(shù)可以指定默認的缺省值??蛇x參數(shù)可以指定默認的缺省值。3.3.命名參數(shù)命名參數(shù) 實際參數(shù)使用實際參數(shù)使用“形式參數(shù)名形式參數(shù)名:= := 實際參數(shù)的格式即為命名參數(shù)。實際參數(shù)的格式即為命名參數(shù)。命名參數(shù)出現(xiàn)的位置可以與定義時的順序無關(guān)。但需注意非命名參數(shù)命名參數(shù)出現(xiàn)的位置可以與定義時的順序無關(guān)。但需注意非命名參數(shù)仍需按定義時的位置出現(xiàn),所以非命名參數(shù)在定義時應(yīng)排在第一個命仍需按定義時的位置出現(xiàn),所以
26、非命名參數(shù)在定義時應(yīng)排在第一個命名參數(shù)之前。名參數(shù)之前。4.4.數(shù)組作為參數(shù)和返回值數(shù)組作為參數(shù)和返回值 數(shù)組可以作為實際參數(shù)傳遞到過程中。此時形式參數(shù)應(yīng)為數(shù)組可以作為實際參數(shù)傳遞到過程中。此時形式參數(shù)應(yīng)為VariantVariant類型或與實際參數(shù)類型完全相同的數(shù)組類型。作為形式參數(shù)類型或與實際參數(shù)類型完全相同的數(shù)組類型。作為形式參數(shù)的數(shù)組應(yīng)為可變數(shù)組,用數(shù)組名跟空的圓括號表示。函數(shù)的返回值也的數(shù)組應(yīng)為可變數(shù)組,用數(shù)組名跟空的圓括號表示。函數(shù)的返回值也可以是數(shù)組,此時類型說明為可以是數(shù)組,此時類型說明為VariantVariant類型或類型或“As As 類型()類型()”。6.3 子過程與
27、函數(shù)的參數(shù)傳遞【例【例6-76-7】下列程序運行后,單擊窗體時顯示】下列程序運行后,單擊窗體時顯示“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ù)表達式直接帶數(shù)組下標(biāo)代函數(shù)表達式直接帶數(shù)組下標(biāo)代表數(shù)組元素表數(shù)組元素 End SubEnd Sub6.3 子過程與函數(shù)的參數(shù)傳遞5.5.可變個數(shù)參數(shù)可變個數(shù)參數(shù) 將最后一個形式參數(shù)聲明為將最后一個形式參數(shù)聲明為VariantVariant類型的數(shù)組,同
29、時在前面加上類型的數(shù)組,同時在前面加上ParamArrayParamArray關(guān)鍵字,就變成可變個數(shù)的參數(shù);調(diào)用過程時可輸入任意個關(guān)鍵字,就變成可變個數(shù)的參數(shù);調(diào)用過程時可輸入任意個數(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。【例【例6-86-8】下列程序運行后,每次單擊窗體就會顯示】下列程序運行后,每次單擊窗體就會顯
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 留意:在用可變個數(shù)參數(shù)時,實參個數(shù)不能少于使用的形參個數(shù)。留意:在用可變個數(shù)參數(shù)時,實參個數(shù)不能少于使用的
31、形參個數(shù)。6.3 子過程與函數(shù)的參數(shù)傳遞6.4 變量、過程的作用域 1.1.過程的作用域過程的作用域 定義過程時在過程名前加關(guān)鍵字定義過程時在過程名前加關(guān)鍵字PrivatePrivate,則該過程為私有過程,僅,則該過程為私有過程,僅在定義該過程的模塊內(nèi)有效,其他模塊的過程不能調(diào)用該過程。如果沒有在定義該過程的模塊內(nèi)有效,其他模塊的過程不能調(diào)用該過程。如果沒有加關(guān)鍵字加關(guān)鍵字PrivatePrivate或加了關(guān)鍵字或加了關(guān)鍵字PublicPublic,則該過程為公共過程,在整個工,則該過程為公共過程,在整個工程內(nèi)有效,其他模塊內(nèi)的過程可以調(diào)用該過程。程內(nèi)有效,其他模塊內(nèi)的過程可以調(diào)用該過程。
32、調(diào)用當(dāng)前過程所在模塊定義的過程可以直接使用過程名。調(diào)用其他窗調(diào)用當(dāng)前過程所在模塊定義的過程可以直接使用過程名。調(diào)用其他窗體模塊或其他標(biāo)準(zhǔn)模塊定義的過程,運用體模塊或其他標(biāo)準(zhǔn)模塊定義的過程,運用“模塊名模塊名. .過程名的格式。過程名的格式。Private Sub Form_Click() Print 第1次調(diào)用過程b b Print Print 第2次調(diào)用過程b b Print Print 第1次調(diào)用靜態(tài)過程e e 0 Print Print 第2次調(diào)用靜態(tài)過程e e 0End Sub6.4 變量、過程的作用域 運行結(jié)果如圖所示。 過程如果直接或間接地調(diào)用了自身,這就是過程如果直接或間接地調(diào)用
33、了自身,這就是遞歸過程。遞歸過程。例【例【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可見遞歸是一個不斷自己調(diào)用自己的過程可見遞歸是一個不斷自己調(diào)用自己的過程6.5 遞歸【例6-13】一只猴子一天從山上摘來一袋桃子,從
34、這天開始,它每天都要把袋中的桃子平分為二堆,吃掉其中的一堆,然后再從剩下的桃中拿出一個解讒,等到第10天,它發(fā)現(xiàn)袋中只有一只桃可吃,問猴子總共摘了多少桃。程序如下運行結(jié)果如下圖):Private Sub Command1_Click() Dim Num As Integer Num = Val(InputBox(請輸入天數(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è)計不僅僅需要具備程序設(shè)計語言的語法知識,更重要的是要掌握基本的算法并能靈活的加以應(yīng)用。下面給出一些常用算法的應(yīng)用實例 。1.歐幾里德算法求最大公約數(shù)和最小公倍數(shù) 歐幾里德算法也叫做輾轉(zhuǎn)相除法,是計算兩個數(shù)最大公約數(shù)的傳統(tǒng)算法。步驟如下:(1如果a b,則交換a和b。(2令c是a / b的余數(shù)。(3如果c0,則令gcdb并終止;否則令ab,bc并轉(zhuǎn)向步驟2)。 具體算法應(yīng)用見下例:【例【例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) 將原文與密碼進行異或運算,實現(xiàn)對原文的加密 Print 加密后的密文:, a a = code(a, b) 將密文與密碼進行異或運算,實現(xiàn)對密文的解密 Print 解密后的明文:, aEnd Sub3.3.數(shù)制轉(zhuǎn)換數(shù)制轉(zhuǎn)換【例【例6-186-18】將任意進制正整數(shù)形式的字符串轉(zhuǎn)換為數(shù)值】將任意進制正整數(shù)形式的字符串轉(zhuǎn)換為數(shù)值( (十進制十進制) ),實現(xiàn),實現(xiàn)函數(shù)如下:函數(shù)如下: Function str2n(ByVal a As String, Optional ByVal b As Long) Function str2n(ByVal a As St
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年公共場所空氣質(zhì)量監(jiān)測與衛(wèi)生保潔服務(wù)合同3篇
- 出租毛坯水電合同范例
- 2024年弧型電熱旋轉(zhuǎn)保溫柜項目可行性研究報告
- 2024年導(dǎo)纜齒輪項目可行性研究報告
- 2024年臥式酸貯存罐項目可行性研究報告
- 馬蜂養(yǎng)殖轉(zhuǎn)讓合同范例
- 食堂承包管理合同范例
- 2024年保齡球道油項目可行性研究報告
- 一年級數(shù)學(xué)(上)計算題專項練習(xí)匯編
- 轉(zhuǎn)長期合同范例
- 線上房展會活動方案
- PCB制造成本參數(shù)
- 操作系統(tǒng)智慧樹知到期末考試答案2024年
- 《跨境供應(yīng)鏈管理》教學(xué)大綱(含課程思政)
- 高三英語二輪復(fù)習(xí)寫作專項讀后續(xù)寫人物情緒描寫方法課件
- 殯儀館物業(yè)服務(wù)方案
- 電廠缺陷分析報告
- 化工裝備的選型與設(shè)計
- 外賣小哥培訓(xùn)道路安全管理
- 上市公司投資報告分析報告
- 中醫(yī)診療設(shè)備種類目錄
評論
0/150
提交評論