![子過(guò)程和函數(shù)過(guò)程_第1頁(yè)](http://file4.renrendoc.com/view/c526c7ed012cbecabd8f8b82d26c0b37/c526c7ed012cbecabd8f8b82d26c0b371.gif)
![子過(guò)程和函數(shù)過(guò)程_第2頁(yè)](http://file4.renrendoc.com/view/c526c7ed012cbecabd8f8b82d26c0b37/c526c7ed012cbecabd8f8b82d26c0b372.gif)
![子過(guò)程和函數(shù)過(guò)程_第3頁(yè)](http://file4.renrendoc.com/view/c526c7ed012cbecabd8f8b82d26c0b37/c526c7ed012cbecabd8f8b82d26c0b373.gif)
![子過(guò)程和函數(shù)過(guò)程_第4頁(yè)](http://file4.renrendoc.com/view/c526c7ed012cbecabd8f8b82d26c0b37/c526c7ed012cbecabd8f8b82d26c0b374.gif)
![子過(guò)程和函數(shù)過(guò)程_第5頁(yè)](http://file4.renrendoc.com/view/c526c7ed012cbecabd8f8b82d26c0b37/c526c7ed012cbecabd8f8b82d26c0b375.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
子過(guò)程和函數(shù)過(guò)程第一頁(yè),共七十一頁(yè),2022年,8月28日本章內(nèi)容及要求8.1Sub過(guò)程的定義和調(diào)用8.2Function函數(shù)過(guò)程的定義和調(diào)用8.3參數(shù)傳遞8.4過(guò)程的嵌套和遞歸調(diào)用8.5變量及過(guò)程的作用域第二頁(yè),共七十一頁(yè),2022年,8月28日
(1)窗體事件過(guò)程PrivateSubForm_事件名(參數(shù)列表)<語(yǔ)句組>EndSub
(2)控件事件過(guò)程PrivateSub
控件名_事件名(參數(shù)列表)<語(yǔ)句組>
EndSub8.1.1事件Sub過(guò)程8.1Sub子過(guò)程的定義和調(diào)用在VB中Sub子過(guò)程分為:事件過(guò)程和用戶自定義過(guò)程第三頁(yè),共七十一頁(yè),2022年,8月28日方法一:通過(guò)“工具”菜單中的“添加過(guò)程”命令,出現(xiàn)“添加過(guò)程”對(duì)話框,選擇過(guò)程類(lèi)型(子過(guò)程、函數(shù)、屬性、事件)及作用范圍(公有的Public、私有的Private),單擊確定后得到一個(gè)過(guò)程定義的結(jié)構(gòu)框架(模板),如:Sub子過(guò)程的定義----兩種方法8.1.2用戶自定義Sub子過(guò)程定義PublicSub
Sort()
……EndSub第四頁(yè),共七十一頁(yè),2022年,8月28日[Public|Private][Static]Sub子過(guò)程名([形參表])<局部變量或常數(shù)定義>
<語(yǔ)句組>
[ExitSub]
<語(yǔ)句組>EndSub
方法二:直接在代碼窗口中輸入過(guò)程體第五頁(yè),共七十一頁(yè),2022年,8月28日例1:編一個(gè)交換兩個(gè)整型變量值的子過(guò)程。PrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=XX=YY=TempEndSub第六頁(yè),共七十一頁(yè),2022年,8月28日例2:編寫(xiě)求階乘的子過(guò)程。Privatesubfact(nAsInteger,fasDouble)DimiAsIntegerf=1Fori=1Tonf=f*iNextEndsub第七頁(yè),共七十一頁(yè),2022年,8月28日。說(shuō)明:(1)子過(guò)程名:命名規(guī)則與變量名規(guī)則相同。子過(guò)程名不返回值,而是通過(guò)形參與實(shí)參的傳遞得到結(jié)果,調(diào)用時(shí)可返回多個(gè)值(2)形式參數(shù)列表:形式參數(shù)通常簡(jiǎn)稱(chēng)“形參”,僅表示形參的類(lèi)型、個(gè)數(shù)、位置,定義時(shí)是無(wú)值的,只有在過(guò)程被調(diào)用時(shí),虛實(shí)參結(jié)合后才獲得相應(yīng)的值。(3)過(guò)程可以無(wú)形式參數(shù),但括號(hào)不能省。(4)參數(shù)的定義形式:[ByVal|ByRef]變量名[()][As類(lèi)型][,…]ByVal表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按值傳遞的;ByRef表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按地址傳遞的,缺省時(shí)傳址。第八頁(yè),共七十一頁(yè),2022年,8月28日方法一:Call子過(guò)程名(參數(shù)列表)方法二:子過(guò)程名[參數(shù)列表]說(shuō)明:
(1)參數(shù)列表稱(chēng)為實(shí)參或?qū)嵲?,它必須與形參保持個(gè)數(shù)相同,位置與類(lèi)型一一對(duì)應(yīng)。
(2)調(diào)用時(shí)把實(shí)參值傳遞給對(duì)應(yīng)的形參。其中值傳遞(形參前有ByVal說(shuō)明)時(shí)實(shí)參的值不隨形參的值變化而改變。而地址傳遞時(shí)實(shí)參的值隨形參值的改變而改變。8.1.3子過(guò)程的調(diào)用第九頁(yè),共七十一頁(yè),2022年,8月28日(3)當(dāng)參數(shù)是數(shù)組時(shí),形參與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略其維數(shù),但括號(hào)不能省。
(4)調(diào)用子過(guò)程的形式有兩種,用Call關(guān)鍵字時(shí),實(shí)參必須加圓括號(hào)括起,反之則不用加圓括號(hào)括起。實(shí)參之間用“,”分隔。例:調(diào)用上面定義的Swap子過(guò)程的形式:
Swapa,bCallSwap(a,b)在某個(gè)事件過(guò)程中調(diào)用已定義的階乘的過(guò)程fact:PrivateSubCommand1_Click()DimnAsInteger,mAsLongn=5Callfact(n,m)PrintmEndSub第十頁(yè),共七十一頁(yè),2022年,8月28日PrivateSubCmdOK_click()……CallSwap(a,b)……Swapa,bEndSubPrivateSubSwap(x%,y%)Dimtemp%Temp=XX=YY=TempEndSub
過(guò)程調(diào)用的執(zhí)行過(guò)程:第十一頁(yè),共七十一頁(yè),2022年,8月28日
VisualBasic函數(shù)分為內(nèi)部函數(shù)和外部(自定義)函數(shù),外部函數(shù)是用戶根據(jù)需要用Function關(guān)鍵字定義的函數(shù)過(guò)程,與子過(guò)程不同的是函數(shù)名將返回一個(gè)值。
8.2Function函數(shù)過(guò)程的定義和調(diào)用第十二頁(yè),共七十一頁(yè),2022年,8月28日方法一:通過(guò)“工具”菜單中的“添加過(guò)程”命令,出現(xiàn)“添加過(guò)程”對(duì)話框,選擇過(guò)程類(lèi)型(子過(guò)程、函數(shù)、屬性、事件)及作用范圍(公有的Public、私有的Private),單擊確定后得到一個(gè)函數(shù)定義的結(jié)構(gòu)框架(模板),如:PublicFunction
Sort()
……EndFunction8.2.1Function函數(shù)過(guò)程的定義Function函數(shù)過(guò)程過(guò)程的定義----兩種方法第十三頁(yè),共七十一頁(yè),2022年,8月28日[Public|Private][Static]Function函數(shù)名([<參數(shù)列表>])[As<類(lèi)型>]<局部變量或常數(shù)定義><語(yǔ)句塊>[函數(shù)名=返回值][ExitFunction]<語(yǔ)句塊>[函數(shù)名=返回值]EndFunction方法二:直接在代碼窗口中輸入函數(shù)體第十四頁(yè),共七十一頁(yè),2022年,8月28日Functionfact(nAsInteger)AsDoubleDimiAsInteger,fAsDoublef=1Fori=1Tonf=f*iNext
fact=fEndFunction把例2階乘的sub子過(guò)程改為Function函數(shù)過(guò)程第十五頁(yè),共七十一頁(yè),2022年,8月28日說(shuō)明:(1)函數(shù)名:命名規(guī)則與變量名規(guī)則相同。但不能與系統(tǒng)的內(nèi)部函數(shù)或其它通用子過(guò)程同名,也不能與已定義的全局變量和本模塊中模塊級(jí)變量同名。(2)在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量使用,函數(shù)的返回值就是通過(guò)對(duì)函數(shù)名的賦值語(yǔ)句來(lái)實(shí)現(xiàn)的,在函數(shù)過(guò)程中至少要對(duì)函數(shù)名賦值一次。(3)AS類(lèi)型:是指函數(shù)返回值的類(lèi)型,若省略,則函數(shù)返回變體類(lèi)型值(Variant)。(4)ExitFunction:表示退出函數(shù)過(guò)程,常常是與選擇結(jié)構(gòu)(If或SelectCase語(yǔ)句)聯(lián)用,即當(dāng)滿足一定條件時(shí),退出函數(shù)過(guò)程。(5)形參數(shù)列表:形參的定義與子過(guò)程完全相同。第十六頁(yè),共七十一頁(yè),2022年,8月28日調(diào)用形式如下:
函數(shù)名(實(shí)參列表)說(shuō)明:在調(diào)用時(shí)實(shí)參和形參的數(shù)據(jù)類(lèi)型、順序、個(gè)數(shù)必須匹配。函數(shù)調(diào)用只能出現(xiàn)在表達(dá)式中,其功能是求得函數(shù)的返回值。8.2.2函數(shù)過(guò)程的調(diào)用調(diào)用階乘的過(guò)程:PrivateSubCommand1_Click()DimSAsIntegerS=5Printfact(S)EndSub第十七頁(yè),共七十一頁(yè),2022年,8月28日2009-03-29以下關(guān)于過(guò)程及過(guò)程參數(shù)的描述中,錯(cuò)誤的是A)過(guò)程的參數(shù)可以是控件名稱(chēng)
B)調(diào)用過(guò)程時(shí)使用的實(shí)參的個(gè)數(shù)應(yīng)與過(guò)程形參的個(gè)數(shù)相同
C)只有函數(shù)過(guò)程能夠?qū)⑦^(guò)程中處理的信息返回到調(diào)用程中
D)窗體可以作為過(guò)程的參數(shù)課堂練習(xí)2010-03-22下面是求最大公約數(shù)的函數(shù)的首部Functiongcd(ByValxAsInteger,ByValyAsInteger)AsInteger若要輸出8、12、16這3個(gè)數(shù)的最大公約數(shù),下面正確的語(yǔ)句是
A)Printgcd(8,12),gcd(12,16),gcd(16,8)
B)Printgcd(8,12,16)
C)Printgcd(8),gcd(12),gcd(16)
D)Printgcd(8,gcd(12,16))第十八頁(yè),共七十一頁(yè),2022年,8月28日VisualBasic中不同模塊(過(guò)程)之間數(shù)據(jù)的傳遞有兩種方式:
通過(guò)過(guò)程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn);使用全局變量來(lái)實(shí)現(xiàn)各過(guò)程中共享數(shù)據(jù)。
1、形式參數(shù)
是指在定義子過(guò)程和函數(shù)時(shí),出現(xiàn)在Sub過(guò)程名或Function函數(shù)名后面括號(hào)內(nèi)的變量,是用來(lái)接收傳送給Sub過(guò)程或Function的數(shù)據(jù),形參表中的各個(gè)變量之間用逗號(hào)分隔。8.3參數(shù)傳遞8.3.1形式參數(shù)與實(shí)際參數(shù)第十九頁(yè),共七十一頁(yè),2022年,8月28日2、實(shí)際參數(shù)實(shí)際參數(shù)是指在調(diào)用Sub或Function時(shí),出現(xiàn)在子過(guò)程名或函數(shù)名后括號(hào)內(nèi)的參數(shù),其作用是將它們的數(shù)據(jù)(數(shù)值或地址)傳送給Sub或Function過(guò)程與其對(duì)應(yīng)的形參變量。實(shí)參可由常量、表達(dá)式、有效的變量名、數(shù)組名(如A())組成,實(shí)參表中各參數(shù)用逗號(hào)分隔。
參數(shù)傳遞指主調(diào)過(guò)程的實(shí)參(調(diào)用時(shí)已有確定值和內(nèi)存地址的參數(shù))傳遞給被調(diào)過(guò)程的形參。參數(shù)的傳遞有兩種方式:按值傳遞、按地址傳遞。形參前加“ByVal”關(guān)鍵字的是按值傳遞,缺省或加“ByRef”關(guān)鍵字則按地址傳遞。8.3.2傳地址與傳值第二十頁(yè),共七十一頁(yè),2022年,8月28日傳址:形參得到的是實(shí)參的地址,當(dāng)形參值的改變同時(shí)也改變實(shí)參的值。因?yàn)樗鼈児灿靡粋€(gè)地址。傳值:形參只得到的是實(shí)參的值,形參值的改變不會(huì)影響實(shí)參的值。因?yàn)樾螀⒉⒉恢缹?shí)參的地址。SubSwap2(x%,y%)DimTemp%Temp=x:x=y:y=TempEndSubSubSwap1(ByValx%,ByValy%)DimTemp%Temp=x:x=y:y=TempEndSub什么是傳址和傳值呢?傳值傳址傳值第二十一頁(yè),共七十一頁(yè),2022年,8月28日PrivateSubCmdOK_Click()Dima%,b%a=10:b=20
Swap1a,b‘傳值
Print"A1=";a,"B1=";ba=10:b=20
Swap2a,b'傳地址
Print"A2=";a,"B2=";bEndSubSubSwap2(x%,y%)DimTemp%Temp=x:x=y:y=TempEndSubSubSwap1(ByValx%,ByValy%)DimTemp%Temp=x:x=y:y=TempEndSub第二十二頁(yè),共七十一頁(yè),2022年,8月28日值傳遞的執(zhí)行過(guò)程如下圖:第二十三頁(yè),共七十一頁(yè),2022年,8月28日通過(guò)地址傳遞數(shù)據(jù)的執(zhí)行過(guò)程第二十四頁(yè),共七十一頁(yè),2022年,8月28日
在子過(guò)程和函數(shù)過(guò)程調(diào)用時(shí),如果實(shí)參是常量(包括系統(tǒng)常量、用Const自定義的符號(hào)常量)或表達(dá)式,無(wú)論在定義時(shí)使用值傳遞還是地址傳遞,此時(shí)都是按值傳遞方式將常量或表達(dá)式計(jì)算的值傳遞給形參變量。如果形參定義是按傳地址方式,但調(diào)用時(shí)想使實(shí)參變量按值方式傳遞,可以把實(shí)參變量加上括號(hào),將其轉(zhuǎn)換成表達(dá)式即可。
8.3.3有關(guān)過(guò)程之間數(shù)據(jù)傳遞的幾點(diǎn)說(shuō)明第二十五頁(yè),共七十一頁(yè),2022年,8月28日
解決一個(gè)問(wèn)題既可以使用子過(guò)程,也可以使用函數(shù)過(guò)程,是使用子過(guò)程還是使用函數(shù)過(guò)程呢?如果是需要求得一個(gè)值,一般情況使用函數(shù)過(guò)程,如不是為了求一個(gè)值,而是完成一些操作,或需要返回多個(gè)值,則使用子過(guò)程比較方便。使用子過(guò)程還是使用函數(shù)過(guò)程?第二十六頁(yè),共七十一頁(yè),2022年,8月28日
VisualBasic中數(shù)組作參數(shù)是通過(guò)傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):
1.為了把一個(gè)數(shù)組的全部元素傳送給一個(gè)過(guò)程,應(yīng)將數(shù)組名寫(xiě)入形參表中,并略去數(shù)組的上下界,但括號(hào)不能省略。PrivateSubSort(a()Assingle)
……EndSub其中形參“a()”即為數(shù)組。8.3.4數(shù)組作為過(guò)程的參數(shù)第二十七頁(yè),共七十一頁(yè),2022年,8月28日2.被調(diào)過(guò)程可通過(guò)Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上、下界。3.當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類(lèi)型一致。4.實(shí)參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實(shí)參數(shù)組共用一段內(nèi)存單元。例如:定義了實(shí)參數(shù)組b(1to8),給它們賦了值,調(diào)用Sort()函數(shù)過(guò)程的形式如下:Sortb()或CallSort(b())實(shí)參數(shù)組后面的括號(hào)可以省略,但為便于閱讀,建議一般不要省略為好。第二十八頁(yè),共七十一頁(yè),2022年,8月28日課堂練習(xí)第二十九頁(yè),共七十一頁(yè),2022年,8月28日FunctionFirProc(zAsInteger,yAsInteger,zAsInteger)
FirProc=2x+y+3z
EndFunction
FunctionSecProc(xAsInteger,yAsInteger,zAsInteger)
SecProc=FirProc(x,y,z)+x
EndFunction
PrivateSubCommand1_Click()
DimaAsInteger,bAsInteger,cAsInteger
a=2:b=3:c=4
PrintSecProc(c,b,a)
EndSub
A)21B)19C)17D)34
課堂練習(xí)第三十頁(yè),共七十一頁(yè),2022年,8月28日2010-9-22以下關(guān)于局部變量的敘述中錯(cuò)誤的是A)在過(guò)程中用Dim語(yǔ)句或Static語(yǔ)句聲明的變量是局部變量B)局部變量的作用域是它所在的過(guò)程C)在過(guò)程中用Static語(yǔ)句聲明的變量是靜態(tài)局部變量D)過(guò)程執(zhí)行完畢,該過(guò)程中用Dim或Static語(yǔ)句聲明的變量即被釋放課堂練習(xí)第三十一頁(yè),共七十一頁(yè),2022年,8月28日下列程序的輸出結(jié)果是10110。PrivateSubsub1(ByValaAsInteger,bAsInteger) a=a+b:b=b+aEndSubPrivateSubForm_Click() DimxAsInteger,yAsInteger x=10:y=20 Callsub1(x,y) sub1x,y Printx;yEndSub第三十二頁(yè),共七十一頁(yè),2022年,8月28日過(guò)程的嵌套:類(lèi)似選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的嵌套。也就是指一個(gè)過(guò)程中包含了另一個(gè)過(guò)程的調(diào)用。
8.4.1過(guò)程的嵌套8.4過(guò)程的嵌套和遞歸調(diào)用Subform_click()…Callsub1…EndsubSubsub1…Y=F1(n)…EndsubFunctionF1(x)…F1=….…EndFunction第三十三頁(yè),共七十一頁(yè),2022年,8月28日過(guò)程的遞歸:簡(jiǎn)單說(shuō)就是自己調(diào)用自己。
8.4.2過(guò)程的遞歸Functionfact(n%)AsDoubleDimiAsInteger,fAsDoublef=1Fori=1Tonf=f*iNext
fact=fEndFunctionFunctionfact(n%)AsDoubleIfn=1thenfact=1elsefact=n*fact(n-1)EndFunction用遞歸實(shí)現(xiàn)階乘不用遞歸實(shí)現(xiàn)階乘第三十四頁(yè),共七十一頁(yè),2022年,8月28日Functionfact(n%)AsDoubleIfn=1thenfact=1elsefact=n*fact(n-1)EndFunction現(xiàn)在假N=4,觀察執(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第三十五頁(yè),共七十一頁(yè),2022年,8月28日注意VB語(yǔ)言不允許過(guò)程的嵌套定義,即一個(gè)過(guò)程內(nèi)不能包含另一個(gè)過(guò)程.VB語(yǔ)言允許過(guò)程的嵌套調(diào)用,即在調(diào)用一個(gè)過(guò)程的過(guò)程中,又調(diào)用另一個(gè)過(guò)程.第三十六頁(yè),共七十一頁(yè),2022年,8月28日窗體模塊:文件擴(kuò)展名為.frm
窗體模塊是VB程序的基礎(chǔ),與窗體對(duì)應(yīng),存放著該窗體的所有信息,如窗體及其上各控件對(duì)象的界面信息、屬性、事件過(guò)程、通用過(guò)程、變量和常量的聲明等??梢酝ㄟ^(guò)記事本打開(kāi)查看。8.5.1窗體模塊和標(biāo)準(zhǔn)模塊8.5變量及過(guò)程的作用域第三十七頁(yè),共七十一頁(yè),2022年,8月28日標(biāo)準(zhǔn)模塊:文件擴(kuò)展名為.Bas
它們可以包含變量、常數(shù)、類(lèi)型、外部過(guò)程和全局過(guò)程的全局(在整個(gè)應(yīng)用程序范圍內(nèi)有效的)聲明或模塊級(jí)聲明。寫(xiě)入標(biāo)準(zhǔn)模塊的代碼不必綁在特定的應(yīng)用程序上,則在許多不同的應(yīng)用程序中可以重用標(biāo)準(zhǔn)模塊。當(dāng)一個(gè)過(guò)程要被多個(gè)不同對(duì)象或不同模塊中的程序調(diào)用時(shí),那么該過(guò)程一般可放在標(biāo)準(zhǔn)模塊中。第三十八頁(yè),共七十一頁(yè),2022年,8月28日
在VB中,由于可以在過(guò)程中和模塊中聲明變量,根據(jù)定義變量的位置和定義變量的語(yǔ)句不同,變量可以分為:局部變量(過(guò)程級(jí)變量)窗體/模塊級(jí)變量(私有的模塊級(jí)變量,能被本模塊的所有過(guò)程和函數(shù)使用)全局級(jí)變量(公有的模塊級(jí)變量)。8.5.2變量的作用域第三十九頁(yè),共七十一頁(yè),2022年,8月28日關(guān)于變量的生存期變量的生存期:是指變量的值能夠保留多長(zhǎng)時(shí)間,即分配給變量的存儲(chǔ)空間能夠被保留多長(zhǎng)時(shí)間。1、局部變量Dim聲明的局部變量在本過(guò)程執(zhí)行期間有效Static聲明的局部變量在整個(gè)應(yīng)用程序運(yùn)行期間有效2、模塊變量在整個(gè)應(yīng)用程序運(yùn)行期間有效3、全局變量在整個(gè)應(yīng)用程序運(yùn)行期間有效第四十頁(yè),共七十一頁(yè),2022年,8月28日局部變量:在過(guò)程內(nèi)聲明的變量,只能在本過(guò)程中使用。
在過(guò)程內(nèi)部使用Dim或者Static關(guān)鍵字來(lái)聲明的變量,只在聲明它們的過(guò)程中才能被訪問(wèn)或改變?cè)撟兞康闹担瑒e的過(guò)程不可訪問(wèn)。所以可以在不同的過(guò)程中聲明相同名字的局部變量而互不影響。局部變量—過(guò)程級(jí)變量第四十一頁(yè),共七十一頁(yè),2022年,8月28日例:PrivateSubForm_Load()Dimn%n=10EndSubPrivateSubFrom_Click()
Dimn%Print“n=“;nEndSub程序運(yùn)行后單擊窗體,其輸出結(jié)果是什么?局部變量局部變量第四十二頁(yè),共七十一頁(yè),2022年,8月28日
窗體/模塊級(jí)變量:在“通用聲明”段中用Dim語(yǔ)句或用Private語(yǔ)句聲明的變量,可被本窗體/模塊的任何過(guò)程訪問(wèn)。但其他模塊卻不能訪問(wèn)該變量。例如:在“通用聲明”段聲明如下變量
PrivatesAsStringDimaAsInteger,bAsSingle8.5.2.2窗體模塊級(jí)變量第四十三頁(yè),共七十一頁(yè),2022年,8月28日
全局變量也稱(chēng)公有的模塊級(jí)變量,在窗體模塊或標(biāo)準(zhǔn)模塊的頂部的“通用”聲明段用Public關(guān)鍵字聲明,它的作用范圍是整個(gè)應(yīng)用程序,即可被本應(yīng)用程序的任何過(guò)程或函數(shù)訪問(wèn)。例如:
PublicaAsInteger,bAssingle8.5.2.3全局級(jí)變量第四十四頁(yè),共七十一頁(yè),2022年,8月28日3種變量聲明及使用規(guī)則如下表:第四十五頁(yè),共七十一頁(yè),2022年,8月28日全局變量與局部變量同名在不同過(guò)程中定義同名變量,它們互不影響,但若在一過(guò)程中定義使用了與全局變量同名的變量,則就應(yīng)注意。
注意:當(dāng)變量名相同而作用域不同時(shí),將優(yōu)先訪問(wèn)作用域小的變量。8.5.2.4關(guān)于多個(gè)變量同名小第四十六頁(yè),共七十一頁(yè),2022年,8月28日PublicxAsInteger'定義全局變量PrivateSubForm_Load()
x=1'將全局變量x的值設(shè)置成
1EndSubPrivateSubCommand1_Click()DimxAsInteger'定義局部變量
x=2'將局部變量x的值設(shè)置成
2Print“x=";x
Print“x=";Form1.xEndSubPrivateSubCommand2_Click()Print“x=";x
EndSub窗體將輸出什么?第四十七頁(yè),共七十一頁(yè),2022年,8月28日全局變量與全局變量同名如果不同模塊中的全局變量使用同一名字,則通過(guò)同時(shí)引用模塊名和變量名就可以在代碼中區(qū)分它們。例如,如果有一個(gè)在Form1和Module1中都聲明了公用的Integer變量X,則把它們作為Module1.X
和Form1.X
來(lái)引用便得到正確值。也就是說(shuō)如果不同模塊中的全局變量使用同一名字,引用時(shí)就需要使用“模塊名.變量名”的形式來(lái)區(qū)分它們。第四十八頁(yè),共七十一頁(yè),2022年,8月28日每次調(diào)用過(guò)程時(shí)重新分配存貯單元,初始化變量過(guò)程調(diào)用結(jié)束后釋放存貯單元,變量?jī)?nèi)容自動(dòng)消失動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量第一次調(diào)用過(guò)程時(shí)分配存貯單元,初始化變量以后每次調(diào)用過(guò)程時(shí)不再重新分配存貯單元,變量保持上次調(diào)用結(jié)束時(shí)的值過(guò)程名前加Static,表示該過(guò)程內(nèi)的局部變量都是靜態(tài)變量靜態(tài)變量(由static定義)第四十九頁(yè),共七十一頁(yè),2022年,8月28日[Public|Private]Sub子過(guò)程名([形式參數(shù)列表])……EndSubSub過(guò)程和Function函數(shù)既可寫(xiě)在窗體模塊中也可寫(xiě)在標(biāo)準(zhǔn)模塊中,在定義時(shí)可選用關(guān)鍵字Private(局部)和Public(全局),來(lái)決定它們能被調(diào)用的范圍。8.5.3過(guò)程與函數(shù)的作用域第五十頁(yè),共七十一頁(yè),2022年,8月28日1、窗體/模塊級(jí)過(guò)程:
加Private關(guān)鍵字的過(guò)程,只能被定義的窗體或模塊中的過(guò)程調(diào)用。2、全局級(jí)過(guò)程:
加Public關(guān)鍵字(或缺?。┑倪^(guò)程,可供該應(yīng)用程序的所有窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用。按過(guò)程的作用范圍來(lái)劃分,過(guò)程可分為:
模塊級(jí)過(guò)程
全局級(jí)過(guò)程第五十一頁(yè),共七十一頁(yè),2022年,8月28日總結(jié)歸納過(guò)程的定義及作用域如下表第五十二頁(yè),共七十一頁(yè),2022年,8月28日后面的內(nèi)容請(qǐng)課后閱讀第五十三頁(yè),共七十一頁(yè),2022年,8月28日8.7過(guò)程的嵌套和遞歸調(diào)用8.7.1過(guò)程的嵌套
在程序中調(diào)用一子過(guò)程,而在子過(guò)程中又調(diào)用另外的子過(guò)程,這種程序結(jié)構(gòu)稱(chēng)為過(guò)程的嵌套。過(guò)程的嵌套調(diào)用執(zhí)行過(guò)程如下圖:第五十四頁(yè),共七十一頁(yè),2022年,8月28日8.7.2過(guò)程的遞歸調(diào)用用自身的結(jié)構(gòu)來(lái)描述自身,稱(chēng)遞歸。例如,對(duì)階乘的定義:VisualBasic允許在一個(gè)Sub子過(guò)程和Function過(guò)程的定義內(nèi)部調(diào)用自己,即遞歸Sub子過(guò)程和遞歸Function函數(shù)。例編求階乘fac(n)=n!的遞歸函數(shù)第五十五頁(yè),共七十一頁(yè),2022年,8月28日PrivateFunctionfac(nAsInteger)AsIntegerIfn=1Then fac=1Else fac=n*fac(n-1)EndIfEndFunctionPrivateSubForm_Click() Print“fac(4)=”;fac(4)EndSub程序的遞歸過(guò)程:第五十六頁(yè),共七十一頁(yè),2022年,8月28日說(shuō)明:遞歸處理一般用棧來(lái)實(shí)現(xiàn),分遞推和回歸兩個(gè)過(guò)程,如上圖所示。遞推過(guò)程:每調(diào)用一次自身,把當(dāng)前參數(shù)(形參、局部變量、返回地址等)壓入棧,直到遞歸結(jié)束條件成立?;貧w過(guò)程:然后從棧中彈出當(dāng)前參數(shù),直到??铡_f歸算法設(shè)計(jì)簡(jiǎn)單,解決同一問(wèn)題,使用遞歸算法消耗的機(jī)時(shí)和占據(jù)的內(nèi)存空間要比使用非遞歸算法大。使用遞歸算法必須要滿足以下的遞歸條件:(1)存在遞歸結(jié)束條件及結(jié)束時(shí)的值;(2)能用遞歸形式表示,且遞歸向終止條件發(fā)展。第五十七頁(yè),共七十一頁(yè),2022年,8月28日*8.8過(guò)程的可選參數(shù)與不定數(shù)量參數(shù)8.8.1可選參數(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)聲明。第五十八頁(yè),共七十一頁(yè),2022年,8月28日例可選參數(shù)的使用PrivateSubNadres(xAsString,OptionalyAsString)Text1.text=xText2.text=yEndSub
PrivateSubCommand1_Click()DimstrNameAsStringDimstrAddressAsStringstrName="張玉"strAddress="杭州市學(xué)院路85號(hào)"‘提供了兩個(gè)參數(shù)。
CallNadres(strName,strAddress)
EndSub第五十九頁(yè),共七十一頁(yè),2022年,8月28日說(shuō)明:1、
檢測(cè)可選參數(shù)是否被省略使用VB的內(nèi)部函數(shù)IsMissing(可選參數(shù)名)來(lái)測(cè)試過(guò)程被調(diào)用時(shí),某個(gè)參數(shù)是否被省略。如果可選參數(shù)被省略了,則返回True,未省略,返回False。注意:若可選參數(shù)是其它類(lèi)型,則IsMissing()總是返回False,不能起到檢測(cè)的作用。例:PrivateSubNadres(xAsString,OptionalyAsVariant)Text1.Text=xIfNotIsMissing(y)ThenText2.Text=yEndIfEndSub第六十頁(yè),共七十一頁(yè),2022年,8月28日2.指定可選參數(shù)的缺省值
也可以給可選參數(shù)指定缺省值。在下例中,如果未將可選參數(shù)傳遞到函數(shù)過(guò)程,則返回一個(gè)缺省值。SubNadres(xAsString,OptionalyAsString="杭州市學(xué)院路85號(hào)")Text1.text=xText2.text=yEndSub
PrivateSubCommand1_Click()DimstrNameAsStringstrName="張玉"
'未提供第二個(gè)參數(shù)。
CallNadres(strName)EndSub第六十一頁(yè),共七十一頁(yè),2022年,8月28日8.8.2使用不定數(shù)量的參數(shù)一般說(shuō)來(lái),過(guò)程調(diào)用中的參數(shù)個(gè)數(shù)應(yīng)等于過(guò)程說(shuō)明的參數(shù)個(gè)數(shù)。可用ParamArray
關(guān)鍵字指明,過(guò)程將接受任意個(gè)數(shù)的參數(shù)。
其定義形式如下:Sub過(guò)程名(ParamArray數(shù)組名())Function函數(shù)名(ParamArray數(shù)組名())As數(shù)據(jù)類(lèi)型第六十二頁(yè),共七十一頁(yè),2022年,8月28日8.9應(yīng)用舉例8.9.1查找問(wèn)題例
使用順序查找法,在一組數(shù)中查找某給定的數(shù)x算法設(shè)計(jì):設(shè)一組數(shù)據(jù)存放在數(shù)組a(1)---a(n)中,待查找的數(shù)據(jù)放在x中,把x與a數(shù)組中的元素從頭到尾一一進(jìn)行比較查找。用變量p表示a數(shù)組元素下標(biāo),p初值為1,使x與a(p)比較,如果x不等于a(p),則使p=p+1,不斷重復(fù)這個(gè)過(guò)程;一旦x等于a(p)則退出循環(huán);另外,如果p大于數(shù)組長(zhǎng)度,循環(huán)也應(yīng)該停止,則可由以下語(yǔ)句來(lái)實(shí)現(xiàn)它。ForP=1tonIFa(p)=xthenExitForNext第六十三頁(yè),共七十一頁(yè),2022年,8月28日
下面編寫(xiě)一查找函數(shù)Find(),若找到x則返回下標(biāo)值,找不到返回0PrivateFunctionFind(a()AsSingle,xAsSingle)AsIntegerDimn%,p%,m%m=Lbound(a)n=Ubound(a)ForP=mtonIFa(p)=xthenExitForNextIfp>nthenp=0Find=pEndFunction第六十四頁(yè),共七十一頁(yè),2022年,8月28日例
使用折半查找法,在一批有序數(shù)列中查找給定的數(shù)x。分析:設(shè)n個(gè)有序數(shù)(從小到大)存放在數(shù)組a(1)----a(n)中,要查找的數(shù)為x。用變量bot、top、mid分別表示查找數(shù)據(jù)范圍的底部(數(shù)組下界)、頂部(數(shù)組的上界)和中間,mid=(top+bot)/2,折半查找的算法如下:(1)x=a(mid),則已找到退出循環(huán),否則進(jìn)行下面的判斷;(2)x<a(mid),x必定落在bot和mid-1的范圍之內(nèi),即top=mid-1;(
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育產(chǎn)業(yè)扶持政策研究考核試卷
- 家具保養(yǎng)與維護(hù)技巧考核試卷
- 幕墻接縫處理技巧考核試卷
- 報(bào)紙的旅游行業(yè)動(dòng)態(tài)考核試卷
- 電子商務(wù)的個(gè)性化營(yíng)銷(xiāo)策略及案例研究
- 環(huán)境科技與智慧城市的融合發(fā)展
- 溝通藝術(shù)在珠寶銷(xiāo)售中的運(yùn)用與實(shí)踐
- 堅(jiān)果種植園農(nóng)產(chǎn)品電子商務(wù)平臺(tái)建設(shè)考核試卷
- 生產(chǎn)計(jì)劃執(zhí)行的持續(xù)改進(jìn)路徑探索
- 2025-2030年地震預(yù)警與監(jiān)測(cè)機(jī)器人行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 血透失衡綜合征的護(hù)理課件
- 2023年中國(guó)社會(huì)科學(xué)評(píng)價(jià)研究院第一批專(zhuān)業(yè)技術(shù)人員招聘2人筆試參考題庫(kù)(共500題)答案詳解版
- CBCC中國(guó)建筑色卡色
- 建設(shè)工程項(xiàng)目法律風(fēng)險(xiǎn)防控培訓(xùn)稿PPT講座
- GB/T 4745-2012紡織品防水性能的檢測(cè)和評(píng)價(jià)沾水法
- 軟件需求調(diào)研表-修改版
- 山東省中考物理總復(fù)習(xí) 八上 第1講 機(jī)械運(yùn)動(dòng)
- 北京理工大學(xué)應(yīng)用光學(xué)課件(大全)李林
- 國(guó)家綜合性消防救援隊(duì)伍消防員管理規(guī)定
- 河南省三門(mén)峽市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 五年級(jí)上冊(cè)數(shù)學(xué)習(xí)題課件 簡(jiǎn)便計(jì)算專(zhuān)項(xiàng)整理 蘇教版 共21張
評(píng)論
0/150
提交評(píng)論