版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
單元八過程在VB程序設(shè)計(jì)中,除進(jìn)行界面設(shè)計(jì)和算法設(shè)計(jì)外,主要工作是編寫程序代碼,而編寫代碼時根據(jù)應(yīng)用的復(fù)雜程度,往往要將應(yīng)用按功能及其他目的劃分為若干個模塊,而對每個模塊按照情況還可以繼續(xù)細(xì)分為子模塊,通過VB提供的自定義過程將模塊定義為一個個過程,供事件過程多次調(diào)用。在前面的各章節(jié)中,我們已多次使用了事件過程,這樣的過程構(gòu)成了VB應(yīng)用程序的主體。而用戶自定義的過程(也稱為通用過程),可以單獨(dú)建立,供事件過程或其他過程調(diào)用。在VB中根據(jù)過程是否有返回值,可把通用過程分為兩類,即子過程和函數(shù)過程。單元八過程事件過程1子過程2函數(shù)過程3過程間參數(shù)的傳遞4過程的嵌套與遞歸5常用算法實(shí)例68.1事件過程1.事件過程的運(yùn)行機(jī)制事件過程由VB自行聲明,用戶不能增加或刪除。當(dāng)用戶對某個對象發(fā)出一個動作時,Windows會通知VB產(chǎn)生了一個事件,VB會自動地調(diào)用與該事件相關(guān)的事件過程。即當(dāng)對象對一個事件的發(fā)生做出認(rèn)定時,VB便自動用相應(yīng)于事件的名字調(diào)用該事件的過程。由于名字在對象和代碼之間建立了聯(lián)系,所以說事件過程是依附于窗體和控件上的。2.事件過程的語法格式
控件事件過程的語法格式為:PrivateSub〈控件名〉_〈事件名〉([形參表])[語句組]EndSub
窗體事件過程的語法為:PrivateSubForm_〈事件名〉([形參表])[語句組]EndSub返回目錄8.2子過程當(dāng)有幾個不同的事件過程需要執(zhí)行相同的操作時,為了簡化程序,可以將公共語句放入分離開的子過程(通用過程)中,并由事件過程來調(diào)用它。這樣不必重復(fù)編寫代碼,維護(hù)程序也較容易。子過程不與任何特定的事件相聯(lián)系,只能由別的過程來調(diào)用,它可以存儲在窗體或標(biāo)準(zhǔn)模塊中。8.2.1子過程的程序設(shè)計(jì)實(shí)例分別計(jì)算階乘5!,6!,8!,以及它們的和5!+6!+8!。
Subfact(mAsInteger,totalAsLong)DimiAsIntegertotal=1Fori=1Tomtotal=total*iNextiEndSubPrivateSubCommand1_Click(IndexAsInteger)DimaAsInteger,bAsInteger,cAsInteger,sAsLong,totAsLongn=IndexSelectCasenCase0a=5Callfact(a,tot)Label1.Caption=a&"!="&totCase1a=6Callfact(a,tot)Label1.Caption=a&"!="&totCase2a=8Callfact(a,tot)Label1.Caption=a&"!="&totCase3a=5:b=6:c=8Callfact(a,tot)s=totCallfact(b,tot)s=s+totCallfact(c,tot)s=s+totLabel1.Caption=a&"!+"&b&"!+"&c&"!="&sEndSelectEndSub8.2.2子過程程序設(shè)計(jì)的相關(guān)知識1.建立子過程的兩種方法
(1)使用“添加過程”對話框。打開代碼編輯窗口,單擊“工具”菜單→“添加過程”命令,打開“添加過程”對話框。在“名稱”文本框中輸入過程名“fact”,從“類型”組中選中“子程序”項(xiàng),從“范圍”組中選中“公有的”項(xiàng),單擊“確定”按鈕。
(2)在“代碼”編輯窗口中輸入。
[Private|Public][Static]Sub〈過程名〉([形參表])[語句組][ExitSub][語句組]EndSub2.調(diào)用子過程的兩種方法
(1)使用Call語句Call〈過程名〉([實(shí)參表])(2)直接使用過程名〈過程名〉[〈實(shí)參表〉]例如,下面兩個語句都調(diào)用fact子過程:Callfact(5)fact5返回目錄8.3函數(shù)過程函數(shù)是過程的另一種形式,當(dāng)過程的執(zhí)行要返回一個值時,使用函數(shù)過程更方便。VB中包含了許多內(nèi)部函數(shù),如Int、Sqr等。用戶在編寫程序時,只需寫出一個函數(shù)名并給定參數(shù)就能得出函數(shù)值。但是,如果在程序中需要多次用到某一公式或要處理某一函數(shù)關(guān)系,而又沒有現(xiàn)成的內(nèi)部函數(shù)可用時,可以自己編寫Function(函數(shù))過程。8.3.1函數(shù)過程的程序設(shè)計(jì)實(shí)例利用函數(shù)過程,求1!+2!+3!+4!+5!+6!Functionfact(xAsInteger)AsLongDimpAsLong,iAsIntegerp=1Fori=1Toxp=p*i
Nextifact=pEndFunctionPrivateSubCommand1_Click()DimsumAsLong,iAsInteger
Fori=1To6
sum=sum+fact(i)
NextiLabel2.Caption=sumEndSub8.3.2函數(shù)過程程序設(shè)計(jì)的相關(guān)知識1.定義函數(shù)過程的兩種方法
(1)使用“添加過程”對話框。打開“添加過程”對話框,在“類型”中選擇“函數(shù)”,單擊“確定”按鈕。
(2)在“代碼”編輯窗口輸入。[Private|Public][Static]Function〈函數(shù)名〉([形參表])[As類型][語句組][〈函數(shù)名〉=〈表達(dá)式〉][ExitFunction][語句組][〈函數(shù)名〉=〈表達(dá)式〉]EndFunction2.調(diào)用函數(shù)過程的兩種方法
(1)直接調(diào)用在表達(dá)式中直接寫上它的名字。例如,已編有計(jì)算圓面積的函數(shù)過程cir(),調(diào)用方法為:MsgBox"圓面積為:"&cir(10)(2)用Call語句調(diào)用利用下面的代碼都調(diào)用同一個函數(shù)過程:Callcir(10)area103.調(diào)用無參函數(shù)的方法函數(shù)可以沒有參數(shù),在調(diào)用無參函數(shù)時不發(fā)生虛實(shí)結(jié)合。調(diào)用無參函數(shù)得到一個固定的值,如下述無參函數(shù):Functionaa="ABCD"EndFunction
可如下調(diào)用: Printa返回目錄8.4過程間參數(shù)的傳遞8.4.1參數(shù)的基本概念1.參數(shù)的分類在VB中根據(jù)參數(shù)所在的過程,將參數(shù)分為形式參數(shù)和實(shí)際參數(shù)。形式參數(shù)是在子過程和函數(shù)過程的定義中出現(xiàn)的變量名;實(shí)際參數(shù)則是在調(diào)用子過程和函數(shù)過程時,傳送給子過程和函數(shù)過程的常數(shù)、變量、表達(dá)式或數(shù)組。在VB中,通常把形式參數(shù)叫做“形參”,把實(shí)際參數(shù)叫做“實(shí)參”。2.形參表形參表中的各個變量之間用逗號分隔,表中的變量可以是:
(1)后面跟有左、右圓括號的數(shù)組名。
(2)除定長字符串之外的合法變量名。3.實(shí)參表實(shí)參表中的各項(xiàng)用逗號隔開,實(shí)參可以是:
(1)常量;
(2)表達(dá)式;
(3)合法的變量名;
(4)后面跟有左、右括號的數(shù)組名。4.形參與實(shí)參的對應(yīng)關(guān)系
實(shí)參調(diào)用過程:Callts(50,avrg(),"hello",a,b)↓↓↓↓↓定義過程:Subts(nAsInteger,a()AsSingle,bAsrectype,cAsString,dAsSingle)
形參
8.4.2傳址與傳值1.傳址
(1)傳址就是讓過程根據(jù)變量的內(nèi)存地址去訪問實(shí)際變量的內(nèi)容,即形參與實(shí)參使用相同的內(nèi)存地址單元,這樣通過子過程就可以改變變量本身的值。
(2)在傳址調(diào)用時,實(shí)際參數(shù)必須是變量,常量或表達(dá)式無法傳址。
(3)系統(tǒng)缺省按地址傳遞參數(shù)。Subtry(xAsInteger,yAsInteger)x=x+2
y=y+3
Print"x=";x,"y=";y EndSubPrivateSubForm_Click()DimaAsInteger,bAsIntegera=5
b=6
trya,b
Print"a=";a,"b=";bEndSub2.傳值
(1)傳值就是通過值傳送實(shí)際參數(shù),即傳送實(shí)參的值而不是傳送它的地址。
(2)當(dāng)要求變量按值傳送時,可以用下面的方法:①把變量變成一個表達(dá)式。把變量轉(zhuǎn)換成表達(dá)式的最簡單的方法就是把它放在括號內(nèi)。例如把變量用括號括起來,把它變?yōu)橐粋€表達(dá)式,如“(a)”。②定義過程時用ByVal關(guān)鍵字指出參數(shù)是按值來傳遞的,例如:SubPostAc(ByValxAsInteger)x=x+2EndSubSubtry(ByValxAsInteger,ByValyAsInteger)x=x+2
y=y+3
Print"x=";x,"y=";y EndSubPrivateSubForm_Click()DimaAsInteger,bAsIntegera=5
b=6
trya,b
Print"a=";a,"b=";b EndSub返回目錄主程序調(diào)用a
EndSub
a調(diào)用b
EndSub
bEndSub8.5過程的嵌套與遞歸8.5.1過程的嵌套調(diào)用主程序可以調(diào)用子過程,在子過程中還可以調(diào)用另外的子過程,這種程序結(jié)構(gòu)稱為過程的嵌套。輸入?yún)?shù)n,m,求組合數(shù)的值。PrivateFunctionfact(x)p=1Fori=1Toxp=p*iNextifact=p EndFunctionPrivateFunctioncomb(n,m)comb=fact(n)/(fact(m)*fact(n–m)) EndFunctionPrivateSubCommand1_Click()m=Val(Text1.Text)n=Val(Text2.Text)Ifm>nThenMsgBox"輸入數(shù)據(jù)不正確!",0,"請檢查!"
ExitSub
EndIfLabel2.Caption="組合數(shù)是:"&comb(n,m)EndSub
8.5.2過程的遞歸利用遞歸調(diào)用計(jì)算n!,。PrivateFunctionfact(n)AsDoubleIfn>0Then
fact=n*fact(n-1)Elsefact=1EndIfEndFunctionPrivateSubText1_KeyPress(KeyAsciiAsInteger)DimnAsInteger,mAsDoubleIfKeyAscii=13Thenn=Val(Text1.Text0)Ifn<0Orn>20ThenMsgBox("非法數(shù)據(jù)!"):ExitSubm=fact(n)Text2.Text=Format(m,"!@@@@@@@@@@")Text1.SetFocusEndIfEndSub返回目錄8.6常用算法實(shí)例8.6.1將常用公式設(shè)計(jì)為子過程
編寫一個計(jì)算矩形面積的Sub過程,然后調(diào)用該過程計(jì)算矩形面積。Subrecarea(rlen,rwid)Dimareaarea=rlen*rwid
MsgBox"矩形的面積是:"&areaEndSubPrivateSubForm_click()Dima,ba=InputBox("請輸入矩形面積的長度:")b=InputBox("請輸入矩形面積的寬度:")
recareaa,b
EndSub8.6.2利用過程函數(shù)輸出特定的圖形PrivateFunctionstri(nAsInteger,fAsString)p=""Fori=1Tonp=p&""&fNextstri=p EndFunctionPrivateSubForm_Click()DimfAsString*1f=InputBox("顯示的字符:","請輸入","$")
Iff=""Thenf="$"ClsPrintForn=1To7
PrintTab(2*n+2);
Printstri(15–2*n,f);
PrintSpc(8);
Printstri(2*n–1,f);
NextEndSub8.6.3遞歸問題
有5個人坐在一起,問第5個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第3個人大2歲。問第3個人,又說比第2個人大2歲。問第2個人,說比第1個人大2歲。最后問第1個人,他說是10歲。請問第5個人有多大歲數(shù)。PrivateFunctionage(nAsInteger)AsIntegerIfn=1Thenage=10
Elseage=age(n–1)+2EndIfEndFunctionPrivateSubForm_Load()Label2.Caption="答案:第五個人的歲數(shù)是"&age(5)EndSub8.6.4加密、解密問題
實(shí)現(xiàn)英語單詞或短語的加密∕解密操作。加密∕解密的基本原則是:把英語單詞或短語中每個字符的ASCII碼加上2,使其變?yōu)榱硗庖粋€字符。例如“ABCDE”,每個字符的ASCII碼加2,變?yōu)椤癈EDFG”,從而對原來的單詞或短語“加密”。Functionen(inpAsString)DimiAsIntegerDimsoutAsString,scurrentAsString,snewAsStringi=Len(inp)Forx=1Toiscurrent=Mid$(inp,x,1)snew=Chr$(Asc(scurrent)+2)sout=sout&snew
Nextxen=sout EndFunctionFunctionde(inpAsString)DimiAsIntegerDimsoutAsString,scurrentAsString,snewAsStringi=Len(inp)Forx=1Toiscurrent=Mid$(inp,x,1)
snew=Chr$(Asc(scurrent)–2)
sout=sout&snew
Nextxde=soutEndFunctionDimsphAsStringPrivateSubCommand1_Click()Text1.Text=""
Text1.SetFocusEndSubPrivateSubCommand2_Click()DimsenAsStringsen=en(Text1.Text)
Label1.Caption=sen
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒安全教育與培訓(xùn)制度
- 專任教師進(jìn)修培訓(xùn)制度
- 電商培訓(xùn)公司規(guī)章制度
- 培訓(xùn)班消防4個制度
- 培訓(xùn)班接待室封閉管理制度
- 醫(yī)院新上崗醫(yī)生培訓(xùn)制度
- 消毒與滅菌培訓(xùn)制度
- 籃球培訓(xùn)公司規(guī)章制度
- 培訓(xùn)學(xué)校財會規(guī)章制度
- 化工公司員工培訓(xùn)制度
- 2026年重慶市江津區(qū)社區(qū)專職人員招聘(642人)考試參考題庫及答案解析
- 2026年1月福建廈門市集美區(qū)后溪鎮(zhèn)衛(wèi)生院補(bǔ)充編外人員招聘16人筆試模擬試題及答案解析
- 內(nèi)蒙古自治區(qū)通遼市霍林郭勒市2024屆中考語文最后一模試卷含解析
- 復(fù)方蒲公英注射液的藥代動力學(xué)研究
- 單純皰疹病毒感染教學(xué)演示課件
- 廣東省中山市2023-2024學(xué)年四年級上學(xué)期期末數(shù)學(xué)試卷
- 變配電室送電施工方案
- 地質(zhì)勘查現(xiàn)場安全風(fēng)險管控清單
- 松下panasonic-經(jīng)銷商傳感器培訓(xùn)
- 中醫(yī)舌、脈象的辨識與臨床應(yīng)用課件
- 建設(shè)工程項(xiàng)目施工風(fēng)險管理課件
評論
0/150
提交評論