![子過程和函數(shù)過程_第1頁](http://file4.renrendoc.com/view/f1d5e76fcd84f9e874a9bb79b3713560/f1d5e76fcd84f9e874a9bb79b37135601.gif)
![子過程和函數(shù)過程_第2頁](http://file4.renrendoc.com/view/f1d5e76fcd84f9e874a9bb79b3713560/f1d5e76fcd84f9e874a9bb79b37135602.gif)
![子過程和函數(shù)過程_第3頁](http://file4.renrendoc.com/view/f1d5e76fcd84f9e874a9bb79b3713560/f1d5e76fcd84f9e874a9bb79b37135603.gif)
![子過程和函數(shù)過程_第4頁](http://file4.renrendoc.com/view/f1d5e76fcd84f9e874a9bb79b3713560/f1d5e76fcd84f9e874a9bb79b37135604.gif)
![子過程和函數(shù)過程_第5頁](http://file4.renrendoc.com/view/f1d5e76fcd84f9e874a9bb79b3713560/f1d5e76fcd84f9e874a9bb79b37135605.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
子過程和函數(shù)過程1第一頁,共八十六頁,編輯于2023年,星期二本章主要介紹:定義Sub過程定義Function函數(shù)過程調(diào)用Sub過程或Function函數(shù)過程調(diào)用事件過程變量的存儲類別和作用域。編寫過程,可以實現(xiàn)代碼重復(fù)使用。2第二頁,共八十六頁,編輯于2023年,星期二8.1.1什么是過程過程是編寫程序的功能模塊使用過程主要有以下兩方面的原因:1.可以把復(fù)雜的問題簡單化任務(wù)分解為子任務(wù),子任務(wù)用過程實現(xiàn)使程序結(jié)構(gòu)清晰、易讀,也便于調(diào)試和維護。2.可以實現(xiàn)代碼重復(fù)使用可以避免重復(fù)編寫的煩瑣可以減少出錯。8.1概述3第三頁,共八十六頁,編輯于2023年,星期二8.1.2
過程分類與調(diào)用流程VB中的過程分成兩大類:事件過程:由對象的某個事件驅(qū)動執(zhí)行如Click事件過程、Load事件過程等通用過程由用戶自已定義的完成某一功能的過程。通用過程不屬于任一對象,不由事件驅(qū)動使用專用的調(diào)用語句來執(zhí)行它4第四頁,共八十六頁,編輯于2023年,星期二通用過程又分兩類:Sub過程(子過程、子程序)往往用于處理不需要有返回值的一些基本任務(wù)如顯示矩陣。Function函數(shù)過程:可作為函數(shù)使用,它一般應(yīng)有一個返回值如求階乘。5第五頁,共八十六頁,編輯于2023年,星期二調(diào)用流程如圖:VB的應(yīng)用程序就是由若干個過程構(gòu)成的。6第六頁,共八十六頁,編輯于2023年,星期二【例8-1】設(shè)計程序,其作用是根據(jù)姓名查電話號碼。輸入姓名后,單擊“確定”或按回車鍵,使姓名與內(nèi)部儲存的一批姓名核對,若存在,則顯示“歡迎查詢”內(nèi)并使窗體只顯示標(biāo)簽,且文字為姓名和對應(yīng)的電話號碼。最多允許輸入3遍??丶?個標(biāo)簽、1個文本框1個“確定”命令按鈕8.2查詢電話號碼7第七頁,共八十六頁,編輯于2023年,星期二過程:Form_Load事件:儲存一批姓名和電話號碼等Command1_Click事件:核對姓名,顯示提示Text1_KeyPress事件:核對姓名,顯示提示CheckName函數(shù)過程:判斷此人是否存在,得下標(biāo)/-1。姓名和電話號碼為模塊級變量、N為靜態(tài)變量。8第八頁,共八十六頁,編輯于2023年,星期二DimName1,Phone'聲明Name1,Phone為模塊級Variant類型變量
PrivateSubCommand1_Click()
'核對姓名,顯示提示
StaticNAsInteger'聲明N為靜態(tài)整型變量
DimTAsInteger
T=CheckName(Text1.Text)'以姓名為參數(shù),調(diào)用函數(shù)CheckBook
IfT<>-1Then
MsgBox"歡迎查詢!",,"提示"
Text1.Visible=False:Command1.Visible=False
Label1.Caption="姓名:"&Text1.Text&Chr(13)&"電話:"&Phone(T)
Label1.Left=(Form1.ScaleWidth-Label1.Width)/2'讓標(biāo)簽在中間9第九頁,共八十六頁,編輯于2023年,星期二Else
N=N+1'核對次數(shù)加1
IfN<3Then
MsgBox"你輸錯了,這是第"&N&"次錯,請重輸!",,"提示"
Text1.Text="":Text1.SetFocus
Else
MsgBox"你已經(jīng)輸錯3次了!再見!",,"提示"
End
EndIf
EndIf
EndSub10第十頁,共八十六頁,編輯于2023年,星期二
PrivateSubForm_Load()'初始化數(shù)組、設(shè)置屬性
Label1.AutoSize=True
Text1.Text="":Label1.Caption="姓名:":Command1.Caption="確定"
Name1=Array("張小紅","李小芳","王小華","王力","李季","黃大海")
Phone=Array(8820123,8882011,7812321,2444522,1243211,3434555)
EndSub
11第十一頁,共八十六頁,編輯于2023年,星期二
FunctionCheckName(NaAsString)AsInteger
‘函數(shù)過程,返回位置
DimiAsInteger
CheckName=-1
Fori=LBound(Name1)ToUBound(Name1)’線性查找法
IfName1(i)=NaThenCheckName=i:ExitFor
NextIEndFunctionPrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13ThenCommand1_Click
‘遇回車時,調(diào)用事件過程
EndSub12第十二頁,共八十六頁,編輯于2023年,星期二VB中的模塊屬于工程資源它由過程或聲明構(gòu)成,以獨立的文件管理。工程中包含窗體、類和標(biāo)準(zhǔn)模塊文件本節(jié)介紹窗體模塊標(biāo)準(zhǔn)模塊。8.3窗體模塊和標(biāo)準(zhǔn)模塊13第十三頁,共八十六頁,編輯于2023年,星期二8.3.1
窗體模塊窗體模塊是大多數(shù)VB應(yīng)用程序的基礎(chǔ)窗體模塊與窗體對應(yīng),存放窗體上所有信息:窗體及窗體上各控件界面信息、屬性、事件過程通用過程變量和常量的聲明等。窗體模塊文件的擴展名為.Frm一個應(yīng)用程序可以創(chuàng)建多個窗體模塊14第十四頁,共八十六頁,編輯于2023年,星期二8.3.2
標(biāo)準(zhǔn)模塊和SubMain過程標(biāo)準(zhǔn)代碼模塊一般存放與特定窗體或控件無關(guān)的通用過程、全局變量的聲明等如求階乘一個過程要被多個不同對象或模塊調(diào)用時,那么該過程一般可放在標(biāo)準(zhǔn)模塊中。一個應(yīng)用程序可建立多個標(biāo)準(zhǔn)模塊建立標(biāo)準(zhǔn)模塊的方法是:使用“工程”菜單的“添加模塊”命令項。15第十五頁,共八十六頁,編輯于2023年,星期二應(yīng)用程序啟動時,可先裝載窗體,也可先運行
SubMain過程SubMain是過程名為Main的特殊過程SubMain過程必須放在標(biāo)準(zhǔn)模塊中才可作為啟動對象。啟動對象可以在工程屬性中設(shè)置16第十六頁,共八十六頁,編輯于2023年,星期二8.4.1定義Sub過程Sub過程一般指通用子過程,可在程序中調(diào)用執(zhí)行,執(zhí)行完畢后無返回值。它可以定義在窗體模塊的通用對象中,也可以定義在標(biāo)準(zhǔn)模塊中。格式:
Sub過程名([參數(shù)列表])
[語句塊]
EndSub8.4Sub過程17第十七頁,共八十六頁,編輯于2023年,星期二1.關(guān)于格式過程名的命名方式與變量名命名一致。參數(shù)列表為調(diào)用時傳遞給Sub過程的參數(shù),用逗號間隔。Sub過程也可以沒有參數(shù),但括號不可省。參數(shù)的常用語法是:參數(shù)名[As類型說明]定義時的參數(shù),又稱為形式參數(shù),簡稱形參。Sub和EndSub必須成對出現(xiàn)18第十八頁,共八十六頁,編輯于2023年,星期二2.關(guān)于語句塊語句塊即為過程體,與事件過程的代碼編寫一樣包含變量聲明和可執(zhí)行的語句、方法等可以由順序、分支、循環(huán)三種結(jié)構(gòu)綜合而成。語句塊中可直接使用參數(shù)說明:語句塊中不能重復(fù)聲明形式參數(shù)。Sub過程名([參數(shù)列表])
[語句塊]
EndSub19第十九頁,共八十六頁,編輯于2023年,星期二3.過程定義步驟打開代碼窗口,對象框中選“通用”,然后輸入過程首行并回車,VB自動顯示EndSub然后再輸入過程體就可以了。如:定義過程Hello:實現(xiàn)以姓名為參數(shù)顯示“XXX你好!”(XXX具體內(nèi)容由參數(shù)決定)Sub過程名([參數(shù)列表])
[語句塊]
EndSub20第二十頁,共八十六頁,編輯于2023年,星期二完整代碼應(yīng)為:
SubHello(XXXAsString)
MsgBoxXXX&"你好!"
EndSub以上過程的過程名為Hello形式參數(shù)為XXX且是字符串型過程體只用了一句MsgBox,并同時使用了參數(shù)XXX。21第二十一頁,共八十六頁,編輯于2023年,星期二程序中使用調(diào)用語句可調(diào)用Sub過程過程運行完畢或跳出過程運行后,返回到調(diào)用處。1.調(diào)用Sub過程的方法過程定義在當(dāng)前模塊或標(biāo)準(zhǔn)模塊中使用以下兩種格式之一:
格式一:過程名[實參數(shù)列表]
格式二:Call過程名[(實參數(shù)列表)]如Hello過程,可以使用:
Hello"王小紅"或CallHello("王小紅")22第二十二頁,共八十六頁,編輯于2023年,星期二過程定義在窗體模塊中而調(diào)用語句在其它模塊中采用以下兩種格式之一:
格式一:窗體名.過程名[實參數(shù)列表]
格式二:Call窗體名.過程名[(實參數(shù)列表)]調(diào)用Sub過程的方法也可以用來調(diào)用事件過程,如例4-10,可用:
PrivateSubCheck2_Click()
Check1_Click'這時調(diào)用的過程名即為Check1_Click
EndSub23第二十三頁,共八十六頁,編輯于2023年,星期二2.關(guān)于過程調(diào)用時的參數(shù)過程調(diào)用時的參數(shù)稱為實際參數(shù),簡稱實參。它可以變量、常量或表達式。實參與形參的個數(shù)應(yīng)相同、類型應(yīng)一致若實參是表達式,則先計算值,再將值送給對應(yīng)的形參。實參和形參可以使用同名變量。如果定義的過程沒有形參,則調(diào)用時就沒有實參。24第二十四頁,共八十六頁,編輯于2023年,星期二使用Call調(diào)用時,實參部分要加上括號不使用Call關(guān)鍵字,直接用過程名調(diào)用時,參數(shù)部分不能加上括號,但過程名和第一個參數(shù)之間要有空格。例如,編程:要求輸入姓名,調(diào)用Hello過程,則程序如下:
PrivateSubCommand1_Click()
DimSAsString
S=InputBox("請輸入姓名")
HelloS
EndSub25第二十五頁,共八十六頁,編輯于2023年,星期二【例8-2】分析以下程序:
SubA(nAsInteger)
DimiAsInteger
Fori=1Ton:Printi;:Next
CallB
EndSub
SubB()
Print"BBBBBB"
EndSub
PrivateSubCommand1_Click()
CallA(9)
B
'直接使用過程名調(diào)用過程B()
EndSub26第二十六頁,共八十六頁,編輯于2023年,星期二8.4.2
調(diào)用Sub過程【例8-3】設(shè)計一個如圖所示的程序,其作用是顯示字符圖案。顯示的字符和行數(shù)由輸入決定,形狀可以是正三角形或倒三角形。編寫通用過程Print_triangle,輸出三角形圖案。顯示的字符S、行數(shù)Line、及作為正或倒的三角形標(biāo)志Flag均作為參數(shù)Print_triangle供兩個命令按鈕調(diào)用兩個命令按鈕的Click事件:輸入1個字符和行數(shù),調(diào)用
Print_triangle過程。8.4Sub過程27第二十七頁,共八十六頁,編輯于2023年,星期二8.4.2調(diào)用Sub過程—字符三角形SubPrint_triangle(SAsString,LineAsInteger,FlagAsInteger)'通用過程
DimAAsInteger,BAsInteger,iAsInteger,jAsInteger
ClsIfFlag=-1ThenA=Line:B=1ElseA=1:B=Line
Fori=AToBStepFlag'正:從小到大循環(huán),倒:從大到小循環(huán)
PrintTab(Line+10-i);
Forj=1To2*i–1:PrintS;:Nextj
Nexti
EndSub28第二十八頁,共八十六頁,編輯于2023年,星期二
PrivateSubCommand1_Click()
DimChAsString*1,LineAsInteger'Ch只容納1個字符
Ch=InputBox("請輸入一個要顯示的字符")
Line=Val(InputBox("請輸入顯示的行數(shù)"))
Print_triangleCh,Line,1'以標(biāo)志1調(diào)用過程
EndSub
PrivateSubCommand2_Click()
DimChAsString*1,LineAsInteger
Ch=InputBox("請輸入一個要顯示的字符")
Line=Val(InputBox("請輸入顯示的行數(shù)"))
Print_triangleCh,Line,-1'以標(biāo)志-1調(diào)用過程
EndSub29第二十九頁,共八十六頁,編輯于2023年,星期二8.4.3
ExitSub語句使用ExitSub語句可以中途結(jié)束子過程的運行。程序不再執(zhí)行ExitSub到EndSub之間的代碼,而是直接返回到調(diào)用處。ExitSub語句一般往往與If語句合用,如:修改例8-3中的Print_triangle過程,當(dāng)Line參數(shù)小于等于0,F(xiàn)lag參數(shù)不等于±1時,顯示“參數(shù)錯誤”并退出過程。30第三十頁,共八十六頁,編輯于2023年,星期二則可以在Print_triangle過程的Cls前增加一句:
IfLine<=0OrAbs(Flag)<>1ThenMsgbox"參數(shù)錯誤":ExitSubExitSub也可以用在事件過程特別注意:在過程中途退出過程不能使用EndSub。31第三十一頁,共八十六頁,編輯于2023年,星期二8.5.1
定義Function函數(shù)過程Function函數(shù)過程執(zhí)行完畢后有一個返回值。函數(shù)過程定義后,可像系統(tǒng)函數(shù)一樣使用。函數(shù)可定義在窗體模塊的通用對象中或標(biāo)準(zhǔn)模塊中。格式:
Function函數(shù)名([參數(shù)列表])[As類型說明]
[函數(shù)體]
EndFunction8.5Function函數(shù)過程32第三十二頁,共八十六頁,編輯于2023年,星期二1.關(guān)于格式函數(shù)名、參數(shù)列表的要求與Sub過程的過程名、參數(shù)相同。Function必須在EndFunction之前出現(xiàn),且必須成對Function語句中的類型說明,是返回值的類型。如編一個判斷整型參數(shù)n是否為素數(shù)的函數(shù),首行可寫為:
FunctionPrime(nAsInteger)AsBoolean33第三十三頁,共八十六頁,編輯于2023年,星期二8.5.1定義Function函數(shù)過程2.關(guān)于函數(shù)體函數(shù)體是一系列用于完成某一功能的代碼包含變量聲明和可執(zhí)行語句可由順序、分支、循環(huán)三種結(jié)構(gòu)合成。一般格式:
[語句塊]
函數(shù)名=表達式
[語句塊]一般,函數(shù)體中應(yīng)有一句“函數(shù)名=表達式”,表示該表達式的值就作為函數(shù)的返回值該表達式的類型應(yīng)該與函數(shù)的類型說明一致34第三十四頁,共八十六頁,編輯于2023年,星期二3.函數(shù)定義步驟同編寫過程一樣,在“通用”對象代碼窗口輸入函數(shù)首行。如定義函數(shù)過程Max,實現(xiàn)求三個數(shù)的最大值:
FunctionMax(aAsInteger,bAsInteger,cAsInteger)AsInteger
Max=a
Ifb>Max
ThenMax=b
Ifc>Max
ThenMax=c
EndFunction35第三十五頁,共八十六頁,編輯于2023年,星期二以上函數(shù)過程的過程名為Hello形式參數(shù)a、b、c為整型函數(shù)體中多次使用了函數(shù)名Max,并使用了參數(shù)特別說明:不能寫成Max(a,b,c)=a。
36第三十六頁,共八十六頁,編輯于2023年,星期二8.5.2調(diào)用Function函數(shù)過程函數(shù)調(diào)用方式如同調(diào)用VB內(nèi)部函數(shù)調(diào)用格式:
函數(shù)過程名[(實參數(shù)列表)]調(diào)用函數(shù)往往在可以使用表達式的代碼中出現(xiàn),只要類型相同就可以了。如對Max函數(shù)過程,可以使用:
A=Max(1,43,5):PrintMax(Max(1,3,21),56,4)如果函數(shù)定義在窗體模塊中而調(diào)用語句在其它模塊中,則調(diào)用時應(yīng)在函數(shù)名前加上所屬的窗體名。實參用法和要求,與子過程調(diào)用相同。37第三十七頁,共八十六頁,編輯于2023年,星期二【例8-4】編程計算,在本文框輸出。要求計算n!使用函數(shù)過程Factorial(n)實現(xiàn)。控件:2個文本框、3個標(biāo)簽
1個命令按鈕。過程:通用函數(shù)過程Factorial(n):求階乘Command1_Click事件:求屬性:大部分屬性在Form_Load中設(shè)置命令按鈕為圖形按鈕,更改Style、Caption和Picture屬性38第三十八頁,共八十六頁,編輯于2023年,星期二FunctionFactorial(NAsInteger)AsDouble'通用函數(shù)過程,求n!
DimiAsInteger,TAsDouble
T=1
Fori=1ToN:T=T*i:Nexti
Factorial=TEndFunctionPrivateSubCommand1_Click()'計算結(jié)果,要求m≥n
DimMAsInteger,NAsInteger
M=Val(Text1.Text):N=Val(Text2.Text)
IfM<NThen'當(dāng)m<n時,給出提示,清除數(shù)據(jù),跳出過程39第三十九頁,共八十六頁,編輯于2023年,星期二
MsgBox"m必須大于等于n。",,"提示“
Text1.Text="":Text2.Text="":Text1.SetFocusExitSubEndIfLabel3.Caption="答案:"&Factorial(M)/(Factorial(N)*Factorial(M-N))
EndSubPrivateSubForm_Load()
‘初始化控件屬性
Label1.Caption="m=":Label2.Caption="n=":Label3.Caption="“Text1.Text="":Text2.Text="“EndSub40第四十頁,共八十六頁,編輯于2023年,星期二8.5.3ExitFunction語句使用ExitFunction語句跳出Function函數(shù)過程。ExitFunction語句一般與If語句合用,即在滿足某種條件時退出該函數(shù)過程,返回調(diào)用處。如修改例8-4中的Factorial函數(shù)過程,當(dāng)N<0時顯示“參數(shù)錯誤”并退出Factorial函數(shù)過程。則可以增加:IfN<0ThenFactorial=1:MsgBox"參數(shù)錯誤":ExitFunction注意:在函數(shù)過程中途退出不能使用EndFunction。41第四十一頁,共八十六頁,編輯于2023年,星期二形式參數(shù)(形參)是過程定義時的參數(shù)實際參數(shù)(實參)是過程調(diào)用時的參數(shù)過程調(diào)用時,實參向形參傳遞數(shù)據(jù)傳遞的方法分為:“引用傳遞”(“引用調(diào)用”)“按值傳遞”(“按值調(diào)用”)(這里的過程是統(tǒng)指子過程和函數(shù)過程)8.6引用調(diào)用和按值調(diào)用42第四十二頁,共八十六頁,編輯于2023年,星期二8.6.1
引用調(diào)用引用調(diào)用:形參變量與實參變量共享一個內(nèi)存單元。此時,過程中對形參的修改,影響實參變量即可實現(xiàn)把過程中對形參修改的結(jié)果帶回調(diào)用過程。前面格式中,所有參數(shù)都采用引用調(diào)用,除非實參是表達式。單擊Command1后,N1和N為同一個內(nèi)存單元,所以N1的值就變成8。最終窗體顯示8。43第四十三頁,共八十六頁,編輯于2023年,星期二引用調(diào)用的形參說明,可使用格式:ByRaf參數(shù)名[As類型說明]缺省ByRaf表示引用調(diào)用。如:
SubAbc1(NAsInteger)
N=N+5
EndSub
PrivateSubCommand1_Click()
DimN1AsInteger
N1=3:CallAbc1(n1):PrintN1
EndSub44第四十四頁,共八十六頁,編輯于2023年,星期二8.6.2
按值調(diào)用按值調(diào)用時,實參值被復(fù)制到形式參數(shù)中如果實參為變量,相當(dāng)于兩者用了不同的存儲單元對形參的操作不會影響實參的內(nèi)容。按值調(diào)用的形式參數(shù)的說明,使用格式:ByVal
參數(shù)名
[As類型說明]若實參是表達式,則一律使用按值調(diào)用單擊Command1后,N1和N實際上
是不同的內(nèi)存單元,調(diào)用時只將
N1的值送入形參N中,最終顯示3。45第四十五頁,共八十六頁,編輯于2023年,星期二如:
SubAbc2(ByValNAsInteger)
N=N+5
EndSub
PrivateSubCommand1_Click()
DimN1AsInteger
N1=3:CallAbc2(N1)
PrintN1
EndSub
46第四十六頁,共八十六頁,編輯于2023年,星期二【例8-5】編寫求一元二次方程實數(shù)解的過程并調(diào)用它。由于方程有兩個解。而函數(shù)返回一個值。解決方法:編寫Sub過程Root,X1和X2為引用調(diào)用,A、B、C為按值調(diào)用。
Sub
Root(ByValAAsSingle,ByValBAsSingle,_
ByValCAsSingle,X1AsSingle,X2AsSingle)
DimDAsSingle
D=B*B-4*A*C
IfA=0ThenMsgBox"不是一元二次方程!":ExitSub
IfD<0ThenMsgBox"方程無實數(shù)解!":ExitSub
X1=(-B+Sqr(D))/(2*A):X2=(-B-Sqr(D))/(2*A)
EndSub47第四十七頁,共八十六頁,編輯于2023年,星期二PrivateSubCommand1_Click()
DimAAsSingle,BAsSingle,CAsSingle,X1AsSingle,X2AsSingle
A=3:B=9:C=5
RootA,B,C,X1,X2
‘A、B、C按值,X1和X2引用調(diào)用
PrintX1,X2EndSub程序調(diào)用前,X1和X2沒有賦過值,通過
引用調(diào)用,使它們得到了方程的實數(shù)解。48第四十八頁,共八十六頁,編輯于2023年,星期二8.6.3
傳遞數(shù)組傳遞數(shù)組,形式參數(shù)的格式:
參數(shù)名()[As類型說明]數(shù)組不能按值調(diào)用,只能引用調(diào)用【例8-6】隨機產(chǎn)生兩個3×4的矩陣A和B,矩陣元素值為1~50的整數(shù)。求兩個矩陣的和C。并輸出矩陣A、B和C。運行如圖。矩陣加法使元素C(i,j)=A(i,j)+B(i,j)49第四十九頁,共八十六頁,編輯于2023年,星期二編寫過程:通用過程PrintM:實現(xiàn)矩陣輸出通用過程CreateM:產(chǎn)生矩陣事件過程Form_Load:初始化隨機數(shù)種事件過程Command1_Click:調(diào)用通用過程并實現(xiàn)題目50第五十頁,共八十六頁,編輯于2023年,星期二8.6.3
傳遞數(shù)組--矩陣加法SubCreateM(A()AsInteger)
'創(chuàng)建
Fori=1ToUBound(A,1)Forj=1ToUBound(A,2)A(i,j)=Int(Rnd*50)+1NextjNextiEndSub51第五十一頁,共八十六頁,編輯于2023年,星期二SubPrintM(A()AsInteger)'輸出
Fori=1ToUBound(A,1)Forj=1ToUBound(A,2)PrintA(i,j),NextjPrintNextiEndSub
說明:UBound函數(shù)的第2個參數(shù)指數(shù)組的維,當(dāng)該數(shù)為1時,指它的第1維上界,該數(shù)為2時,指它的第2維上界。52第五十二頁,共八十六頁,編輯于2023年,星期二PrivateSubCommand1_Click()
DimA(3,4)AsInteger,B(3,4)AsInteger
DimC(3,4)AsInteger,iAsInteger,jAsInteger
CreateMA
‘創(chuàng)建矩陣A
CreateMB
’創(chuàng)建矩陣B
Fori=1To3
‘矩陣加法
Forj=1To4
C(i,j)=A(i,j)+B(i,j)
Nextj
NextiCls
53第五十三頁,共八十六頁,編輯于2023年,星期二
PrintTab(22);"A矩陣":PrintMA'輸出A
PrintTab(22);"B矩陣":PrintMB
'輸出B
PrintTab(22);"C矩陣":PrintMC
'輸出CEndSubPrivateSubForm_Load()
RandomizeEndSub
54第五十四頁,共八十六頁,編輯于2023年,星期二8.6.4可選參數(shù)可選參數(shù)表示調(diào)用時該參數(shù)可選(可不寫)定義可選參數(shù)是在形參的前加Optional關(guān)鍵字若該形參后還有參數(shù),則后面必須都定義為可選。IsMissing函數(shù)判斷是否提供可選參
數(shù),若未提供,則值為True。這時兩個過程調(diào)用語句可分別改為:
Print_triangleCh,Line
'2個參數(shù)
Print_triangleCh,Line,-1
'3個參數(shù)。55第五十五頁,共八十六頁,編輯于2023年,星期二如例8-3的Print_triangle過程,可將第3個參數(shù)Flag設(shè)置為可選:若調(diào)用時不用Flag表示輸出正三角形:
SubPrint_triangle(SAsString,LineAsInteger,OptionalFlagAsInteger)
DimAAsInteger,BAsInteger,CAsInteger,iAsInteger,jAsInteger
Cls:A=1:B=Line:C=1
IfNotIsMissing(Flag)Then
IfFlag<0ThenA=Line:B=1:C=-1
EndIf Fori=AToBStepC
PrintTab(Line+10-i);
Forj=1To2*i–1:PrintS;:Nextj
NextiEndSub56第五十六頁,共八十六頁,編輯于2023年,星期二8.6.5可變參數(shù)使用可變參數(shù)可使參數(shù)個數(shù)不受限制可變參數(shù)其實是一種數(shù)組表示法可變參數(shù)在形參前加上ParamArray關(guān)鍵字。如將Max函數(shù)定義為使用可變參數(shù)的函數(shù):57第五十七頁,共八十六頁,編輯于2023年,星期二FunctionMax(ParamArrayA())AsInteger'使用可變參數(shù)
DimiAsInteger,MAsInteger
M=A(1)
Fori=LBound(A)ToUBound(A)
IfA(i)>MThenM=A(i)
Nexti
Max=M
EndFunction
PrivateSubCommand1_Click()'調(diào)用時,參數(shù)個數(shù)可以不限
PrintMax(6,4,3,2,1)'使用了5個參數(shù)
PrintMax(10,34,5,56,2,55,67,83,9)'使用了9個參數(shù)
EndSub58第五十八頁,共八十六頁,編輯于2023年,星期二8.6.6對象參數(shù)過程可以使用對象如在7.8節(jié)的“選擇聯(lián)系人”例子中,List1_KeyDown事件過程和List2_KeyDown事件過程的代碼除了對象名不同外,其它是可以相同,因此可用參數(shù)為對象的通用過程Delete:59第五十九頁,共八十六頁,編輯于2023年,星期二
SubDelete(aAsObject,keyCodeAsInteger)'將a定義為對象變量
DimiAsInteger
IfkeyCode=vbKeyDeleteThen'按下了Delete鍵,刪除已選項目
Fori=a.ListCount-1To0Step-1
Ifa.Selected(i)=TrueThena.RemoveItemi
Next
EndIfEndSubPrivateSubList1_KeyDown(keyCodeAsInteger,ShiftAsInteger)
DeleteList1,keyCodeEndSubPrivateSubList2_KeyDown(keyCodeAsInteger,ShiftAsInteger)
DeleteList2,keyCodeEndSub60第六十頁,共八十六頁,編輯于2023年,星期二變量是存放數(shù)據(jù)的單元,其中的數(shù)據(jù)隨著程序的運行而變化。過程中使用Dim語句聲明的變量,將隨著過程的結(jié)束而消失,其中的儲存的數(shù)據(jù)也就不再存在。其實,程序還可以使用多種存儲類別的變量:可以整個應(yīng)用程序都可使用可以在定義的過程中繼續(xù)使用…8.7存儲類和作用域61第六十一頁,共八十六頁,編輯于2023年,星期二8.7.1
存儲類別根據(jù)存儲類別,變量分成靜態(tài)變量和動態(tài)變量。1.動態(tài)變量指程序運行進入變量所在過程時,才給變量分配內(nèi)存空間,退出該過程時,變量所占用內(nèi)存空間自動釋放,其值消失,變量不再存在。在過程中使用Dim語句聲明的變量屬于動態(tài)變量。62第六十二頁,共八十六頁,編輯于2023年,星期二如有以下過程:
PrivateSubCommand1_Click()
DimAAsInteger
A=A+1:PrintA
EndSub窗體啟動后,無論用戶單擊Command1多少次,
顯示的數(shù)據(jù)總是1。63第六十三頁,共八十六頁,編輯于2023年,星期二8.7.1
存儲類別2.靜態(tài)變量靜態(tài)變量指程序運行中雖然退出變量所在的過程,但變量所占用的空間沒有釋放,值仍保留,若下次再進入該過程,原值仍可使用。使用Static語句在過程中聲明的變量屬于靜態(tài)變量。Static變量只能在過程中聲明。格式:
Static變量名As類型說明64第六十四頁,共八十六頁,編輯于2023年,星期二例如以下事件過程,單擊顯示:
PrivateSubCommand1_Click()
DimAAsInteger'A為動態(tài)變量
StaticBAsInteger'B為靜態(tài)變量
A=A+1:B=B+1:PrintA,B
EndSub111213…65第六十五頁,共八十六頁,編輯于2023年,星期二8.7.2
作用域作用域指變量或符號常量在程序哪個范圍中有效。作用域分成:局部的、模塊級的和全局的三類。1.局部變量/局部符號常量局部變量是指在過程中聲明的變量它在過程內(nèi)采用Dim語句或Static語句聲明局部符號常量是指在過程中定義的符號常量它在過程內(nèi)采用Const語句定義。它們只能在該過程中有效。66第六十六頁,共八十六頁,編輯于2023年,星期二其它過程中出現(xiàn)同名量,則代表著另一個量。如:
PrivateSubCommand1_Click()'事件過程Command1
DimXAsInteger'X變量僅在該過程中有效
ConstPI=3.1415926'符號常量PI僅在該過程中有效
X=3:Print"有效的值";X*PI
EndSub
PrivateSubCommand2_Click()'事件過程Command2
PrintX,PI'無效
EndSub若用了OptionExplicit語句,單擊Command2時還會出錯67第六十七頁,共八十六頁,編輯于2023年,星期二2.模塊級變量/模塊級符號常量模塊級變量或符號常量可在一個模塊的各過程中使用窗體模塊級變量/常量是在通用對象的聲明部分用Dim或Private語句聲明變量,或用Const定義符號常量。如:
PrivateXAsInteger'也可以使用Dim,將x聲明為模塊級變量
PrivateSubForm_Load()
X=5
EndSub
68第六十八頁,共八十六頁,編輯于2023年,星期二PrivateSubCmd1_Click()
X=X+1
Print"過程1中的X=";X
EndSub
PrivateSubCmd2_Click()
X=X+1
Print"過程2中的X=";X
EndSub按序單擊Cmd1和Cmd2,顯示:
過程1中的X=6
過程2中的X=7
只要應(yīng)用程序不停止運行,即使
窗體卸下后再次裝載,原值仍可用69第六十九頁,共八十六頁,編輯于2023年,星期二8.7.2
作用域3.全局變量/全局符號常量全局變量在整個應(yīng)用程序中有效全局變量在窗體通用對象或標(biāo)準(zhǔn)模塊中Public聲明:Public變量名As類型說明定義全局符號常量的格式為:PublicConst符號常量名=常量表達式70第七十頁,共八十六頁,編輯于2023年,星期二說明:過程中不能用Public和Private聲明變量和定義符號常量;窗體模塊中不能用Public定義全局符號常量,也不能聲明數(shù)組、定長字符串和用戶自定義類型,它們只能在標(biāo)準(zhǔn)模塊中用。71第七十一頁,共八十六頁,編輯于2023年,星期二標(biāo)準(zhǔn)模塊中聲明的全局變量,在其它模塊中可直接使用窗體模塊聲明的全局變量,其它模塊采用格式:
窗體名.變量名
如:Form1.X=100與模塊級變量一樣,全局變量在靜態(tài)存儲區(qū)分配空間。72第七十二頁,共八十六頁,編輯于2023年,星期二8.7.3生存期生存期是指變量的存在時間只有動態(tài)變量,生存只在過程的一次執(zhí)行中靜態(tài)變量、模塊級變量和全局變量的生存期將持續(xù)到整個應(yīng)用程序運行結(jié)束。73第七十三頁,共八十六頁,編輯于2023年,星期二8.7.4
過程的作用域和局部變量存儲類別定義過程時,可加上作用域關(guān)鍵字Public或Private,可加存儲類別的關(guān)鍵字Static。過程定義首行格式可以寫成:[Private|Public][Static]Sub過程名[(參數(shù)列表)][Private|Public][Static]Function函數(shù)名[(參數(shù)列表)]As類型說明Public:表示所有過程都可以調(diào)用該過程定義在窗體模塊中,其他模塊調(diào)用時使用:窗體名.過程名如果定義在標(biāo)準(zhǔn)模塊或本模塊中,可以直接使用。缺省Public,也沒有Private關(guān)鍵字,則等同Public的特性。74第七十四頁,共八十六頁,編輯于2023年,星期二Private:表示該過程只能在本模塊中可以調(diào)用Static:表示過程中所有局部變量都作為靜態(tài)變量。如:
StaticSubBb()
DimAAsInteger
A=A+1
MsgBox"Bb"&A
EndSub若Cmd1的Click中有CallBb語句,
則單擊Cmd1將顯示:Bb1、Bb2、Bb3……75第七十五頁,共八十六頁,編輯于2023年,星期二8.8.1
用遞歸實現(xiàn)求階乘遞歸調(diào)用是指在一個過程內(nèi)直接或間接調(diào)用自己。【例8-7】利用遞歸調(diào)用編寫的求n!的函數(shù)Fact(n)。求n!時,n!=n×(n-1)!,(n-1)!=(n-1)×(n-2)!,……,若知道1!=1或0!=1,則可回推可以算出n!。在求n!時要調(diào)用Fact(n-1),產(chǎn)生了遞歸調(diào)用。
FunctionFact(nAsInteger)AsDouble
Ifn=0Orn=1Then
Fact=1
Else
Fact=n*Fact(n-1)
EndIf
EndFunction8.8程序舉例76第七十六頁,共八十六頁,編輯于2023年,星期二編寫遞歸過程,需要兩個必須的條件:形成遞歸式。如:Fact=n*Fact(n-1)必須有一個出口。如:Ifn=0Orn=1ThenFact=177第七十七頁,共八十六頁,編輯于2023年,星期二8.8.2
冒泡分類法【例8-8】
實現(xiàn)30個數(shù)據(jù)的排序輸出。要求使用冒泡分類法。其中數(shù)據(jù)排序、產(chǎn)生和輸出分別用通用過程實現(xiàn)。冒泡分類法的基本思想:大的數(shù)逐層往下沉,而小的數(shù)逐層往上浮,就氣泡上浮一樣。算法:1.從數(shù)組元素a(1)到a(N),將相鄰的兩個數(shù)兩兩進行比較(共比較N-1次),若前一個數(shù)大于后一個數(shù),則進行對調(diào)。一趟操作后,a(N)已為最大數(shù)。78第七十八頁,共八十六頁,編輯于2023年,星期二2.再從數(shù)組元素a(1)到a(N-1)作同樣操作后,結(jié)果是a(N-1)成為次大數(shù)。3.重復(fù)以上步驟,直至只剩a(1)和a(2)作比較。由此可見,對N個數(shù)據(jù)第1趟比較N-1次,第2趟比較N-2次,……,第i趟比較N-i次。共進行N-1趟比較就可以排好順序。79第七十九頁,共八十六頁,編輯于2023年,星期二SubOrderArray(A()AsInteger)'排序
DimiAsInteger,jAsInteger,NAsInteger,TAsInteger
N=UBound(A)
Fori=1ToN-1'開始冒泡排序,共進行n-1趟
Forj=
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑合同補充協(xié)議標(biāo)準(zhǔn)模板
- 抵押車輛買賣合同范本
- 全新果園租賃合同
- 聯(lián)合投資成立公司合同書范本
- 2025年住宅交易中介合同模板
- 房屋借款合同書標(biāo)準(zhǔn)模板
- 2025年噪聲污染控制項目合同
- 2025年房地產(chǎn)購銷合同模板
- 2025年企業(yè)經(jīng)營貸款抵押合同參考
- 2025年勞動合同期滿續(xù)簽申請指南
- 南師大學(xué)校介紹課件
- 《病理科(中心)建設(shè)與配置標(biāo)準(zhǔn)》
- 《校園廉潔教育》主題班會課件全文
- 北京版(一起)英語六年級下冊單詞默寫表
- 2024年北京二中高一(上)段考一數(shù)學(xué)試題及答案
- 2024-2025學(xué)年七年級英語上冊單詞默寫冊
- 2024年度影視制作服務(wù)承包合同3篇
- 肌張力的康復(fù)治療
- 法律職業(yè)資格考試客觀題(試卷一)試題及解答參考(2024年)
- 教學(xué)的模樣讀書分享
- 油庫應(yīng)急處置培訓(xùn)
評論
0/150
提交評論