《Sub過程的建立》課件_第1頁
《Sub過程的建立》課件_第2頁
《Sub過程的建立》課件_第3頁
《Sub過程的建立》課件_第4頁
《Sub過程的建立》課件_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第九章

過 程1/25/20241精選課件ppt9.1Sub過程一、Sub過程的建立1.定義Sub過程格式:[Static][Pravite][Public]Sub過程名[(參數(shù)表列)] 語句塊 [ExitSub] [語句塊] EndSub說明:Sub過程以Sub開頭,以EndSub結(jié)束,之間是“過程體”或“子程序體”。格式中的參量的含義如下:①Static:指定了過程中的局部變量在內(nèi)存中的默認(rèn)存儲方式。如果使用了Static,則在每次調(diào)用過程時,過程中的所有局部變量的值保持不變;否則就會被初始化為零。對過程之外定義的變量沒有作用。1/25/20242精選課件ppt②Private:表示Sub過程是私有的過程,只能被本模塊中的其它過程所訪問,其它模塊中的過程不能訪問。③Public:表示Sub過程是公有過程,可以在程序中的任何地方調(diào)用它。④過程名:一個標(biāo)準(zhǔn)的變量名,同一模塊中,不能和一般變量、數(shù)組變量或Functio過程名重名。⑤參數(shù)表列:調(diào)用時傳送給該過程的簡單變量名或數(shù)組名,各名字之間用逗號分隔開?!皡?shù)表列”指明了調(diào)用時傳送給過程的參數(shù)的類型和數(shù)量,每個參數(shù)的格式為:[ByVal]變量名[()][As數(shù)據(jù)類型]其中“變量名”是一個合法的VB中的變量名或數(shù)組名。如果是數(shù)組名,則要在數(shù)組名后加上一對括號?!皵?shù)據(jù)類型”指的是變量的類型。ByVal參數(shù)是可選的,如選擇了,則說明該參數(shù)是傳值的,沒有的話就是“引用”1/25/20243精選課件ppt(2)EndSub語句標(biāo)志著Sub過程的結(jié)束,每個Sub過程中必須有一個EndSub子句,當(dāng)程序執(zhí)行到EndSub時,就會退出該過程,并且返回到調(diào)用該過程的語句的下一條語句。在Sub過程中還可以有一個或多個ExitSub語句可以從過程中退出。(3)Sub過程不允許嵌套。即Sub過程中不能再定義Sub過程或Function過程,不能用GoTo、GoSub或Return語句進(jìn)入或退出一個Sub過程,只能通過正常調(diào)用來執(zhí)行Sub過程,而且可以嵌套嵌套調(diào)用。[舉例9.1]

1/25/20244精選課件ppt2.建立Sub過程通用過程不屬性任何一個在事件過程,只能建立在標(biāo)準(zhǔn)模塊或窗體模塊中。標(biāo)準(zhǔn)模塊的建立有二種方法:

第一種方法的操作步驟是:

(1)執(zhí)行“工程”中的“添加模塊”命令,打開“添加模塊”對話框選擇“新建”選項卡,雙擊“模塊”圖標(biāo),打開代碼窗口。

(2)執(zhí)行“工具”中的“添加過程”命令,打開“添加過程”對話框。

(3)在“名稱”框中輸入過程名。

(4)在“類型”欄中選擇過程的類型。

(5)在“范圍”欄中選擇過程的適用范圍,公有的或私有的。

第二種方法的操作步驟是:執(zhí)行“工程”中的“添加模塊”命令,打開模塊代碼窗口,然后在窗口中鍵入過程的第一行開始。1/25/20245精選課件ppt二、調(diào)用Sub過程調(diào)用一個Sub過程,就是要執(zhí)行該過程。調(diào)用執(zhí)行有二種方式,一種是將過程的名字放在一個Call語句中,另一種是直接將過程名字作為一個語句來使用。1.用Call語句來調(diào)用Sub過程格式:Call過程名[(實際參數(shù))]在調(diào)用時,實際參數(shù)的數(shù)量、類型都要和Sub過程定義中的參數(shù)的數(shù)量和類型都要一樣?!皩嶋H參數(shù)”是傳送給Sub過程的變量或常數(shù)。例:callTryout(a,b)2.把過程名作為一個語句來使用和前一種相比,沒有了關(guān)鍵字Call,在實際參數(shù)中也沒有了括號。 Trya,b舉例說明:求素數(shù)[例9.1]延遲指定時間[例9.2]1/25/20246精選課件ppt三、通用過程與事件過程控件事件過程的一般格式:{Private|Public}Sub控件名_事件名(參數(shù)表)語句組Endsub窗體事件的一般格式:{Private|Public}subForm_事件名(參數(shù)表)語句組EndSub調(diào)用的一般格式:

模塊名.過程名(參數(shù)表)1/25/20247精選課件ppt9.2Function過程一、Function過程的定義Function過程定義的格式如下:[Static][Private][Public]Function過程名[(參數(shù)表列)][As類型]

語句塊 [過程名=表達(dá)式] [ExitFunction] [語句塊]EndFunction說明:(1)Function過程以Function開頭,以EndFunction結(jié)束,之間是“過程體”或“函數(shù)體”。格式中參數(shù)的含義與子過程Sub中的完全一樣。1/25/20248精選課件ppt(2)調(diào)用Sub過程相當(dāng)于執(zhí)行一個語句,它不會返回任何值;而執(zhí)行一個Function過程,一定會返回一個函數(shù)值,所以它可以相內(nèi)部函數(shù)一樣在表達(dá)式中使用它。在Function過程中至少有一條語句是“過程名=表達(dá)式”這樣的,即將要返回的值傳送給過程名。(3)過程不能嵌套,即不能在事件過程中再來定義過程(包括過程和Function過程),只能在事件過程中調(diào)用相應(yīng)的過程。建立Function過程的方法和建立Sub過程的方法一樣。FunctionBinarySearch(lowerasinteger,upperasinteger)asboolean……Iflower=upperthen

binarysearch=trueexitfunctionelse

binarysearch=falseendif……endfunction1/25/20249精選課件ppt二、調(diào)用Function過程Function過程可以像內(nèi)部函數(shù)一樣來使用。Function過程本身就要返回一個值,所以實際上就是一個函數(shù),通常稱為子函數(shù)。舉例:最大公約數(shù)、隨機(jī)數(shù)1/25/202410精選課件ppt聲明文件窗體模塊(.frm)文件類模塊(.cls文件)標(biāo)準(zhǔn)模塊(.bas文件)子程序過程(sub)函數(shù)過程(func_tion)事件過程(sub)聲明部分

應(yīng)用程序工程文件(.vbp)子程序過程(sub)函數(shù)過程(func_tion)事件過程(sub)1/25/202411精選課件ppt9.3參數(shù)傳遞在調(diào)用一個過程時,必須要將實際參數(shù)傳送到過程中去完成實際參數(shù)和形式參數(shù)的結(jié)合,然后用實際參數(shù)執(zhí)行執(zhí)行過程。一、形參和實參

形參是在過程定義中出現(xiàn)的變量名實參是在調(diào)用過程時傳送給過程的常數(shù)、變量、表達(dá)式或數(shù)組。在VB中有二種方式來傳送參數(shù),即按位置傳送和指名傳送。1.按位置傳送實際參數(shù)的次序必須和形式參數(shù)的次序完全一樣,參數(shù)的位置、數(shù)量和類型都必須保持一致。在形參中,只能是變長的字符串(如x$、xAsString),而不能用定長字符串來作為形參的定義(如xAsString*8)。1/25/202412精選課件pptSubtestsub(aasinteger,array()assingle,recvarasrectype,casstring)

…………TyperectypeRandasstring*12SerialNumaslongEndtypeDimrecvasrectypeCalltestsub(x,a(),recv,dephone)1/25/202413精選課件ppt

2.指名傳送指名參數(shù)傳送即將要傳送的實際參數(shù)的值用“:=”的形式賦給對應(yīng)的形參。這樣的傳送方式只認(rèn)形參的名,而不認(rèn)形參的傳送位置。例:subadd_num(xasinteger,yasinteger,zasinteger) r=(x+y)*z printrendsub下面的四條調(diào)用語句都是執(zhí)行相同的功能 add_num4,6,8 add_numx:=4,y:=6,z:=8 add_numy:=6,x:=4,z:=8 add_numz:=8,y:=6,

x:=41/25/202414精選課件ppt二、引用在VB中有二種方式來傳送參數(shù),即傳地址和傳值。其中傳地址習(xí)慣上稱為“引用”。在默認(rèn)的情況下,變量都是通過“引用”的方式來傳送給過程的。如在過程中改變了參數(shù)的值,則就會改變傳送給過程的實參的值。因為實際參數(shù)是存放在內(nèi)存中的某個地址中,通過引用來調(diào)用一個過程時,只是將實參的地址傳送給相應(yīng)的形參,所以,實參和形參的地址是同一個,當(dāng)形參中的內(nèi)容改變時,實參的內(nèi)容也相應(yīng)的改變了。如果在調(diào)用過程中不希望改變實參的值,則不能使用這種引用的方式,只能用傳值的方式。傳送地址比傳值能夠節(jié)省內(nèi)存和提高工作效率。過程中的形參只是一個地址,系統(tǒng)不要為它的值分配內(nèi)存空間,只需要記住它是一個地址就可。(對字符串的引用比較明顯)[例9.6][例9.7]1/25/202415精選課件ppt三、傳值傳值就是通過傳送實參的實際的值到過程中的形參,而不傳送相應(yīng)的地址。這種情況下,則需要將實參的值先保存在內(nèi)存中的一個臨時單元中,再將該單元的地址傳送給形參。因為被調(diào)用的過程沒有真真地訪問實參變量的原始地址,也就不會改變原來實參變量的值。傳值是通過加上關(guān)鍵字ByVal來實現(xiàn)的。即在形參前面加上ByVal,則該形參的傳送就是傳送的值。傳送地址的效率比傳值的要高,但在傳送地址方式中,形參并不是一個真真的局部變量,則有可能會對程序的正常執(zhí)行帶來意想不到的結(jié)果。所以在有些情況下,只能用傳值的方式才能得到正確的結(jié)果。例[9.3.3]例[9.3.3.1]1/25/202416精選課件ppt四、數(shù)組參數(shù)的傳送在VB中允許將數(shù)組作為實參傳送到過程中。例:Subs(a(),b())…… EndSub在這個過程中有二個數(shù)組形參。在用數(shù)組作形參時,應(yīng)在數(shù)組名的后面加上一對括號,不要和普通變量混淆。調(diào)用此過程時可用命令CallS(p(),q())這樣,數(shù)組p,q就作為實參傳送給過程中的數(shù)組a,b,這種傳送方式是傳送地址,而不是傳值。在傳送地址的方式中,形參的值改變也會使實參中相應(yīng)的值改變。在傳送數(shù)組時,除基本的規(guī)則外,還應(yīng)注意:(1)傳送數(shù)組全部元素時,數(shù)組名在形參、實參表中出現(xiàn),并且省略相應(yīng)的上下界,但是括號不能省略。例[9.8](2)如果不是整個數(shù)組傳送,而只是傳送單個元素時,這時就要在實參中加上指定數(shù)組元素的下標(biāo)。例[9.3.4](3)lboundheubound函數(shù)控制整個循環(huán)。例[9.3.4.1]例[9.9]1/25/202417精選課件ppt(4)傳送記錄類型變量typestockitempartnumberasstring*8descriptionasstring*8unitpriceassinglequantityasintrgerEndtypeDimstockrecordasstockitemCallfindrecord(stockrecord)Subfinfrecord(recordvarasstockitem)……Endsub1/25/202418精選課件ppt(5)單個記錄元素的傳送:實參表中:記錄名.元素名typestockitempartnumberasstring*8descriptionasstring*8unitpriceassinglequantityasintrgerEndtypeSubPrintpriceTeg(descasstring,priceassingle)……EndsubDimstickrecordasstockitemCallprintpriceteg(stockrecord.description,stockrecord.unitprice)……1/25/202419精選課件ppt例9.10用梯形法求定積分將積分區(qū)間[a,b]n等分,小區(qū)間的長度為,第i塊小矩形的近似面積為:整個積分的結(jié)果為這n塊小面積的累加,即:S=h/2[f(a)+2f(a+h)+2f(a+2h)+…+2f(a+(n-1)h)+f(b)]1/25/202420精選課件ppt9.4可選參數(shù)和可變參數(shù)一、可選參數(shù)在前面講的要求一個過程中的形參數(shù)量是固定的,調(diào)用時傳送的實參的數(shù)量要和形參的數(shù)量相同。實際上在VB的過程中還可指定一個或多個形參是可選參數(shù)。定義可選參數(shù)用的是關(guān)鍵字Optional,在過程中使用可選參數(shù)時要利用函數(shù)IsMissing()來測試是否傳送了可選參數(shù)。 SubMulti(firAsInteger,secAsInteger,Optionalthi) n=fir*sec IfNotIsMissing(thi)Thenn=n*thi Printn EndSub在調(diào)用時,二個或三個實參都是正確的??蛇x參數(shù)在過程中定義時,都有要放在參數(shù)表的最后,并且必須是Variant類型??蛇x參數(shù)可以有多個。1/25/202421精選課件ppt二、可變參數(shù)

格式:Sub過程名(ParaArray數(shù)組名)這時數(shù)組名是一個形參,只有名字和括號,而沒有上下界。例如,使用可變參數(shù)來建立一個求出任意多個數(shù)乘積的過程。 SubMulti(ParaArrayNum()) n=1 ForEachxInNum:n=n*x:nextx printn EndSub調(diào)用時可用節(jié)Multi2,3,4,5或Multi3,6,9,并且因為可變參數(shù)是變體類型,只能使用傳送地址的方式。1/25/202422精選課件ppt9.5對象參數(shù)除了一般可用變量作為形式參數(shù)外,在VB中還可以使用對象作為參數(shù),即窗體或控件作為通用過程的參數(shù)。一、窗體參數(shù)設(shè)計一個多窗體的程序,有多個窗體,除了名字不一樣外,窗體的位置、大小都有相同。一般情況下可以這樣來寫:Form1.Left=2000:Form1.Top=3000Form1.Width=5000:Form1.Height=3000Form2.Left=2000:Form2.Top=3000Form2.Width=5000:Form2.Height=3000……1/25/202423精選課件ppt可以用窗體作為參數(shù),編寫一個通用的過程。SubFormSet(FormNumAsForm)

FormNum.Left=2000

FormNum.Top=3000

FormNum.Width=5000

FormNum.Height=3000EndSub在調(diào)用時,可以使用窗體作為實參。例:FormSetForm1即可設(shè)置窗體Form1的位置和大小。在上述過程中,形參FormNum的類型為窗體(Form)二、控件參數(shù)控件也可以作為過程中的形參,它的類型為Control,在過程中可以設(shè)置控件所需的屬性,再用不同的控件來調(diào)用此過程。1/25/202424精選課件ppt控件作為參數(shù)的使用比窗體要復(fù)雜一些,因為不同的控件所具有的屬性并不一樣,如在調(diào)用過程時,用不同的控件來作實參,而該控件產(chǎn)不具有該屬性時,就會產(chǎn)生錯誤。為了保證實參中的控件和形參中的控件是同一類型的控件,VB中提供了一個語句TypeOf來檢查某個控件參數(shù)是否屬于某種控件類型。格式:TypeOf控件名稱Is控件類型這里的控件類型是控件的關(guān)鍵字。1/25/202425精選課件ppt9.6局部內(nèi)存分配我們前面講過靜態(tài)變量。靜態(tài)變量只能出現(xiàn)在事件過程、Sub過程或Function過程中。只是局部變量。但在過程結(jié)束后,該變量的值仍然會保留下來。格式:Static變量表在程序設(shè)計中,常用于以下二種情況。(1)記錄一個事件被觸發(fā)的次數(shù),即程序運(yùn)行時事件發(fā)生的次數(shù)。[舉例9.6.1](2)用于作為開關(guān)切換的變量[舉例9.6.2]。說明:

(1)用Static語句定義的變量可以和在模塊定義的變量或全局變量重名。(2)過程內(nèi)的該變量只是局部變量。(3)用數(shù)組作為局部變量放在該語句中時,使用前應(yīng)標(biāo)出其維數(shù)。subsubpro()staticarr(-5to5)asinteger……endsub1/25/202426精選課件ppt9.7遞歸

遞歸就是過程調(diào)用過程本身。VB中的過程具有遞歸調(diào)用功能,遞歸分成二類:直接遞歸和間接遞歸。遞歸在階乘運(yùn)算、級數(shù)運(yùn)算等某些方面特別有效。在執(zhí)行遞歸操作時,VB將遞歸過程中的相關(guān)信息存放在堆棧中。32位版本的遞歸調(diào)用的層數(shù)沒有限制。[例9.13]:N!

[例9.14]最大公約數(shù)

[例9.15]1/25/202427精選課件ppt1/25/202428精選課件pptSubf1(x)…x=f2(xx)*3…EndSubSubCommand1_Click()……Callf1(y)EndSubFunctionf2(x)……

f2=f3(x)+3EndSubFunctionf3(x)……

f3=x*xEndSubSubf1(x)…Callf1(y)EndSub過程的直接調(diào)用SubCommand1_Click()……Callf1(y)EndSub過程的遞歸調(diào)用1/25/202429精選課件ppt

遞歸過程過程在自身定義的內(nèi)部調(diào)用自己。Functionfac(nAsInteger)AsIntegerIfn=1Then fac=1Else fac=n*fac(n-1)EndIfEndFunctionSubCommand1_Click() Print“fac(4)=”;fac(4)EndSub結(jié)果: fac(4)=241/25/202430精選課件ppt遞推回歸在遞歸處理中,用棧來實現(xiàn)。棧中存放形參、局部變量、返回地址。遞推過程:每調(diào)用自身,當(dāng)前參數(shù)壓棧,直到達(dá)到遞歸結(jié)束條件。回歸過程:不斷從棧中彈出當(dāng)前的參數(shù),直到??铡_f歸算法設(shè)計簡單,但消耗的機(jī)時和占據(jù)的內(nèi)存空間比非遞歸大。思考:若上述fac函數(shù)中:Ifn=1Thenfac=1即僅有語句: fac=n*fac(n-1) 或n<=0

程序運(yùn)行將造成何結(jié)果?由此可見構(gòu)成遞歸的結(jié)構(gòu)如下:

遞歸結(jié)束條件及結(jié)束時的值;能用遞歸形式表示,并且遞歸向終止條件發(fā)展。1/25/202431精選課件ppt[例9.14]:利用遞歸求最大公約數(shù)PublicFunctiongcd(mAsInteger,nAsInteger)AsIntegerIf(mModn)=0Thengcd=nElsegcd=gcd(n,mModn)EndIfEndFunctionPrivateSubForm_Click()Printgcd(10,4)EndSub1/25/202432精選課件ppt分析以下子過程的功能,當(dāng)n=100,r=8,結(jié)果是多少?

PublicSubf(ByValn%,ByValr%)

①Ifn>rThenCall

f(n\r,r)②PrintnModr;EndSubPrivateSubCommand1_Click()Callf(100,8)EndSub顯示結(jié)果1441/25/202433精選課件ppt9.8Shell函數(shù)在VB中,不但可以調(diào)用通用過程,而且可以調(diào)用各種應(yīng)用程序。即凡能在Windows下運(yùn)行的應(yīng)用程序基本上都可以在VB中調(diào)用。

Shell函數(shù)的格式:

Shell(命令字符串[,窗口類型])

[例9.16]1/25/202434精選課件ppt

“命令字符串”是要執(zhí)行應(yīng)用程序的文件名(包括路徑)它必須是可執(zhí)行文件。調(diào)用某個應(yīng)用程序并成功地執(zhí)行后,Shell函數(shù)返回一個任務(wù)標(biāo)識。以異步方式執(zhí)行其他程序。用該函數(shù)啟動的程序還沒有執(zhí)行完,就可能已經(jīng)執(zhí)行Shell后面的語句了。1/25/202435精選課件ppt第九章

菜單程序設(shè)計1/25/202436精選課件ppt9.1VB的菜單菜單的作用有兩個:一是提供人機(jī)對話的界面;二是管理應(yīng)用系統(tǒng),控制各功能模塊的正常運(yùn)行。菜單分成兩種基本類型:彈出式菜單和下拉式菜單。這二種菜單是在Windows中最常見的菜單了。下拉式菜單是一種典型的窗口式菜單。窗口是屏幕上的一個特定的矩形區(qū)域,可顯示也可隱藏,多個窗口之間可以互相覆蓋。在Windows中下拉式菜單用的最多。在下拉式菜單中,有一個主菜單,其中包括若干個選項,每一項又可“下拉”出下一級的子菜單,這樣逐級下拉,用一個個窗口的形式彈出在屏幕上,選擇后

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論