![第六章 過程與模塊_第1頁](http://file4.renrendoc.com/view/fb34c4c62af76de09e4e6a2a8f7247a3/fb34c4c62af76de09e4e6a2a8f7247a31.gif)
![第六章 過程與模塊_第2頁](http://file4.renrendoc.com/view/fb34c4c62af76de09e4e6a2a8f7247a3/fb34c4c62af76de09e4e6a2a8f7247a32.gif)
![第六章 過程與模塊_第3頁](http://file4.renrendoc.com/view/fb34c4c62af76de09e4e6a2a8f7247a3/fb34c4c62af76de09e4e6a2a8f7247a33.gif)
![第六章 過程與模塊_第4頁](http://file4.renrendoc.com/view/fb34c4c62af76de09e4e6a2a8f7247a3/fb34c4c62af76de09e4e6a2a8f7247a34.gif)
![第六章 過程與模塊_第5頁](http://file4.renrendoc.com/view/fb34c4c62af76de09e4e6a2a8f7247a3/fb34c4c62af76de09e4e6a2a8f7247a35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第六章過程與模塊6.1過程6.2模塊6.1過程一、函數(shù)過程的定義和調(diào)用二、子過程的定義和調(diào)用三、參數(shù)傳遞四、變量、過程的作用域五、遞歸六、SubMain過程在前面幾章中,已經(jīng)使用了系統(tǒng)提供的內(nèi)部函數(shù)和事件過程。在程序的編寫中,對(duì)于較復(fù)雜的問題,按照結(jié)構(gòu)化程序設(shè)計(jì)的原則,可把問題逐步細(xì)化,分成若干個(gè)功能模塊,通過VB提供的自定義過程將功能模塊定義成一個(gè)個(gè)過程,供事件過程多次調(diào)用。在VB中自定義過程有4種:以SUB保留字開始的子過程以Function保留字開始的函數(shù)過程以Property保留字開始的屬性過程以Event保留字開始的事件過程本章介紹子過程和函數(shù)過程一、函數(shù)過程的定義和調(diào)用1.函數(shù)過程的定義:自定義函數(shù)過程有兩種方法:★利用“工具”菜單下的“添加過程”命令定義,步驟為:代碼窗口工具添加過程名稱框函數(shù)過程名類型框函數(shù)范圍公有的★利用代碼窗口直接定義在窗體/標(biāo)準(zhǔn)模塊的代碼窗口把插入點(diǎn)放在現(xiàn)有過程之外,直接輸入函數(shù)過程。自定義函數(shù)過程的形式如下:Function函數(shù)過程名([參數(shù)列表])[As類型] 局部變量或常數(shù)定義 語句塊 [ExitFunction]
語句塊
函數(shù)名=返回值EndFunction說明:☆函數(shù)過程名—與變量命名規(guī)則相同。但不要和VB中的關(guān)鍵字、API函數(shù)及同一級(jí)別的變量重名?!?/p>
As類型—函數(shù)返回值的類型☆參數(shù)列表—形式為:[ByVal]變量名[()][As類型][,…]參數(shù)也稱為形參或啞元,只能是變量或數(shù)組名(要加()),在定義時(shí)沒有值。
ByVal—表示該過程被調(diào)用時(shí),參數(shù)是值傳遞(傳值),否則是引用傳遞(傳址)。函數(shù)過程無參數(shù)時(shí),函數(shù)過程名后面的括號(hào)不能省略。☆在函數(shù)體內(nèi)函數(shù)名至少要賦值一次?!頪ExitFunction]—表示退出函數(shù)過程☆[Static(靜態(tài))][Public(全局)][Private(局部)]—分別聲明了函數(shù)的作用域2.函數(shù)過程的調(diào)用函數(shù)過程的調(diào)用和標(biāo)準(zhǔn)函數(shù)的調(diào)用相同,形式如下:
變量=函數(shù)過程名([參數(shù)列表])注意:☆由于函數(shù)過程名返回一個(gè)值,故函數(shù)過程不能作為單獨(dú)的語句加以調(diào)用,必須作為表達(dá)式或表達(dá)式中的一部分,再配以其他的語法成分構(gòu)成語句。
☆“參數(shù)列表”稱為實(shí)參或?qū)嵲?,它必須與形參保持個(gè)數(shù)、類型與位置一一對(duì)應(yīng)。實(shí)參可以是同類型的常數(shù)、變量、數(shù)組元素或表達(dá)式。
☆調(diào)用時(shí)把實(shí)參的值傳遞給形參,稱為參數(shù)傳遞。其中,值傳遞(形參前面有ByVal)時(shí)實(shí)參的值不隨形參的值變化而改變,而引用傳遞(又稱地址傳遞)的實(shí)參的值隨形參的值一起變化。
☆當(dāng)參數(shù)是數(shù)組時(shí),形參與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略其維數(shù),但必須保留括號(hào)。3.函數(shù)過程的應(yīng)用舉例例li6-1已知5邊形的各條邊的長度和2條對(duì)角線的長度,計(jì)算5邊形的面積。s3abcdefgs2s1計(jì)算三角形面積的公式為:計(jì)算3個(gè)三角形,使用的公式相同,不同的僅僅是邊長,因此先定義一個(gè)求三角形面積的函數(shù)過程,然后調(diào)用該函數(shù)求5邊形的面積。 二、子過程的定義和調(diào)用子過程的定義 子過程定義的方法和函數(shù)過程相同,形式如下: Sub子過程名[(參數(shù)列表)] 局部變量或常數(shù)定義 語句塊 [ExitSub]
語句塊EndSub其中,子過程名、參數(shù)列表規(guī)定與函數(shù)過程相同,但當(dāng)形參沒有時(shí),括號(hào)也不保留。2.子過程的調(diào)用子過程的調(diào)用是一句獨(dú)立的調(diào)用語句,有兩種形式:
Call子過程名[實(shí)參列表]
子過程名[實(shí)參列表]前者用Call關(guān)鍵字時(shí),若有實(shí)參,則實(shí)參必須加圓括號(hào)括起來;若無實(shí)參,圓括號(hào)省略。后者無Call關(guān)鍵字,故圓括號(hào)也省略。注意:如果實(shí)參要獲得子過程的返回值,則實(shí)參只能是變量,不能是常數(shù)、表達(dá)式,也不能是控件名。例li6-3:分別編寫計(jì)算某級(jí)數(shù)部分和的函數(shù)過程和子過程,并分別調(diào)用,求級(jí)數(shù)精度為3.子過程與函數(shù)過程的區(qū)別及注意事項(xiàng):
★把某功能定義為函數(shù)過程還是子過程,沒有嚴(yán)格的規(guī)定,但只要能用函數(shù)過程定義的,肯定能用子過程定義;反之則不一定?!锂?dāng)過程有一個(gè)返回值時(shí),使用函數(shù)過程直觀;當(dāng)過程有多個(gè)返回值時(shí),習(xí)慣用子過程。
★函數(shù)過程有返回值,過程名也就有類型,在函數(shù)過程體內(nèi)必須對(duì)函數(shù)過程名賦值;子過程沒有值,函數(shù)名也就沒有類型。
★形參是過程與主調(diào)程序交互的接口,從主調(diào)程序獲得初值,或?qū)⒂?jì)算結(jié)果返回給主調(diào)程序。★形參沒有具體的值,只代表了參數(shù)的個(gè)數(shù)、位置、類型,形參只能是簡單變量,不能是常數(shù)、數(shù)組元素、表達(dá)式。三、參數(shù)傳遞1.傳址與傳值 在VB中,實(shí)參與形參的結(jié)合有兩種方法:即傳址(ByDef)和傳值(ByVal),其中傳址也稱為引用,是默認(rèn)的方法。區(qū)分兩種結(jié)合的方法是在要使用傳值的形參前加上“ByVal”關(guān)鍵字。
傳址的結(jié)合過程是:當(dāng)調(diào)用一個(gè)過程時(shí),將實(shí)參的地址傳遞給形參。因此在被調(diào)過程體中對(duì)形參的任何操作都變成了對(duì)相應(yīng)實(shí)參的操作,實(shí)參的值就會(huì)隨過程體內(nèi)對(duì)形參的改變而改變。
傳值的結(jié)合過程是:當(dāng)調(diào)用一個(gè)過程時(shí),系統(tǒng)將實(shí)參的值復(fù)制給形參,實(shí)參與形參斷開了聯(lián)系。被調(diào)過程中的操作是在形參自己的存儲(chǔ)單元中進(jìn)行,當(dāng)過程調(diào)用結(jié)束時(shí),這些形參所占用的存儲(chǔ)單元也同時(shí)被釋放。因此在過程體內(nèi)對(duì)形參的任何操作不會(huì)影響到實(shí)參。選用傳值還是傳址的使用規(guī)則:★形參是數(shù)組、自定義類型時(shí),只能用傳地址方式★如果要將過程中的結(jié)果返回給主調(diào)程序,則形參必須是傳址方式?!锍鲜銮闆r外,一般應(yīng)選用傳值方式。例li6-4:編寫一個(gè)兩個(gè)數(shù)交換的過程。為了弄清傳址、傳值的區(qū)別,這里swap1用傳值傳遞,swap2用傳址傳遞。哪個(gè)過程能真正實(shí)現(xiàn)兩個(gè)數(shù)的交換?為什么?例li6-5:編寫函數(shù)過程求N!,調(diào)用該過程計(jì)算
C=R!/((R-K)!*K?。┑闹?.數(shù)組參數(shù)的傳遞在VB中允許參數(shù)是數(shù)組,數(shù)組只能通過傳址方式進(jìn)行傳遞。在傳遞數(shù)組時(shí)要注意以下事情:☆在實(shí)參列表和形參列表中放入數(shù)組名,忽略維數(shù)的定義,但圓括號(hào)不能省略?!钊绻徽{(diào)過程不知道實(shí)參數(shù)組的上下界,可使用Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上下界。例li6-6:編一函數(shù),求任意一維數(shù)組中各元素之積,再分別調(diào)用該函數(shù)。求和的值。四、變量、過程的作用域1.過程的作用域 這里我們只介紹窗體/模塊級(jí)和全局級(jí)的過程?!?/p>
窗體/模塊級(jí)—指在某個(gè)窗體或標(biāo)準(zhǔn)模塊內(nèi)定義的過程,定義的子過程或函數(shù)過程前加Private關(guān)鍵字,過程只能被本窗體或本標(biāo)準(zhǔn)模塊中的過程調(diào)用。VB的應(yīng)用程序由若干個(gè)過程組成,這些過程一般保存在窗體文件(.frm)或標(biāo)準(zhǔn)模塊文件(.bas)中。一個(gè)變量、過程隨所處的位置不同,可被訪問的范圍也不同。變量、過程可被訪問的范圍稱為變量、過程的作用域?!锶旨?jí)—指在窗體或標(biāo)準(zhǔn)模塊中定義的過程,其默認(rèn)是全局的,也可加Public進(jìn)行說明。過程可供該應(yīng)用程序的所有窗體和所有標(biāo)準(zhǔn)模塊中的過程調(diào)用,但根據(jù)過程所處的位置不同,其調(diào)用方式有所區(qū)別:(1)在窗體定義的過程,外部過程要調(diào)用時(shí),必須在過程名前加該過程所處的窗體名。(2)在標(biāo)準(zhǔn)模塊定義的過程,外部過程均可調(diào)用,但過程名必須唯一,否則要加標(biāo)準(zhǔn)模塊名。2.變量的作用域變量的作用域決定了那些子過程和函數(shù)過程可訪問該變量。變量的作用域分為局部變量、窗體/模塊級(jí)變量和全局變量。(1)局部變量—指在過程內(nèi)用Dim語句聲明的變量或不加聲明直接使用的變量,該變量只能在本過程中使用,別的過程不可訪問。局部變量隨過程的調(diào)用而分配存儲(chǔ)單元,并進(jìn)行變量的初始化,在此過程體內(nèi)進(jìn)行數(shù)據(jù)的存取,一旦該過程體結(jié)束,變量的內(nèi)容自動(dòng)消失,占用的存儲(chǔ)單元釋放。(2)窗體/模塊級(jí)變量—指在一個(gè)窗體/模塊的任何過程外,即在“通用聲明”段中用Dim語句或用用Private語句聲明的變量,可被本窗體/模塊的任何過程訪問。(3)全局變量—在“通用聲明”段中用Public語句聲明的變量,可被應(yīng)用程序的任何過程或函數(shù)訪問。全局變量的值在整個(gè)應(yīng)用程序中始終不會(huì)消失和重新初始化。只有當(dāng)整個(gè)應(yīng)用程序執(zhí)行結(jié)束時(shí),才會(huì)消失。例如,在下面一個(gè)標(biāo)準(zhǔn)模塊文件中進(jìn)行不同級(jí)的變量聲明。PublicPaAsinteger'全局變量PrivateMbAsString*10'窗體/模塊級(jí)變量SubF1() DimFaAsinteger'局部變量 ……EndSubSubF1() DimFbAsSingle'局部變量 ……EndSub如果在不同級(jí)別聲明了相同的變量名,如;PublicTempAsInteger'全局變量SubForm_Click() DimTempAsInteger'局部變量
Temp=10'訪問局部變量
Form1.Temp=20'訪問全局變量必須加窗體名
PrintForm1.Temp,TempEndSub
上例中定義了全局變量和局部變量都為Temp,在定義局部變量的過程Form_Click內(nèi)訪問Temp,則局部變量優(yōu)先級(jí)高,把全局變量Temp“屏蔽”掉;若想訪問全局變量,必須在全局變量名前加模塊名。(4)靜態(tài)變量 用Static語句聲明,在程序運(yùn)行過程中可保留變量的值。定義形式有下面幾種:
Static變量名[As類型]
StaticFunction函數(shù)名([參數(shù)列表])[As類型]
StaticSub過程名[(參數(shù)列表)]若函數(shù)名、過程名前加Static,表示該函數(shù)、過程內(nèi)的局部變量都是靜態(tài)變量。五、遞歸用自身的結(jié)構(gòu)來描述自身就稱為“遞歸”。例如:對(duì)階乘的運(yùn)算可定義為:n!=n(n-1)!(n-1)!=(n-1)(n-2)!這樣,用階乘本身來定義階乘,就稱為遞歸定義。VB允許在自定義函數(shù)過程和子過程的內(nèi)部調(diào)用自己,這樣的函數(shù)過程或子過程稱為遞歸函數(shù)過程或遞歸子過程。編寫程序計(jì)算N!。算法分析:負(fù)數(shù)的階乘沒有意義,0的階乘為1,正數(shù)N的階乘為n!=n*(n-1)*(N-2)*…*1,則階乘的計(jì)算表示為:N!=1n=1N*(n-1)!n>1求N的階乘可以轉(zhuǎn)換為求N*(N-1)!Fac(4)=4*fac(3)Fac(3)=3*fac(2)Fac(2)=2*fac(1)Fac(1)=1Fac(2)=2*1Fac(3)=3*2*1Fac(4)=4*3*2*1用遞歸方法求4!示意圖遞推過程回歸過程Li6-8單擊進(jìn)入六、SubMain過程在一個(gè)含有多個(gè)窗體或多個(gè)工程的應(yīng)用程序中,有時(shí)需要在顯示多個(gè)窗體之前對(duì)一些條件進(jìn)行初始化,這就需要在啟動(dòng)程序時(shí)執(zhí)行一個(gè)特定的過程。在VB中,這樣的過程稱為啟動(dòng)過程,并命名為SubMain過程。在一般情況下,整個(gè)應(yīng)用程序從設(shè)計(jì)時(shí)的第一個(gè)窗體開始執(zhí)行,需要首先執(zhí)行的程序代碼放在Form_Load事件中。如果需要從其他窗體開始執(zhí)行應(yīng)用程序,則可通過“工程”菜單中的“工程屬性”命令指定啟動(dòng)窗體。但是,如果有SubMain過程,則可以首先執(zhí)行SubMain過程。SubMain過程只能有一個(gè),它在標(biāo)準(zhǔn)模塊窗口中建立。其方法是:執(zhí)行“工程”菜單中的“添加模塊”命令,打開標(biāo)準(zhǔn)模塊窗口,在該窗口中鍵入: SubMain然后按回車鍵,將顯示該過程的開頭和結(jié)束語句,然后在期間輸入程序代碼。SubMain過程常用來設(shè)定初始化條件,例如:Submain
初始化 ……
form2.showEndsub6.2模塊模塊(module)是相對(duì)獨(dú)立的程序單元。在VB中主要有三種模塊:2.窗體模塊1.標(biāo)準(zhǔn)模塊3.類模塊這里只介紹窗體模塊和標(biāo)準(zhǔn)模塊1.標(biāo)準(zhǔn)模塊
★標(biāo)準(zhǔn)模塊的作用標(biāo)準(zhǔn)模塊也稱為全局模塊或總模塊,由全局變量聲明、模塊層聲明和過程幾部分組成。其中全局聲明放在標(biāo)準(zhǔn)模塊的首部,它總是在程序啟動(dòng)時(shí)執(zhí)行。當(dāng)需要聲明的全局變量或常量較多時(shí),可以把全局聲明放在一個(gè)單獨(dú)的標(biāo)準(zhǔn)模塊中,這樣的標(biāo)準(zhǔn)模塊只含有全局聲明不含任何過程,這樣的模塊在所有基本指令開始之前處理。標(biāo)準(zhǔn)模塊不屬于任何窗體,但可以指定窗體的內(nèi)容,可以在標(biāo)準(zhǔn)模塊中建立新的窗體,然后在窗體模塊中對(duì)窗體進(jìn)行處理。在大型應(yīng)用程序中,主要操作在標(biāo)準(zhǔn)模塊中執(zhí)行,窗體模塊用來實(shí)現(xiàn)與用戶之間的通信。但在只有一個(gè)窗體的應(yīng)用程序中,全部操作通常用窗體模塊就能實(shí)現(xiàn),在這種情況下,標(biāo)準(zhǔn)模塊不是必需的?!飿?biāo)準(zhǔn)模塊的建立通過“工程”菜單中的“添加模塊”命令來建立。執(zhí)行該命令后,顯示“添加模塊”對(duì)話框。利用該對(duì)話框可以:
☆建立新模塊
☆將已有模塊添加到當(dāng)前工程中
☆打開標(biāo)準(zhǔn)模塊代碼窗口進(jìn)行編輯標(biāo)準(zhǔn)模塊作為獨(dú)立的文件存盤,擴(kuò)展名為.bas一個(gè)工程文件可以有多個(gè)標(biāo)準(zhǔn)模塊,也可以把原有的標(biāo)準(zhǔn)模塊加入工程中。VB程序啟動(dòng)時(shí)首先執(zhí)行標(biāo)準(zhǔn)模塊的聲明部分,然后通常從啟動(dòng)窗體指令開始執(zhí)行。而標(biāo)準(zhǔn)模塊中的SUB或FUNCTION過程,只能在窗體指令中通過調(diào)用才能執(zhí)行。2.窗體模塊窗體模塊包括三部分:聲明部分、通用過程部分和事件過程部分。在聲明部分,用DIM語句聲明窗體模塊所需要的變量,其作用域?yàn)檎麄€(gè)窗體模塊,包括該模塊內(nèi)的每個(gè)過程。在聲明部分執(zhí)行之后,VB在事件過程部分查找subForm_Load過程,它是在把窗體裝入內(nèi)存時(shí)所發(fā)生的事件。如果存在這個(gè)過程,則自動(dòng)啟動(dòng)它。在執(zhí)行完SubForm_Load過程之后,如果窗體模塊
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力用戶培訓(xùn)合同(2篇)
- 電費(fèi)合作協(xié)議書(2篇)
- 2024年高中物理第七章機(jī)械能守恒定律第四節(jié)重力勢(shì)能訓(xùn)練含解析新人教版必修2
- 2024-2025學(xué)年五年級(jí)語文上冊(cè)第二單元7金蟬脫殼教案設(shè)計(jì)蘇教版
- 2024年高中政治第二單元第四課第二框認(rèn)識(shí)運(yùn)動(dòng)把握規(guī)律演練含解析新人教版必修4
- 八年級(jí)地理上冊(cè) 第三章 第三節(jié) 水資源說課稿 新人教版
- 精神科工作計(jì)劃范本
- 神經(jīng)內(nèi)科護(hù)理工作計(jì)劃
- 人教版九年級(jí)數(shù)學(xué)上冊(cè)第二十一章一元二次方程《21.2解一元二次方程》第2課時(shí)聽評(píng)課記錄
- 幼兒園春季工作總結(jié)
- 《ISO 55013-2024 資產(chǎn)管理-數(shù)據(jù)資產(chǎn)管理指南》專業(yè)解讀和應(yīng)用指導(dǎo)材料(雷澤佳編制-2024B0)-121-240
- 血透機(jī)常見報(bào)警原因及處理課件
- 房地產(chǎn)行業(yè)房地產(chǎn)銷售業(yè)績考核方案
- 小兒腹瀉課件
- 北京市通州區(qū)市級(jí)名校2025屆高一數(shù)學(xué)第一學(xué)期期末考試試題含解析
- Unit2 Travelling Around Project北京之游學(xué)生作業(yè)教學(xué)設(shè)計(jì) -2023-2024學(xué)年高中英語人教版必修第一冊(cè)
- 工業(yè)機(jī)器人仿真軟件:Epson RC+ Simulator:機(jī)器人基本操作:EpsonRC+Simulator界面介紹
- 項(xiàng)目三任務(wù)1:認(rèn)識(shí)超聲波雷達(dá)(課件)
- 起重機(jī)械生產(chǎn)單位質(zhì)量安全總監(jiān)-特種設(shè)備考試題庫
- DZ∕T 0080-2010 煤炭地球物理測(cè)井規(guī)范(正式版)
- 小學(xué)生心理健康教育學(xué)情分析
評(píng)論
0/150
提交評(píng)論