![計(jì)算機(jī)基礎(chǔ)與Visual-Basic程序設(shè)計(jì)(第三版)第九章-過程課件_第1頁](http://file4.renrendoc.com/view/32861a65b2088cb31b7b5b6dad6e2ad9/32861a65b2088cb31b7b5b6dad6e2ad91.gif)
![計(jì)算機(jī)基礎(chǔ)與Visual-Basic程序設(shè)計(jì)(第三版)第九章-過程課件_第2頁](http://file4.renrendoc.com/view/32861a65b2088cb31b7b5b6dad6e2ad9/32861a65b2088cb31b7b5b6dad6e2ad92.gif)
![計(jì)算機(jī)基礎(chǔ)與Visual-Basic程序設(shè)計(jì)(第三版)第九章-過程課件_第3頁](http://file4.renrendoc.com/view/32861a65b2088cb31b7b5b6dad6e2ad9/32861a65b2088cb31b7b5b6dad6e2ad93.gif)
![計(jì)算機(jī)基礎(chǔ)與Visual-Basic程序設(shè)計(jì)(第三版)第九章-過程課件_第4頁](http://file4.renrendoc.com/view/32861a65b2088cb31b7b5b6dad6e2ad9/32861a65b2088cb31b7b5b6dad6e2ad94.gif)
![計(jì)算機(jī)基礎(chǔ)與Visual-Basic程序設(shè)計(jì)(第三版)第九章-過程課件_第5頁](http://file4.renrendoc.com/view/32861a65b2088cb31b7b5b6dad6e2ad9/32861a65b2088cb31b7b5b6dad6e2ad95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章過程與函數(shù)第9章過程與函數(shù)1過程的定義:
在設(shè)計(jì)一個(gè)規(guī)模較大、復(fù)雜程度較高的程序時(shí),往往根據(jù)需要按功能將程序分解成若干個(gè)相對(duì)獨(dú)立的部分,然后對(duì)每個(gè)部分分別編寫一段程序,這些程序段稱為過程。
過程是構(gòu)成程序邏輯部件的基本單位,將程序分割成較小的邏輯部件可以簡化程序設(shè)計(jì)任務(wù),結(jié)構(gòu)化設(shè)計(jì)就是建立在這個(gè)思路之上。
每個(gè)過程完成一個(gè)具有特定目的的任務(wù)。9.1事件過程與通用過程過程的定義:9.1事件過程與通用過程2VB中有兩類子程序過程函數(shù)內(nèi)部函數(shù)(如:Sin(3.14/6))通用函數(shù)(自定義函數(shù)Function)事件過程通用過程(自定義過程Sub)窗體事件過程(如:Form_Click())控件事件過程(如:Command1_Click())VB子程序分類圖事件過程——是對(duì)發(fā)生的事件進(jìn)行處理的程序段通用過程和通用函數(shù)——是由用戶根據(jù)自己的需要定義和編寫的、可供事件過程多次調(diào)用的程序段它們都不直接與特定的事件相關(guān)聯(lián)9.1事件過程與通用過程VB中有兩類子程序過程函數(shù)內(nèi)部函數(shù)(如:Sin(3.14/639.2通用過程(Sub過程)Sub過程是指以規(guī)定語法結(jié)構(gòu)組織的、可以被重復(fù)調(diào)用的、具有特定功能的、相對(duì)獨(dú)立的程序段。
Sub過程不與任何特定的事件過程相關(guān)聯(lián),只能由別的過程調(diào)用1、
聲明Sub過程(定義)聲明Sub過程就是在窗體或標(biāo)準(zhǔn)模塊的代碼窗口編寫一個(gè)能實(shí)現(xiàn)預(yù)期功能的語句塊。聲明Sub過程的語法格式為:
[Private|Public][Static]Sub
過程名([<形參列表>])[<語句塊1>][ExitSub]過程體[<語句塊2>]
EndSub
注意:
Sub過程名無值,無類型。9.2通用過程(Sub過程)Sub過程是指以規(guī)定語法4說明:1、每個(gè)通用過程都有一個(gè)過程名(由用戶自己指定,規(guī)定同變量名),同一模塊中過程名不得重復(fù)。2、過程前加上Public關(guān)鍵字或缺省,則該過程為全局級(jí)過程,可以被應(yīng)用程序的所有窗體模塊或標(biāo)準(zhǔn)模塊中的過程調(diào)用(在窗體中定義,調(diào)用時(shí)應(yīng)加窗體名)。3、過程前加上Private關(guān)鍵字,則該過程為模塊級(jí)過程,只有在聲明它的模塊中才可以調(diào)用此過程。4、在過程名前加上Static關(guān)鍵字,表明該過程的變量都是靜態(tài)變量。5、形參列表是傳遞到過程中的變量名(多個(gè)時(shí)用“,”分隔),它指明了調(diào)用時(shí)傳遞給過程的參數(shù)的類型和個(gè)數(shù).過程可以有參數(shù),也可以不帶任何參數(shù)。根據(jù)需要而定格式為:[ByVal|ByRef]變量名[()][AS數(shù)據(jù)類型][,……]
ByVal表示按值傳遞;ByRef表示按地址傳遞6、過程內(nèi)不能再定義過程,過程定義也不能寫在事件過程內(nèi)說明:1、每個(gè)通用過程都有一個(gè)過程名(由用戶自己指定,規(guī)定同5如:SubTryout(xasinteger,yasinteger)x=x+100y=y*6Printx,yEndSub7、建立通用過程可以使用以下兩種方法:①
“工具”——”添加過程”②
在標(biāo)準(zhǔn)模塊或窗體模塊中,直接輸入通用過程的代碼。8、子過程名不返回值,只能通過形式參數(shù)與調(diào)用語句通信9、過程體中的ExitSub表示強(qiáng)制退出過程返回9.2通用過程(Sub過程)如:SubTryout(xasinteger62、調(diào)用Sub過程要執(zhí)行一個(gè)過程,必須調(diào)用該過程。調(diào)用的方法為:方法1.使用Call語句
格式:Call過程名[(實(shí)參列表)]方法2.
將過程名作為語句使用:格式:
過程名<實(shí)參列表>特點(diǎn):
Sub過程的調(diào)用是一句獨(dú)立的語句。例:要調(diào)用前面的Tryout過程,可以使用下面兩種方式:CallTryout(a,b)或Tryouta,b主過程Call過程1EndSub過程1Call過程2EndSub過程2EndSub調(diào)用的本質(zhì):轉(zhuǎn)入被調(diào)用過程去執(zhí)行,完成后返回2、調(diào)用Sub過程要執(zhí)行一個(gè)過程,必須調(diào)用該過程。調(diào)用的7說明:1、使用Call語句調(diào)用時(shí),參數(shù)必須放在括號(hào)內(nèi),如沒有參數(shù),括號(hào)可省略2、用過程名調(diào)用時(shí),過程名后不能加括號(hào),若有參數(shù),參數(shù)與過程名間用空格隔開3、參數(shù)表:在調(diào)用語句中的參數(shù)稱為實(shí)際參數(shù)(簡稱實(shí)參),實(shí)參可以是變量、常量、數(shù)組或表達(dá)式,參數(shù)間用逗號(hào)隔開4、可以直接調(diào)用本模塊中聲明的過程或標(biāo)準(zhǔn)模塊中聲明的全局過程;5、當(dāng)定義的過程重名時(shí),調(diào)用過程時(shí),過程名前應(yīng)加模塊名修飾;6、如果要調(diào)用窗體模塊中聲明的全局過程,調(diào)用時(shí)過程名前應(yīng)加窗體名。說明:1、使用Call語句調(diào)用時(shí),參數(shù)必須放在括號(hào)內(nèi),如沒有8Function過程與Sub過程的主要區(qū)別是:
Function過程可通過函數(shù)名返回一個(gè)值到調(diào)用的過程1、
聲明Function過程(函數(shù)定義)格式:[Public|Private][Static]Function函數(shù)過程名[(<參數(shù)列表>)][As<類型>]
[<語句塊>][<函數(shù)過程名>=<表達(dá)式>]‘返回值語句[ExitFunction]EndFunction注意:在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量名使用,函數(shù)的返回值就是通過對(duì)函數(shù)名的賦值語句來實(shí)現(xiàn)的。即函數(shù)值通過函數(shù)名返回。函數(shù)體中的ExitFunction語句的功能是強(qiáng)制退出函數(shù)并返回函數(shù)過程需要返回的值的類型由As<類型>設(shè)置。9.3Function過程(自定義函數(shù))函數(shù)體Function過程與Sub過程的主要區(qū)別是92、調(diào)用Function過程Function過程的調(diào)用,與標(biāo)準(zhǔn)函數(shù)(內(nèi)部函數(shù))相同。
通常用在表達(dá)式中
格式:函數(shù)名(<實(shí)參列表>)特點(diǎn):不能獨(dú)立成為語句,必須參加表達(dá)式的運(yùn)算。如1:下面是已知直角三角形兩直角邊的值,計(jì)算斜邊的函數(shù)。
functionmyfun(Aasinteger,Basinteger)asstring
myfun=sqr(A*A+B*B)
Endfunction
SubCommand1_Click()a=val(text1.text):b=val(text2.text)
label1.caption=myfun(a,b)
EndSub2、調(diào)用Function過程Function過程的10例2:將前面的兩個(gè)Sub過程改為Function過程。PrivateFunctiontriarea(xAsDouble,yAsDouble,zAsDouble)DimsAsDoubles=(x+y+z)/2triarea=Sqr((s-x)*(s-y)*(s-z)*s)EndFunctionPrivateSubCommand1_Click()
Dima#,b#,c#,s#,intYesorNo%a=Val(Text1.Text):b=Val(Text2.Text)c=Val(Text3.Text)
Ifa+b>cAndb+c>aAndc+a>bThen
Print"面積=";triarea(a,b,c)
Else
intYesorNo=suberr()‘無參數(shù)時(shí),括號(hào)不能省略
EndIfEndSub例2:將前面的兩個(gè)Sub過程改為Function過程。119.4參數(shù)傳遞不同模塊(過程)之間數(shù)據(jù)的傳遞方式:通過全局變量實(shí)現(xiàn)各過程中共享數(shù)據(jù)(即在“通用”部份定義的變量,由該模塊所有過程共享)通過過程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn)按值傳遞(單向傳遞)按地址傳遞(雙向傳遞)9.4參數(shù)傳遞不同模塊(過程)之間數(shù)據(jù)的傳遞方式:通過12Sub過程和Function函數(shù)過程中的<參數(shù)列表>中的參數(shù)稱為形式參數(shù)(形參),在程序中調(diào)用Sub過程和Function函數(shù)過程時(shí)<參數(shù)列表>中稱為實(shí)際參數(shù)(實(shí)參)。在調(diào)用過程時(shí),就是把“實(shí)參”依次按位置傳遞給被調(diào)用過程的“形參”,然后執(zhí)行被調(diào)用過程中的語句。參數(shù)傳遞時(shí)相當(dāng)于給變量賦初值。如:
Printgreatcd(x,y)
PublicFunctiongreatcd(mAsInteger,nAsInteger)
參數(shù)傳遞有兩種模式:按值傳遞與按址傳遞9.4參數(shù)傳遞Sub過程和Function函數(shù)過程中的<參數(shù)列表>中的參數(shù)13按值傳遞就是將實(shí)參的值傳送給被調(diào)用過程中的形參。即:系統(tǒng)把實(shí)參復(fù)制一份傳送給形參。這樣,被調(diào)用的過程如果改變了形參的值,也不會(huì)改變實(shí)參的值。在VB中,傳值方式的標(biāo)志為:在形參前加上ByVal。這種傳遞方式是一種單向的數(shù)據(jù)傳遞,即調(diào)用時(shí)只能由實(shí)參的值傳遞給形參,調(diào)用結(jié)束不能由形參將操作結(jié)果返回給實(shí)參。實(shí)參可以是常數(shù)、變量或表達(dá)式。1、按值傳遞按值傳遞就是將實(shí)參的值傳送給被調(diào)用過程中的形參。即:系統(tǒng)把實(shí)14例:寫出下列程序的運(yùn)行結(jié)果Subtryout(ByValxasinteger,ByValyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub傳值:X=110y=120a=10b=20例:寫出下列程序的運(yùn)行結(jié)果Subtryout(ByVal152、按址傳遞——變量的引用傳址方式是將實(shí)參在內(nèi)存的地址傳遞給形參,也就是實(shí)參、形參公用內(nèi)存的“地址”。在VB中,按址傳遞數(shù)據(jù)是在形參前加上ByRef(默認(rèn)方式)。這種傳遞方式是一種雙向的數(shù)據(jù)傳遞,即調(diào)用時(shí)實(shí)參將值傳遞給形參;調(diào)用結(jié)束由形參將操作結(jié)果返回給實(shí)參。當(dāng)用傳址方式時(shí),實(shí)參只能是變量、數(shù)組名,不能是常數(shù)、表達(dá)式。修改前例題ByValByRef再寫其運(yùn)行結(jié)果2、按址傳遞——變量的引用傳址方式是將實(shí)參在內(nèi)存的地址傳16Subtryout(ByRefxasinteger,ByRefyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub傳址:X=110y=120a=110b=120Subtryout(ByRefxasinteger,173、數(shù)組作過程的參數(shù)VisualBasic允許把數(shù)組作為實(shí)參傳送到過程中。數(shù)組作參數(shù)是通過傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):
1.為了把一個(gè)數(shù)組的全部元素傳送給一個(gè)過程,應(yīng)將數(shù)組名分別寫入形參表中,并略去數(shù)組的上下界,但括號(hào)不能省略。PrivateSubSort(a()Assingle)
……EndSub其中形參“a()”即為數(shù)組。3、數(shù)組作過程的參數(shù)VisualBasic182.被調(diào)過程可通過Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上、下界。3.當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類型一致。4.實(shí)參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實(shí)參數(shù)組共用一段內(nèi)存單元。例如:定義了實(shí)參數(shù)組b(1to8),給它們賦了值,調(diào)用Sort()函數(shù)過程的形式如下:Sortb()或CallSort(b())實(shí)參數(shù)組后面的括號(hào)可以省略,但為便于閱讀,建議一般不要省略為好。3、數(shù)組作過程的參數(shù)2.被調(diào)過程可通過Lbound和Ubound函19調(diào)用時(shí)形參數(shù)組a和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一段內(nèi)存單元,如圖6-7所示。因此在Sort()過程中改變數(shù)組a的各元素值,也就相當(dāng)于改變了實(shí)參數(shù)組b中對(duì)應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束時(shí),形參數(shù)組a成為無定義。
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é)合示意圖
3、數(shù)組作過程的參數(shù)調(diào)用時(shí)形參數(shù)組a和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一20可選參數(shù)和可變參數(shù)1、可選參數(shù)
在過程的形參列表中加入Optional關(guān)鍵字,就可以指定過程的參數(shù)為可選的。如果指定了可選參數(shù),則參數(shù)表中此參數(shù)后面的其它參數(shù)也必是可選的,并且要用Optional關(guān)鍵字來聲明。
例6:求兩個(gè)數(shù)的和的函數(shù)過程。
lt6.vbp函數(shù)過程:PublicFunctionmysum(firstAsInteger,secondAsLong,Optionalthird)mysum=first+second
IfNotIsMissing(third)Thenmysum=mysum+thirdEndFunction可選參數(shù)和可變參數(shù)1、可選參數(shù)例6:求兩個(gè)數(shù)的和的函數(shù)21事件過程:PrivateSubCommand1_Click()DimaAsInteger,bAsLong,cAsDoubleDimsumAsIntegera=10:b=20Sum=mysum(a,b)Print"sum=";Suma=10:b=20:c=30Sum=mysum(a,b,c)Print"sum=";SumEndSubIsMissing()——檢測(cè)可選參數(shù)是否被省略事件過程:222、不定數(shù)量的參數(shù)(可變參數(shù))
一般說來,過程調(diào)用中的參數(shù)個(gè)數(shù)應(yīng)等于過程說明的參數(shù)個(gè)數(shù)。在傳遞參數(shù)時(shí),如果要求參數(shù)的數(shù)目可以變化,則在函數(shù)過程或Sub過程的形參前可加ParamArray關(guān)鍵字(不能與ByValByDef…連用)指明。格式如下:Sub過程名([其他參數(shù),]ParamArray<數(shù)組名>())
2、不定數(shù)量的參數(shù)(可變參數(shù))一般說來23PrivateSubCommand1_Click()
Dims(),a%,bAsLong,cAsVariant,dAsDoubles=Array(1,2,3,4,5)Print"sum=";multisum(s(0),s(2),s(4))a=1000:b=10000:c=100:d=10Print"sum=";multisum(a,b,c,d)EndSub
PublicFunctionmultisum(ParamArrayp())
Dimint1%,sumasvariantForint1=LBound(p)ToUBound(p)sum=sum+p(int1)Nextmultisum=sumEndSubPrivateSubCommand1_Click()249.4.4對(duì)象參數(shù)窗體參數(shù)形參定義格式:形參名Asform調(diào)用時(shí)實(shí)參:必須為某個(gè)窗體名稱控件參數(shù):形參定義格式:形參名AsControl調(diào)用時(shí)實(shí)參:可為任意一個(gè)控件對(duì)象9.4.4對(duì)象參數(shù)窗體參數(shù)25變量的作用域根據(jù)變量的作用域,變量分為局部(過程級(jí))變量、窗體/模塊變量和全局變量局部變量在過程中用Dim/static語句定義,只存在于過程中用Dim定義的變量稱為動(dòng)態(tài)變量,生存期為過程的一次調(diào)用.用Static定義的變量稱為靜態(tài)變量,生存期為整個(gè)應(yīng)用程序的執(zhí)行期間(重點(diǎn)掌握,舉例)窗體/模塊變量Dim語句或Private語句定義,模塊中的所有過程都可使用全局變量Public語句定義,可以在所有模塊中使用9.5變量與過程的作用范圍變量的作用域根據(jù)變量的作用域,變量分為局部(過程級(jí))變量、窗26PrivateSubForm_Click()DimaccAsInteger,iAsIntegeracc=0Fori=1To3acc=acc+funa(i)NextiPrintaccEndSubPrivateFunctionfuna(xAsInteger)AsIntegerStaticsAsIntegers=s+xfuna=sEndFunction運(yùn)行時(shí)單擊窗體,程序輸出結(jié)果為:PrivateSubForm_Click()Privat27能能變量名前加窗體名不能不能被其他模塊存取能能不能被本模塊的其他過程存取通用聲明通用聲明過程中聲明位置PublicDimPrivateDimStatic聲明方式標(biāo)準(zhǔn)模塊窗體全局變量窗體/模塊級(jí)變量局部變量作用范圍不同作用范圍的三種變量聲明及使用規(guī)則能能不能不能被其他模塊存取能能不能被本模塊的其他過程存取通用28不同作用范圍的二種過程定義及調(diào)用規(guī)則能但過程名必須唯一,否則要加標(biāo)準(zhǔn)模塊名能但必須在過程名前加窗體名不能不能能否被本應(yīng)用程序其他模塊調(diào)用能能能能能否被本模塊其他過程調(diào)用Public缺省Private定義方式標(biāo)準(zhǔn)模塊窗體標(biāo)準(zhǔn)模塊窗體全局級(jí)模塊級(jí)作用范圍根據(jù)過程的作用域,過程分為窗體/模塊級(jí)和全局級(jí)。不同作用范圍的二種過程定義及調(diào)用規(guī)則能能不能不能能否被本應(yīng)用299.7過程的嵌套和遞歸1、過程的嵌套在程序中調(diào)用一子過程,而在子過程中又調(diào)用另外的子過程,這種程序結(jié)構(gòu)稱為過程的嵌套。過程的嵌套調(diào)用執(zhí)行過程如下圖:9.7過程的嵌套和遞歸1、過程的嵌套在程序302、過程的遞歸調(diào)用用自身的結(jié)構(gòu)來描述自身,稱遞歸。例如,對(duì)階乘的定義:VisualBasic允許在一個(gè)Sub子過程和Function過程的定義內(nèi)部調(diào)用自己,即遞歸Sub子過程和遞歸Function函數(shù)。直接調(diào)用自己稱為直接遞歸調(diào)用間接調(diào)用自己稱為間接遞歸調(diào)用9.7過程的嵌套和遞歸調(diào)用2、過程的遞歸調(diào)用用自身的結(jié)構(gòu)來描述自身,稱遞歸。例如31PrivateFunctionfac(nAsInteger)AsIntegerIfn=1Then fac=1Else fac=n*fac(n-1)EndIfEndFunctionPrivateSubForm_Click() Print“fac(4)=”;fac(4)EndSub程序的遞歸過程:PrivateFunctionfac(nAsInte32說明:遞歸處理分遞推和回歸兩個(gè)過程,如上圖所示。當(dāng)一個(gè)大問題能夠分解成同類型的小問題,且問題規(guī)模在逐漸減小,才適合用遞歸解決.使用遞歸算法必須要滿足以下的遞歸條件:
(1)存在遞歸結(jié)束條件及結(jié)束時(shí)的值;(2)能用遞歸形式表示,且遞歸向終止條件發(fā)展。說明:33第9章過程與函數(shù)第9章過程與函數(shù)34過程的定義:
在設(shè)計(jì)一個(gè)規(guī)模較大、復(fù)雜程度較高的程序時(shí),往往根據(jù)需要按功能將程序分解成若干個(gè)相對(duì)獨(dú)立的部分,然后對(duì)每個(gè)部分分別編寫一段程序,這些程序段稱為過程。
過程是構(gòu)成程序邏輯部件的基本單位,將程序分割成較小的邏輯部件可以簡化程序設(shè)計(jì)任務(wù),結(jié)構(gòu)化設(shè)計(jì)就是建立在這個(gè)思路之上。
每個(gè)過程完成一個(gè)具有特定目的的任務(wù)。9.1事件過程與通用過程過程的定義:9.1事件過程與通用過程35VB中有兩類子程序過程函數(shù)內(nèi)部函數(shù)(如:Sin(3.14/6))通用函數(shù)(自定義函數(shù)Function)事件過程通用過程(自定義過程Sub)窗體事件過程(如:Form_Click())控件事件過程(如:Command1_Click())VB子程序分類圖事件過程——是對(duì)發(fā)生的事件進(jìn)行處理的程序段通用過程和通用函數(shù)——是由用戶根據(jù)自己的需要定義和編寫的、可供事件過程多次調(diào)用的程序段它們都不直接與特定的事件相關(guān)聯(lián)9.1事件過程與通用過程VB中有兩類子程序過程函數(shù)內(nèi)部函數(shù)(如:Sin(3.14/6369.2通用過程(Sub過程)Sub過程是指以規(guī)定語法結(jié)構(gòu)組織的、可以被重復(fù)調(diào)用的、具有特定功能的、相對(duì)獨(dú)立的程序段。
Sub過程不與任何特定的事件過程相關(guān)聯(lián),只能由別的過程調(diào)用1、
聲明Sub過程(定義)聲明Sub過程就是在窗體或標(biāo)準(zhǔn)模塊的代碼窗口編寫一個(gè)能實(shí)現(xiàn)預(yù)期功能的語句塊。聲明Sub過程的語法格式為:
[Private|Public][Static]Sub
過程名([<形參列表>])[<語句塊1>][ExitSub]過程體[<語句塊2>]
EndSub
注意:
Sub過程名無值,無類型。9.2通用過程(Sub過程)Sub過程是指以規(guī)定語法37說明:1、每個(gè)通用過程都有一個(gè)過程名(由用戶自己指定,規(guī)定同變量名),同一模塊中過程名不得重復(fù)。2、過程前加上Public關(guān)鍵字或缺省,則該過程為全局級(jí)過程,可以被應(yīng)用程序的所有窗體模塊或標(biāo)準(zhǔn)模塊中的過程調(diào)用(在窗體中定義,調(diào)用時(shí)應(yīng)加窗體名)。3、過程前加上Private關(guān)鍵字,則該過程為模塊級(jí)過程,只有在聲明它的模塊中才可以調(diào)用此過程。4、在過程名前加上Static關(guān)鍵字,表明該過程的變量都是靜態(tài)變量。5、形參列表是傳遞到過程中的變量名(多個(gè)時(shí)用“,”分隔),它指明了調(diào)用時(shí)傳遞給過程的參數(shù)的類型和個(gè)數(shù).過程可以有參數(shù),也可以不帶任何參數(shù)。根據(jù)需要而定格式為:[ByVal|ByRef]變量名[()][AS數(shù)據(jù)類型][,……]
ByVal表示按值傳遞;ByRef表示按地址傳遞6、過程內(nèi)不能再定義過程,過程定義也不能寫在事件過程內(nèi)說明:1、每個(gè)通用過程都有一個(gè)過程名(由用戶自己指定,規(guī)定同38如:SubTryout(xasinteger,yasinteger)x=x+100y=y*6Printx,yEndSub7、建立通用過程可以使用以下兩種方法:①
“工具”——”添加過程”②
在標(biāo)準(zhǔn)模塊或窗體模塊中,直接輸入通用過程的代碼。8、子過程名不返回值,只能通過形式參數(shù)與調(diào)用語句通信9、過程體中的ExitSub表示強(qiáng)制退出過程返回9.2通用過程(Sub過程)如:SubTryout(xasinteger392、調(diào)用Sub過程要執(zhí)行一個(gè)過程,必須調(diào)用該過程。調(diào)用的方法為:方法1.使用Call語句
格式:Call過程名[(實(shí)參列表)]方法2.
將過程名作為語句使用:格式:
過程名<實(shí)參列表>特點(diǎn):
Sub過程的調(diào)用是一句獨(dú)立的語句。例:要調(diào)用前面的Tryout過程,可以使用下面兩種方式:CallTryout(a,b)或Tryouta,b主過程Call過程1EndSub過程1Call過程2EndSub過程2EndSub調(diào)用的本質(zhì):轉(zhuǎn)入被調(diào)用過程去執(zhí)行,完成后返回2、調(diào)用Sub過程要執(zhí)行一個(gè)過程,必須調(diào)用該過程。調(diào)用的40說明:1、使用Call語句調(diào)用時(shí),參數(shù)必須放在括號(hào)內(nèi),如沒有參數(shù),括號(hào)可省略2、用過程名調(diào)用時(shí),過程名后不能加括號(hào),若有參數(shù),參數(shù)與過程名間用空格隔開3、參數(shù)表:在調(diào)用語句中的參數(shù)稱為實(shí)際參數(shù)(簡稱實(shí)參),實(shí)參可以是變量、常量、數(shù)組或表達(dá)式,參數(shù)間用逗號(hào)隔開4、可以直接調(diào)用本模塊中聲明的過程或標(biāo)準(zhǔn)模塊中聲明的全局過程;5、當(dāng)定義的過程重名時(shí),調(diào)用過程時(shí),過程名前應(yīng)加模塊名修飾;6、如果要調(diào)用窗體模塊中聲明的全局過程,調(diào)用時(shí)過程名前應(yīng)加窗體名。說明:1、使用Call語句調(diào)用時(shí),參數(shù)必須放在括號(hào)內(nèi),如沒有41Function過程與Sub過程的主要區(qū)別是:
Function過程可通過函數(shù)名返回一個(gè)值到調(diào)用的過程1、
聲明Function過程(函數(shù)定義)格式:[Public|Private][Static]Function函數(shù)過程名[(<參數(shù)列表>)][As<類型>]
[<語句塊>][<函數(shù)過程名>=<表達(dá)式>]‘返回值語句[ExitFunction]EndFunction注意:在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量名使用,函數(shù)的返回值就是通過對(duì)函數(shù)名的賦值語句來實(shí)現(xiàn)的。即函數(shù)值通過函數(shù)名返回。函數(shù)體中的ExitFunction語句的功能是強(qiáng)制退出函數(shù)并返回函數(shù)過程需要返回的值的類型由As<類型>設(shè)置。9.3Function過程(自定義函數(shù))函數(shù)體Function過程與Sub過程的主要區(qū)別是422、調(diào)用Function過程Function過程的調(diào)用,與標(biāo)準(zhǔn)函數(shù)(內(nèi)部函數(shù))相同。
通常用在表達(dá)式中
格式:函數(shù)名(<實(shí)參列表>)特點(diǎn):不能獨(dú)立成為語句,必須參加表達(dá)式的運(yùn)算。如1:下面是已知直角三角形兩直角邊的值,計(jì)算斜邊的函數(shù)。
functionmyfun(Aasinteger,Basinteger)asstring
myfun=sqr(A*A+B*B)
Endfunction
SubCommand1_Click()a=val(text1.text):b=val(text2.text)
label1.caption=myfun(a,b)
EndSub2、調(diào)用Function過程Function過程的43例2:將前面的兩個(gè)Sub過程改為Function過程。PrivateFunctiontriarea(xAsDouble,yAsDouble,zAsDouble)DimsAsDoubles=(x+y+z)/2triarea=Sqr((s-x)*(s-y)*(s-z)*s)EndFunctionPrivateSubCommand1_Click()
Dima#,b#,c#,s#,intYesorNo%a=Val(Text1.Text):b=Val(Text2.Text)c=Val(Text3.Text)
Ifa+b>cAndb+c>aAndc+a>bThen
Print"面積=";triarea(a,b,c)
Else
intYesorNo=suberr()‘無參數(shù)時(shí),括號(hào)不能省略
EndIfEndSub例2:將前面的兩個(gè)Sub過程改為Function過程。449.4參數(shù)傳遞不同模塊(過程)之間數(shù)據(jù)的傳遞方式:通過全局變量實(shí)現(xiàn)各過程中共享數(shù)據(jù)(即在“通用”部份定義的變量,由該模塊所有過程共享)通過過程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn)按值傳遞(單向傳遞)按地址傳遞(雙向傳遞)9.4參數(shù)傳遞不同模塊(過程)之間數(shù)據(jù)的傳遞方式:通過45Sub過程和Function函數(shù)過程中的<參數(shù)列表>中的參數(shù)稱為形式參數(shù)(形參),在程序中調(diào)用Sub過程和Function函數(shù)過程時(shí)<參數(shù)列表>中稱為實(shí)際參數(shù)(實(shí)參)。在調(diào)用過程時(shí),就是把“實(shí)參”依次按位置傳遞給被調(diào)用過程的“形參”,然后執(zhí)行被調(diào)用過程中的語句。參數(shù)傳遞時(shí)相當(dāng)于給變量賦初值。如:
Printgreatcd(x,y)
PublicFunctiongreatcd(mAsInteger,nAsInteger)
參數(shù)傳遞有兩種模式:按值傳遞與按址傳遞9.4參數(shù)傳遞Sub過程和Function函數(shù)過程中的<參數(shù)列表>中的參數(shù)46按值傳遞就是將實(shí)參的值傳送給被調(diào)用過程中的形參。即:系統(tǒng)把實(shí)參復(fù)制一份傳送給形參。這樣,被調(diào)用的過程如果改變了形參的值,也不會(huì)改變實(shí)參的值。在VB中,傳值方式的標(biāo)志為:在形參前加上ByVal。這種傳遞方式是一種單向的數(shù)據(jù)傳遞,即調(diào)用時(shí)只能由實(shí)參的值傳遞給形參,調(diào)用結(jié)束不能由形參將操作結(jié)果返回給實(shí)參。實(shí)參可以是常數(shù)、變量或表達(dá)式。1、按值傳遞按值傳遞就是將實(shí)參的值傳送給被調(diào)用過程中的形參。即:系統(tǒng)把實(shí)47例:寫出下列程序的運(yùn)行結(jié)果Subtryout(ByValxasinteger,ByValyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub傳值:X=110y=120a=10b=20例:寫出下列程序的運(yùn)行結(jié)果Subtryout(ByVal482、按址傳遞——變量的引用傳址方式是將實(shí)參在內(nèi)存的地址傳遞給形參,也就是實(shí)參、形參公用內(nèi)存的“地址”。在VB中,按址傳遞數(shù)據(jù)是在形參前加上ByRef(默認(rèn)方式)。這種傳遞方式是一種雙向的數(shù)據(jù)傳遞,即調(diào)用時(shí)實(shí)參將值傳遞給形參;調(diào)用結(jié)束由形參將操作結(jié)果返回給實(shí)參。當(dāng)用傳址方式時(shí),實(shí)參只能是變量、數(shù)組名,不能是常數(shù)、表達(dá)式。修改前例題ByValByRef再寫其運(yùn)行結(jié)果2、按址傳遞——變量的引用傳址方式是將實(shí)參在內(nèi)存的地址傳49Subtryout(ByRefxasinteger,ByRefyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub傳址:X=110y=120a=110b=120Subtryout(ByRefxasinteger,503、數(shù)組作過程的參數(shù)VisualBasic允許把數(shù)組作為實(shí)參傳送到過程中。數(shù)組作參數(shù)是通過傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):
1.為了把一個(gè)數(shù)組的全部元素傳送給一個(gè)過程,應(yīng)將數(shù)組名分別寫入形參表中,并略去數(shù)組的上下界,但括號(hào)不能省略。PrivateSubSort(a()Assingle)
……EndSub其中形參“a()”即為數(shù)組。3、數(shù)組作過程的參數(shù)VisualBasic512.被調(diào)過程可通過Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上、下界。3.當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類型一致。4.實(shí)參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實(shí)參數(shù)組共用一段內(nèi)存單元。例如:定義了實(shí)參數(shù)組b(1to8),給它們賦了值,調(diào)用Sort()函數(shù)過程的形式如下:Sortb()或CallSort(b())實(shí)參數(shù)組后面的括號(hào)可以省略,但為便于閱讀,建議一般不要省略為好。3、數(shù)組作過程的參數(shù)2.被調(diào)過程可通過Lbound和Ubound函52調(diào)用時(shí)形參數(shù)組a和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一段內(nèi)存單元,如圖6-7所示。因此在Sort()過程中改變數(shù)組a的各元素值,也就相當(dāng)于改變了實(shí)參數(shù)組b中對(duì)應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束時(shí),形參數(shù)組a成為無定義。
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é)合示意圖
3、數(shù)組作過程的參數(shù)調(diào)用時(shí)形參數(shù)組a和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一53可選參數(shù)和可變參數(shù)1、可選參數(shù)
在過程的形參列表中加入Optional關(guān)鍵字,就可以指定過程的參數(shù)為可選的。如果指定了可選參數(shù),則參數(shù)表中此參數(shù)后面的其它參數(shù)也必是可選的,并且要用Optional關(guān)鍵字來聲明。
例6:求兩個(gè)數(shù)的和的函數(shù)過程。
lt6.vbp函數(shù)過程:PublicFunctionmysum(firstAsInteger,secondAsLong,Optionalthird)mysum=first+second
IfNotIsMissing(third)Thenmysum=mysum+thirdEndFunction可選參數(shù)和可變參數(shù)1、可選參數(shù)例6:求兩個(gè)數(shù)的和的函數(shù)54事件過程:PrivateSubCommand1_Click()DimaAsInteger,bAsLong,cAsDoubleDimsumAsIntegera=10:b=20Sum=mysum(a,b)Print"sum=";Suma=10:b=20:c=30Sum=mysum(a,b,c)Print"sum=";SumEndSubIsMissing()——檢測(cè)可選參數(shù)是否被省略事件過程:552、不定數(shù)量的參數(shù)(可變參數(shù))
一般說來,過程調(diào)用中的參數(shù)個(gè)數(shù)應(yīng)等于過程說明的參數(shù)個(gè)數(shù)。在傳遞參數(shù)時(shí),如果要求參數(shù)的數(shù)目可以變化,則在函數(shù)過程或Sub過程的形參前可加ParamArray關(guān)鍵字(不能與ByValByDef…連用)指明。格式如下:Sub過程名([其他參數(shù),]ParamArray<數(shù)組名>())
2、不定數(shù)量的參數(shù)(可變參數(shù))一般說來56PrivateSubCommand1_Click()
Dims(),a%,bAsLong,cAsVariant,dAsDoubles=Array(1,2,3,4,5)Print"sum=";multisum(s(0),s(2),s(4))a=1000:b=10000:c=100:d=10Print"sum=";multisum(a,b,c,d)EndSub
PublicFunctionmultisum(ParamArrayp())
Dimint1%,sumasvariantForint1=LBound(p)ToUBound(p)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB4415T 49-2025稻薯輪作主要病蟲害綜合防控技術(shù)規(guī)程
- 中外投資合作協(xié)議合同樣本
- 上海市大型綜合超市與農(nóng)場(chǎng)蔬菜采購合同協(xié)議2025
- 個(gè)人最高額抵押合同法律效力分析
- 主題公園游樂設(shè)備租賃合同模板
- 2025年設(shè)備采購合同其一
- 臨時(shí)工勞動(dòng)合同安全承諾書范本
- 中華鱉訂購培育合同書
- 中外合資建廠施工合同范本
- 專利及專有技術(shù)許可合同范例集
- 糖尿病性視網(wǎng)膜病變匯報(bào)演示課件
- 國企經(jīng)理層任期制和契約化管理任期制與契約化相關(guān)模板
- 電力服務(wù)收費(fèi)標(biāo)準(zhǔn)附表
- 小學(xué)主題班會(huì)教學(xué)設(shè)計(jì)-《給你點(diǎn)個(gè)“贊”》通用版
- 【教學(xué)創(chuàng)新大賽】《系統(tǒng)解剖學(xué)》教學(xué)創(chuàng)新成果報(bào)告
- 賽意EAM設(shè)備管理IOT解決方案
- 氫氰酸安全技術(shù)說明書MSDS
- 動(dòng)物檢疫技術(shù)-動(dòng)物檢疫的范圍(動(dòng)物防疫與檢疫技術(shù))
- 比較思想政治教育學(xué)
- 醫(yī)用內(nèi)窺鏡冷光源產(chǎn)品技術(shù)要求深圳邁瑞
- 護(hù)理教學(xué)查房評(píng)分標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論