版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章過(guò)程與模塊6.1過(guò)程6.2模塊6.1過(guò)程一、函數(shù)過(guò)程的定義和調(diào)用二、子過(guò)程的定義和調(diào)用三、參數(shù)傳遞四、變量、過(guò)程的作用域五、遞歸六、SubMain過(guò)程在前面幾章中,已經(jīng)使用了系統(tǒng)提供的內(nèi)部函數(shù)和事件過(guò)程。在程序的編寫(xiě)中,對(duì)于較復(fù)雜的問(wèn)題,按照結(jié)構(gòu)化程序設(shè)計(jì)的原則,可把問(wèn)題逐步細(xì)化,分成若干個(gè)功能模塊,通過(guò)VB提供的自定義過(guò)程將功能模塊定義成一個(gè)個(gè)過(guò)程,供事件過(guò)程多次調(diào)用。在VB中自定義過(guò)程有4種:以SUB保留字開(kāi)始的子過(guò)程以Function保留字開(kāi)始的函數(shù)過(guò)程以Property保留字開(kāi)始的屬性過(guò)程以Event保留字開(kāi)始的事件過(guò)程本章介紹子過(guò)程和函數(shù)過(guò)程一、函數(shù)過(guò)程的定義和調(diào)用1.函數(shù)過(guò)程的定義:自定義函數(shù)過(guò)程有兩種方法:★利用“工具”菜單下的“添加過(guò)程”命令定義,步驟為:代碼窗口工具添加過(guò)程名稱框函數(shù)過(guò)程名類型框函數(shù)范圍公有的★利用代碼窗口直接定義在窗體/標(biāo)準(zhǔn)模塊的代碼窗口把插入點(diǎn)放在現(xiàn)有過(guò)程之外,直接輸入函數(shù)過(guò)程。自定義函數(shù)過(guò)程的形式如下:Function函數(shù)過(guò)程名([參數(shù)列表])[As類型] 局部變量或常數(shù)定義 語(yǔ)句塊 [ExitFunction]
語(yǔ)句塊
函數(shù)名=返回值EndFunction說(shuō)明:☆函數(shù)過(guò)程名—與變量命名規(guī)則相同。但不要和VB中的關(guān)鍵字、API函數(shù)及同一級(jí)別的變量重名?!?/p>
As類型—函數(shù)返回值的類型☆參數(shù)列表—形式為:[ByVal]變量名[()][As類型][,…]參數(shù)也稱為形參或啞元,只能是變量或數(shù)組名(要加()),在定義時(shí)沒(méi)有值。
ByVal—表示該過(guò)程被調(diào)用時(shí),參數(shù)是值傳遞(傳值),否則是引用傳遞(傳址)。函數(shù)過(guò)程無(wú)參數(shù)時(shí),函數(shù)過(guò)程名后面的括號(hào)不能省略?!钤诤瘮?shù)體內(nèi)函數(shù)名至少要賦值一次?!頪ExitFunction]—表示退出函數(shù)過(guò)程☆[Static(靜態(tài))][Public(全局)][Private(局部)]—分別聲明了函數(shù)的作用域2.函數(shù)過(guò)程的調(diào)用函數(shù)過(guò)程的調(diào)用和標(biāo)準(zhǔn)函數(shù)的調(diào)用相同,形式如下:
變量=函數(shù)過(guò)程名([參數(shù)列表])注意:☆由于函數(shù)過(guò)程名返回一個(gè)值,故函數(shù)過(guò)程不能作為單獨(dú)的語(yǔ)句加以調(diào)用,必須作為表達(dá)式或表達(dá)式中的一部分,再配以其他的語(yǔ)法成分構(gòu)成語(yǔ)句。
☆“參數(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ù)過(guò)程的應(yīng)用舉例例li6-1已知5邊形的各條邊的長(zhǎng)度和2條對(duì)角線的長(zhǎng)度,計(jì)算5邊形的面積。s3abcdefgs2s1計(jì)算三角形面積的公式為:計(jì)算3個(gè)三角形,使用的公式相同,不同的僅僅是邊長(zhǎng),因此先定義一個(gè)求三角形面積的函數(shù)過(guò)程,然后調(diào)用該函數(shù)求5邊形的面積。 二、子過(guò)程的定義和調(diào)用子過(guò)程的定義 子過(guò)程定義的方法和函數(shù)過(guò)程相同,形式如下: Sub子過(guò)程名[(參數(shù)列表)] 局部變量或常數(shù)定義 語(yǔ)句塊 [ExitSub]
語(yǔ)句塊EndSub其中,子過(guò)程名、參數(shù)列表規(guī)定與函數(shù)過(guò)程相同,但當(dāng)形參沒(méi)有時(shí),括號(hào)也不保留。2.子過(guò)程的調(diào)用子過(guò)程的調(diào)用是一句獨(dú)立的調(diào)用語(yǔ)句,有兩種形式:
Call子過(guò)程名[實(shí)參列表]
子過(guò)程名[實(shí)參列表]前者用Call關(guān)鍵字時(shí),若有實(shí)參,則實(shí)參必須加圓括號(hào)括起來(lái);若無(wú)實(shí)參,圓括號(hào)省略。后者無(wú)Call關(guān)鍵字,故圓括號(hào)也省略。注意:如果實(shí)參要獲得子過(guò)程的返回值,則實(shí)參只能是變量,不能是常數(shù)、表達(dá)式,也不能是控件名。例li6-3:分別編寫(xiě)計(jì)算某級(jí)數(shù)部分和的函數(shù)過(guò)程和子過(guò)程,并分別調(diào)用,求級(jí)數(shù)精度為3.子過(guò)程與函數(shù)過(guò)程的區(qū)別及注意事項(xiàng):
★把某功能定義為函數(shù)過(guò)程還是子過(guò)程,沒(méi)有嚴(yán)格的規(guī)定,但只要能用函數(shù)過(guò)程定義的,肯定能用子過(guò)程定義;反之則不一定。★當(dāng)過(guò)程有一個(gè)返回值時(shí),使用函數(shù)過(guò)程直觀;當(dāng)過(guò)程有多個(gè)返回值時(shí),習(xí)慣用子過(guò)程。
★函數(shù)過(guò)程有返回值,過(guò)程名也就有類型,在函數(shù)過(guò)程體內(nèi)必須對(duì)函數(shù)過(guò)程名賦值;子過(guò)程沒(méi)有值,函數(shù)名也就沒(méi)有類型。
★形參是過(guò)程與主調(diào)程序交互的接口,從主調(diào)程序獲得初值,或?qū)⒂?jì)算結(jié)果返回給主調(diào)程序?!镄螀](méi)有具體的值,只代表了參數(shù)的個(gè)數(shù)、位置、類型,形參只能是簡(jiǎn)單變量,不能是常數(shù)、數(shù)組元素、表達(dá)式。三、參數(shù)傳遞1.傳址與傳值 在VB中,實(shí)參與形參的結(jié)合有兩種方法:即傳址(ByDef)和傳值(ByVal),其中傳址也稱為引用,是默認(rèn)的方法。區(qū)分兩種結(jié)合的方法是在要使用傳值的形參前加上“ByVal”關(guān)鍵字。
傳址的結(jié)合過(guò)程是:當(dāng)調(diào)用一個(gè)過(guò)程時(shí),將實(shí)參的地址傳遞給形參。因此在被調(diào)過(guò)程體中對(duì)形參的任何操作都變成了對(duì)相應(yīng)實(shí)參的操作,實(shí)參的值就會(huì)隨過(guò)程體內(nèi)對(duì)形參的改變而改變。
傳值的結(jié)合過(guò)程是:當(dāng)調(diào)用一個(gè)過(guò)程時(shí),系統(tǒng)將實(shí)參的值復(fù)制給形參,實(shí)參與形參斷開(kāi)了聯(lián)系。被調(diào)過(guò)程中的操作是在形參自己的存儲(chǔ)單元中進(jìn)行,當(dāng)過(guò)程調(diào)用結(jié)束時(shí),這些形參所占用的存儲(chǔ)單元也同時(shí)被釋放。因此在過(guò)程體內(nèi)對(duì)形參的任何操作不會(huì)影響到實(shí)參。選用傳值還是傳址的使用規(guī)則:★形參是數(shù)組、自定義類型時(shí),只能用傳地址方式★如果要將過(guò)程中的結(jié)果返回給主調(diào)程序,則形參必須是傳址方式。★除上述情況外,一般應(yīng)選用傳值方式。例li6-4:編寫(xiě)一個(gè)兩個(gè)數(shù)交換的過(guò)程。為了弄清傳址、傳值的區(qū)別,這里swap1用傳值傳遞,swap2用傳址傳遞。哪個(gè)過(guò)程能真正實(shí)現(xiàn)兩個(gè)數(shù)的交換?為什么?例li6-5:編寫(xiě)函數(shù)過(guò)程求N!,調(diào)用該過(guò)程計(jì)算
C=R!/((R-K)!*K?。┑闹?.數(shù)組參數(shù)的傳遞在VB中允許參數(shù)是數(shù)組,數(shù)組只能通過(guò)傳址方式進(jìn)行傳遞。在傳遞數(shù)組時(shí)要注意以下事情:☆在實(shí)參列表和形參列表中放入數(shù)組名,忽略維數(shù)的定義,但圓括號(hào)不能省略。☆如果被調(diào)過(guò)程不知道實(shí)參數(shù)組的上下界,可使用Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上下界。例li6-6:編一函數(shù),求任意一維數(shù)組中各元素之積,再分別調(diào)用該函數(shù)。求和的值。四、變量、過(guò)程的作用域1.過(guò)程的作用域 這里我們只介紹窗體/模塊級(jí)和全局級(jí)的過(guò)程?!?/p>
窗體/模塊級(jí)—指在某個(gè)窗體或標(biāo)準(zhǔn)模塊內(nèi)定義的過(guò)程,定義的子過(guò)程或函數(shù)過(guò)程前加Private關(guān)鍵字,過(guò)程只能被本窗體或本標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用。VB的應(yīng)用程序由若干個(gè)過(guò)程組成,這些過(guò)程一般保存在窗體文件(.frm)或標(biāo)準(zhǔn)模塊文件(.bas)中。一個(gè)變量、過(guò)程隨所處的位置不同,可被訪問(wèn)的范圍也不同。變量、過(guò)程可被訪問(wèn)的范圍稱為變量、過(guò)程的作用域?!锶旨?jí)—指在窗體或標(biāo)準(zhǔn)模塊中定義的過(guò)程,其默認(rèn)是全局的,也可加Public進(jìn)行說(shuō)明。過(guò)程可供該應(yīng)用程序的所有窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用,但根據(jù)過(guò)程所處的位置不同,其調(diào)用方式有所區(qū)別:(1)在窗體定義的過(guò)程,外部過(guò)程要調(diào)用時(shí),必須在過(guò)程名前加該過(guò)程所處的窗體名。(2)在標(biāo)準(zhǔn)模塊定義的過(guò)程,外部過(guò)程均可調(diào)用,但過(guò)程名必須唯一,否則要加標(biāo)準(zhǔn)模塊名。2.變量的作用域變量的作用域決定了那些子過(guò)程和函數(shù)過(guò)程可訪問(wèn)該變量。變量的作用域分為局部變量、窗體/模塊級(jí)變量和全局變量。(1)局部變量—指在過(guò)程內(nèi)用Dim語(yǔ)句聲明的變量或不加聲明直接使用的變量,該變量只能在本過(guò)程中使用,別的過(guò)程不可訪問(wèn)。局部變量隨過(guò)程的調(diào)用而分配存儲(chǔ)單元,并進(jìn)行變量的初始化,在此過(guò)程體內(nèi)進(jìn)行數(shù)據(jù)的存取,一旦該過(guò)程體結(jié)束,變量的內(nèi)容自動(dòng)消失,占用的存儲(chǔ)單元釋放。(2)窗體/模塊級(jí)變量—指在一個(gè)窗體/模塊的任何過(guò)程外,即在“通用聲明”段中用Dim語(yǔ)句或用用Private語(yǔ)句聲明的變量,可被本窗體/模塊的任何過(guò)程訪問(wèn)。(3)全局變量—在“通用聲明”段中用Public語(yǔ)句聲明的變量,可被應(yīng)用程序的任何過(guò)程或函數(shù)訪問(wèn)。全局變量的值在整個(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'訪問(wèn)局部變量
Form1.Temp=20'訪問(wèn)全局變量必須加窗體名
PrintForm1.Temp,TempEndSub
上例中定義了全局變量和局部變量都為T(mén)emp,在定義局部變量的過(guò)程Form_Click內(nèi)訪問(wèn)Temp,則局部變量?jī)?yōu)先級(jí)高,把全局變量Temp“屏蔽”掉;若想訪問(wèn)全局變量,必須在全局變量名前加模塊名。(4)靜態(tài)變量 用Static語(yǔ)句聲明,在程序運(yùn)行過(guò)程中可保留變量的值。定義形式有下面幾種:
Static變量名[As類型]
StaticFunction函數(shù)名([參數(shù)列表])[As類型]
StaticSub過(guò)程名[(參數(shù)列表)]若函數(shù)名、過(guò)程名前加Static,表示該函數(shù)、過(guò)程內(nèi)的局部變量都是靜態(tài)變量。五、遞歸用自身的結(jié)構(gòu)來(lái)描述自身就稱為“遞歸”。例如:對(duì)階乘的運(yùn)算可定義為:n!=n(n-1)!(n-1)!=(n-1)(n-2)!這樣,用階乘本身來(lái)定義階乘,就稱為遞歸定義。VB允許在自定義函數(shù)過(guò)程和子過(guò)程的內(nèi)部調(diào)用自己,這樣的函數(shù)過(guò)程或子過(guò)程稱為遞歸函數(shù)過(guò)程或遞歸子過(guò)程。編寫(xiě)程序計(jì)算N!。算法分析:負(fù)數(shù)的階乘沒(méi)有意義,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!示意圖遞推過(guò)程回歸過(guò)程Li6-8單擊進(jìn)入六、SubMain過(guò)程在一個(gè)含有多個(gè)窗體或多個(gè)工程的應(yīng)用程序中,有時(shí)需要在顯示多個(gè)窗體之前對(duì)一些條件進(jìn)行初始化,這就需要在啟動(dòng)程序時(shí)執(zhí)行一個(gè)特定的過(guò)程。在VB中,這樣的過(guò)程稱為啟動(dòng)過(guò)程,并命名為SubMain過(guò)程。在一般情況下,整個(gè)應(yīng)用程序從設(shè)計(jì)時(shí)的第一個(gè)窗體開(kāi)始執(zhí)行,需要首先執(zhí)行的程序代碼放在Form_Load事件中。如果需要從其他窗體開(kāi)始執(zhí)行應(yīng)用程序,則可通過(guò)“工程”菜單中的“工程屬性”命令指定啟動(dòng)窗體。但是,如果有SubMain過(guò)程,則可以首先執(zhí)行SubMain過(guò)程。SubMain過(guò)程只能有一個(gè),它在標(biāo)準(zhǔn)模塊窗口中建立。其方法是:執(zhí)行“工程”菜單中的“添加模塊”命令,打開(kāi)標(biāo)準(zhǔn)模塊窗口,在該窗口中鍵入: SubMain然后按回車鍵,將顯示該過(guò)程的開(kāi)頭和結(jié)束語(yǔ)句,然后在期間輸入程序代碼。SubMain過(guò)程常用來(lái)設(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)模塊也稱為全局模塊或總模塊,由全局變量聲明、模塊層聲明和過(guò)程幾部分組成。其中全局聲明放在標(biāo)準(zhǔn)模塊的首部,它總是在程序啟動(dòng)時(shí)執(zhí)行。當(dāng)需要聲明的全局變量或常量較多時(shí),可以把全局聲明放在一個(gè)單獨(dú)的標(biāo)準(zhǔn)模塊中,這樣的標(biāo)準(zhǔn)模塊只含有全局聲明不含任何過(guò)程,這樣的模塊在所有基本指令開(kāi)始之前處理。標(biāo)準(zhǔn)模塊不屬于任何窗體,但可以指定窗體的內(nèi)容,可以在標(biāo)準(zhǔn)模塊中建立新的窗體,然后在窗體模塊中對(duì)窗體進(jìn)行處理。在大型應(yīng)用程序中,主要操作在標(biāo)準(zhǔn)模塊中執(zhí)行,窗體模塊用來(lái)實(shí)現(xiàn)與用戶之間的通信。但在只有一個(gè)窗體的應(yīng)用程序中,全部操作通常用窗體模塊就能實(shí)現(xiàn),在這種情況下,標(biāo)準(zhǔn)模塊不是必需的。★標(biāo)準(zhǔn)模塊的建立通過(guò)“工程”菜單中的“添加模塊”命令來(lái)建立。執(zhí)行該命令后,顯示“添加模塊”對(duì)話框。利用該對(duì)話框可以:
☆建立新模塊
☆將已有模塊添加到當(dāng)前工程中
☆打開(kāi)標(biāo)準(zhǔn)模塊代碼窗口進(jìn)行編輯標(biāo)準(zhǔn)模塊作為獨(dú)立的文件存盤(pán),擴(kuò)展名為.bas一個(gè)工程文件可以有多個(gè)標(biāo)準(zhǔn)模塊,也可以把原有的標(biāo)準(zhǔn)模塊加入工程中。VB程序啟動(dòng)時(shí)首先執(zhí)行標(biāo)準(zhǔn)模塊的聲明部分,然后通常從啟動(dòng)窗體指令開(kāi)始執(zhí)行。而標(biāo)準(zhǔn)模塊中的SUB或FUNCTION過(guò)程,只能在窗體指令中通過(guò)調(diào)用才能執(zhí)行。2.窗體模塊窗體模塊包括三部分:聲明部分、通用過(guò)程部分和事件過(guò)程部分。在聲明部分,用DIM語(yǔ)句聲明窗體模塊所需要的變量,其作用域?yàn)檎麄€(gè)窗體模塊,包括該模塊內(nèi)的每個(gè)過(guò)程。在聲明部分執(zhí)行之后,VB在事件過(guò)程部分查找subForm_Load過(guò)程,它是在把窗體裝入內(nèi)存時(shí)所發(fā)生的事件。如果存在這個(gè)過(guò)程,則自動(dòng)啟動(dòng)它。在執(zhí)行完SubForm_Load過(guò)程之后,如果窗體模塊
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升學(xué)生食堂服務(wù)效率的空間布局方案
- 游戲化教學(xué)在提升小學(xué)生數(shù)學(xué)思維中的應(yīng)用研究
- 教育游戲在語(yǔ)感培養(yǎng)中的應(yīng)用與效果
- 個(gè)人融資居間服務(wù)合同規(guī)范化版本(2024)一
- 科技創(chuàng)新在學(xué)術(shù)研究中的應(yīng)用與發(fā)展
- 科技家居產(chǎn)品安全應(yīng)用趨勢(shì)
- 二零二五版鋁礦加工廠能源消耗監(jiān)測(cè)合同4篇
- 2025年房地產(chǎn)開(kāi)發(fā)商存貨倉(cāng)單質(zhì)押融資合同3篇
- 二零二五版貨物裝卸合同操作規(guī)范2篇
- 二零二五版蜜蜂養(yǎng)殖與生物農(nóng)藥研發(fā)合作框架協(xié)議4篇
- 山東鐵投集團(tuán)招聘筆試沖刺題2025
- 真需求-打開(kāi)商業(yè)世界的萬(wàn)能鑰匙
- 2025年天津市政集團(tuán)公司招聘筆試參考題庫(kù)含答案解析
- GB/T 44953-2024雷電災(zāi)害調(diào)查技術(shù)規(guī)范
- 2024-2025學(xué)年度第一學(xué)期三年級(jí)語(yǔ)文寒假作業(yè)第三天
- 心律失常介入治療
- 6S精益實(shí)戰(zhàn)手冊(cè)
- 展會(huì)場(chǎng)館保潔管理服務(wù)方案
- 監(jiān)理從業(yè)水平培訓(xùn)課件
- 沖鋒舟駕駛培訓(xùn)課件
- 中石化浙江石油分公司中石化溫州靈昆油庫(kù)及配套工程項(xiàng)目環(huán)境影響報(bào)告書(shū)
評(píng)論
0/150
提交評(píng)論