學(xué)習(xí)課件總講vb6過(guò)程_第1頁(yè)
學(xué)習(xí)課件總講vb6過(guò)程_第2頁(yè)
學(xué)習(xí)課件總講vb6過(guò)程_第3頁(yè)
學(xué)習(xí)課件總講vb6過(guò)程_第4頁(yè)
學(xué)習(xí)課件總講vb6過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩85頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

上課了6

過(guò)程6.1過(guò)程與模塊的概念6.2Sub子過(guò)程的定義及其調(diào)用6.3Function函數(shù)過(guò)程的定義及其調(diào)用6.4參數(shù)的傳遞6.5變量與過(guò)程的作用域6.6過(guò)程的遞歸調(diào)用6.7常用算法舉例(三)6.8多重窗體的程序設(shè)計(jì)(1)過(guò)程的引入:

(a)較大的程序段分成若干小程序段

(b)獨(dú)立出需要多次調(diào)用的程序段

實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì)思想的重要方法6.1

過(guò)程與模塊的概念6.1.1

過(guò)程

(2)分類:

兩類:系統(tǒng)提供的內(nèi)部函數(shù)過(guò)程和事件過(guò)程;用戶根據(jù)自己需要定義的通用過(guò)程。(3)事件過(guò)程 存儲(chǔ)在窗體模塊文件中(.frm)優(yōu)點(diǎn):①程序模塊化,功能明確,清晰,易于修改和維護(hù)

②可在不同程序段調(diào)用,避免重復(fù)編程6.1.1

過(guò)程

函數(shù)過(guò)程(Function)(有返回值)

通用過(guò)程

子過(guò)程(Sub)(沒(méi)有返回值)

屬性過(guò)程(Property)

事件過(guò)程(Event)

按作用域劃分:公有過(guò)程(Public)可被程序中的任意過(guò)程調(diào)用私有過(guò)程(Private)只被同一模塊中的過(guò)程調(diào)用可存儲(chǔ)在窗體模塊或標(biāo)準(zhǔn)模塊

(4)通用過(guò)程6.1.1

過(guò)程

是VB程序?yàn)榱藢⒉煌愋瓦^(guò)程代碼組織到一起而提供的一種結(jié)構(gòu)。

(1)窗體模塊(文件擴(kuò)展名為.frm)

每個(gè)窗體對(duì)應(yīng)一個(gè)窗體模塊,窗體模塊包含窗體及其控件的屬性設(shè)置、事件過(guò)程、窗體級(jí)變量的說(shuō)明、窗體內(nèi)的通用過(guò)程說(shuō)明6.1.2模塊(2)標(biāo)準(zhǔn)模塊(.bas)

需要在多個(gè)窗體中共享的代碼,應(yīng)被組織到標(biāo)準(zhǔn)模塊中。標(biāo)準(zhǔn)模塊可以保存通用過(guò)程以及一些相關(guān)的說(shuō)明(全局變量、模塊級(jí)變量的聲明等)。添加標(biāo)準(zhǔn)模塊的方法:“工程”

+“添加模塊”(3)類模塊(.cls)

可在類模塊中編寫(xiě)代碼,創(chuàng)建新的對(duì)象類的屬性以及方法的定義。可參見(jiàn)VB聯(lián)機(jī)幫助6.1.2模塊應(yīng)用程序(.vbp文件)一個(gè)或若干個(gè)窗體模塊文件(*.frm)一個(gè)或若干個(gè)標(biāo)準(zhǔn)模塊文件(*.bas)類模塊文件(*.cls)事件過(guò)程(Sub)用戶自定義子過(guò)程(Sub)用戶自定義函數(shù)過(guò)程(Function)用戶自定義子過(guò)程(Sub)用戶自定義函數(shù)過(guò)程(Function)VB應(yīng)用程序的結(jié)構(gòu)6.2.1

定義Sub子過(guò)程[Public|Private][Static]

Sub

子過(guò)程名([參數(shù)列表])

局部變量或常量聲明 語(yǔ)句塊

[ExitSub]

語(yǔ)句塊

EndSub

6.2Sub子過(guò)程的定義及其調(diào)用形式參數(shù)過(guò)程體

過(guò)程名:

(與標(biāo)示符的命名規(guī)則相同)

不要與VB關(guān)鍵字同名 不要與WINDOWSAPI函數(shù)重名注意

參數(shù)列表形式:

[ByVal]變量名[()][As類型]_[,[ByVal]變量名[()][As類型]…]

參數(shù)列表中的參數(shù)稱為形參,

無(wú)參函數(shù)過(guò)程名后的()不可缺省

ByVal:表示其后的形參數(shù)是按值傳遞,

缺省ByVal或用ByRef:表明參數(shù)是按地址傳遞。Sub子過(guò)程不能嵌套定義例:Subexl(ByValxAsInteger,yAsInteger)x=x+2y=y+x*2Printx,yEndSubSubswap(xAsInteger,yAsInteger) DimtempAsInteger Ifx<yThen temp=x:x=y:y=temp EndIfEndSub有兩種方法:在VB中,打開(kāi)“代碼編輯器”窗口,利用“工具”菜單下的“添加過(guò)程”命令定義利用代碼窗口直接定義

在“代碼編輯器”窗口中的“對(duì)象”列表框中選“通用”,再在文本編輯區(qū)空白行處鍵入“Privatesub過(guò)程名”或“Publicsub過(guò)程名”

6.2.2建立Sub子過(guò)程復(fù)習(xí)數(shù)組排序:選擇法、冒泡法查找:順序、二分查找刪除、插入通用過(guò)程的分類:Sub子過(guò)程、Function函數(shù)過(guò)程、Property屬性過(guò)程、Event事件過(guò)程模塊的分類:窗體模塊、標(biāo)準(zhǔn)模塊、類模塊Sub子過(guò)程的定義、建立方法調(diào)用格式:子過(guò)程名[參數(shù)列表]

CALL子過(guò)程名(參數(shù)列表)實(shí)在參數(shù)6.2.3Sub子過(guò)程的調(diào)用舉例.輸入兩個(gè)整數(shù),按從大到小輸出。PrivateSubswap(xAsInteger,yAsInteger) DimtempAsInteger Ifx<yThen temp=x:x=y:y=temp EndIfEndSubPrivateSubCommand1_Click()DimaAsInteger,bAsIntegera=Val(Text1.Text):b=Val(Text2.Text)Ifa<bThen

callswap(a,b)‘過(guò)程的調(diào)用,或swapa,bEndIfPrinta,bEndSub形式參數(shù)x,y(地址傳遞)實(shí)在參數(shù)a,b參數(shù)列表:

稱為實(shí)參或?qū)嵲趨?shù),它必須與形參保持個(gè)數(shù)相同,位置與類型一一對(duì)應(yīng)。參數(shù)傳遞:調(diào)用時(shí)把實(shí)參的值或地址傳遞給形參值傳遞

實(shí)參的值不隨形參的值變化而變化

引用傳遞

實(shí)參的值隨形參的值變化而改變有多個(gè)實(shí)參時(shí),實(shí)參間要用逗號(hào)分隔過(guò)程調(diào)用注意事項(xiàng):6.2.3Sub子過(guò)程的調(diào)用調(diào)用子過(guò)程的形式有兩種:

①若用Call關(guān)鍵字時(shí),實(shí)參必須用圓括號(hào)括起,且左括號(hào)與函數(shù)名間不能有空格;若實(shí)參為空,則可省略括號(hào)

②把過(guò)程名作為一個(gè)獨(dú)立語(yǔ)句來(lái)用,實(shí)參不用空括號(hào)括起來(lái),且第一個(gè)參數(shù)與過(guò)程名間要有空格當(dāng)參數(shù)是數(shù)組時(shí),形參與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略其維數(shù),但括號(hào)不能省。若形參變量的類型為String,則只能是不定長(zhǎng)的。過(guò)程可以嵌套調(diào)用P1636.2.3Sub子過(guò)程的調(diào)用例6-1,求組合數(shù)'定義求階乘的Sub子過(guò)程facPrivateSubfac(ByValnAsInteger,fAsLong)DimiAsIntegerf=1Fori=1Tonf=f*iNextiEndSub6.2.3Sub子過(guò)程的調(diào)用'“=”的click事件PrivateSubCommand1_Click()DimmAsInteger,nAsIntegerDimfmAsLong,fnAsLong,fmnAsLongm=Val(txtm):n=Val(txtn)

facm,fm

’計(jì)算m的階乘

Callfac(n,fn)

’計(jì)算n的階乘

Callfac(m-n,fmn)

’計(jì)算m-n的階乘

txtResult=Str(fm/(fn*fmn))EndSubf是表示返回計(jì)算結(jié)果的參數(shù)示例6-1

函數(shù)過(guò)程是帶有返回值的特殊過(guò)程。

6.3.1Function函數(shù)過(guò)程定義[Public|Private][Static]

Function

函數(shù)名([參數(shù)列表])[As類型]

局部變量或常量聲明 語(yǔ)句塊函數(shù)名=表達(dá)式

[ExitFunction]

語(yǔ)句塊函數(shù)名=表達(dá)式

EndFunction函數(shù)體6.3Function函數(shù)過(guò)程的定義及其調(diào)用[As類型]指定函數(shù)返回值的類型。若省略,則返回變體型函數(shù)的命名規(guī)則同Sub子過(guò)程名如果沒(méi)有“函數(shù)名=表達(dá)式”,則返回對(duì)應(yīng)類型的缺省值在函數(shù)體內(nèi),可以像使用簡(jiǎn)單變量一樣使用函數(shù)名Function函數(shù)過(guò)程不能嵌套定義建立Function函數(shù)過(guò)程的方法與建立Sub子過(guò)程相同

說(shuō)明:6.3.1Function函數(shù)過(guò)程定義

例6-2求圓面積的函數(shù)過(guò)程:PrivateFunctionCir(ByValrAsSingle)AsSingleConstPI!=3.1415926

Cir=PI*r*r

‘給函數(shù)名賦值EndFunction6.3.1Function函數(shù)過(guò)程定義例6-3求N階乘的函數(shù)過(guò)程:PrivateFunctionFact(ByValNAsInteger)AsLongDimkAsInteger

Fact=1IfN=0OrN=1ThenExitFunctionElseFork=1ToN

Fact=Fact*kNextkEndIfEndFunction6.3.1Function函數(shù)過(guò)程定義調(diào)用格式:

變量名=函數(shù)過(guò)程名([實(shí)參數(shù)表])

例如:調(diào)用例6-2,求兩個(gè)圓面積之和

Sum=Cir(20)+Cir(30)

6.3.2Function函數(shù)過(guò)程的調(diào)用注意:①實(shí)參同Sub子過(guò)程②調(diào)用時(shí)必須給實(shí)參加上括號(hào)③允許像調(diào)用Sub子過(guò)程那樣調(diào)用Function過(guò)程如:CallCir(20) Cir20

但這種調(diào)用放棄了返回值

6.3.2Function函數(shù)過(guò)程的調(diào)用

例:調(diào)用例6-3求階乘的函數(shù)過(guò)程,求例6-1中的組合數(shù)。

PrivateSubCommand1_Click()DimmAsLong,nAsIntegerm=Val(txtm)n=Val(txtn)txtResult=

Fact(m)/(Fact(n)*Fact(m-n))EndSub

6.3.2Function函數(shù)過(guò)程的調(diào)用不同之處:函數(shù)過(guò)程通過(guò)函數(shù)名有返回值,因此定義時(shí)需要有返回值的類型說(shuō)明。

Sub子過(guò)程通過(guò)變量返回值相同點(diǎn):完成某種特定功能的一組程序代碼總結(jié)函數(shù)過(guò)程與子過(guò)程

6.3.2Function函數(shù)過(guò)程的調(diào)用‘判斷素?cái)?shù)的prime函數(shù)過(guò)程:PrivateFunctionprime(ByValmAsInteger)AsBoolean

DimiAsIntegeri=2

prime=TrueDoWhileprimeAndi<=Sqr(m)IfmModi=0Then

prime=FalseElsei=i+1EndIfLoopEndFunction例6-5求孿生素?cái)?shù)Fori=2ToSqr(m)IfmModi=0Then

prime=FalseExitForEndIfNexti‘窗體的單擊事件調(diào)用prime函數(shù)過(guò)程:PrivateSubForm_Click()DimkAsInteger,jAsIntegerj=3DoWhilej<=99Ifprime(j)Andprime(j+2)Thenk=k+1Printj,j+2EndIfj=j+2LoopEndSub

示例6-56.4參數(shù)的傳遞6.4.1形參和實(shí)參6.4.2按值傳遞和按地址傳遞6.4.3數(shù)組參數(shù)的傳遞6.4.4可變參數(shù)6.4.5對(duì)象參數(shù)(1)形參

出現(xiàn)在Sub子過(guò)程和Function過(guò)程的形參表中的變量名、數(shù)組名。

可以是除定長(zhǎng)字符串之外的合法變量名;后面跟有圓括號(hào)的數(shù)組名。在過(guò)程調(diào)用前,系統(tǒng)并未給其分配內(nèi)存空間6.4.1形參和實(shí)參

表6-1形參與實(shí)參形態(tài)對(duì)應(yīng)關(guān)系(2)實(shí)參:在主調(diào)過(guò)程的實(shí)參表中,傳遞給相應(yīng)過(guò)程的變量名、數(shù)組名、常數(shù)或表達(dá)式形參表和實(shí)參表中的對(duì)應(yīng)變量名可以不必相同,但參數(shù)的個(gè)數(shù)要相同,對(duì)應(yīng)位置的參數(shù)類型要一致。“形實(shí)結(jié)合”是按“對(duì)應(yīng)位置”,將主調(diào)過(guò)程的實(shí)參傳遞給被調(diào)過(guò)程的形參。

6.4.1形參和實(shí)參如下例:PrivateSubExamSub(xAsSingle,Arr1()AsInteger)………….EndsubPrivateSubForm_Click()DimyAsSingle,A(5)AsInteger………….

CallExamSub(y,A)

Endsub6.4.1形參和實(shí)參主調(diào)過(guò)程被調(diào)過(guò)程實(shí)在參數(shù)形式參數(shù)(1)按值傳遞

(2)按地址傳遞6.4.2按值傳遞和按地址傳遞

房間1(實(shí)參)存放一本書(shū)A臨時(shí)房間(形參)

書(shū)A的復(fù)制操作:撕掉封皮剩下沒(méi)有封皮的書(shū)(1)按值傳遞在形參前加“ByVal”關(guān)鍵字,則形參和實(shí)參按值傳遞

結(jié)合過(guò)程為:在調(diào)用一個(gè)過(guò)程時(shí),系統(tǒng)會(huì)給形參分配一個(gè)臨時(shí)存儲(chǔ)單元,并將實(shí)參變量的值復(fù)制到這個(gè)臨時(shí)存儲(chǔ)單元中去,實(shí)參與形參斷開(kāi)聯(lián)系,若形參的值被改變,不會(huì)影響實(shí)參變量。當(dāng)調(diào)用結(jié)束時(shí),形參所占用的臨時(shí)存儲(chǔ)單元被釋放。實(shí)參的值不變

按值傳遞(分析例6-6)PrivateSubForm_Click()DimmAsInteger,nAsIntegerm=15:n=10Print"調(diào)用過(guò)程Test前";"m=";m,"n=";n

Calltest(m,n)Print"調(diào)用過(guò)程Test后";"m=";m,"n=";nEndSubPrivateSubtest(ByValxAsInteger,ByValyAsInteger)x=x+5:y=x+2*yPrint"形參的值";"x=";x,"y=";yEndSub15101015MNXY實(shí)參形參說(shuō)明:①若實(shí)參是常量或表達(dá)式,則按數(shù)值傳遞②若形參和實(shí)參類型不一致,則系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換。③值傳遞時(shí),形參和實(shí)參分別占有不同的內(nèi)存,調(diào)用結(jié)束,形參存儲(chǔ)單元釋放,形參的變化不影響實(shí)參

swf(2)按地址傳遞

①當(dāng)形參前不加“ByVal”關(guān)鍵字,或有“ByRef”關(guān)鍵字,則實(shí)參和形參的結(jié)合方式為按地址傳遞。

②實(shí)參的地址傳給形參,形參和實(shí)參共用同一內(nèi)存單元,調(diào)用過(guò)程中,形參值的變化直接影響到實(shí)參

實(shí)參的值隨形參值的改變而改變1510MNXY實(shí)參形參

按地址傳遞

(分析例6-7)PrivateSubForm_Click()DimmAsInteger,nAsIntegerm=15:n=10Print“調(diào)用過(guò)程Test前";"m=";m,"n=";n

Calltest(m,n)Print“調(diào)用過(guò)程Test后";"m=";m,"n=";nEndSubSubtest(xAsInteger,yAsInteger)x=x+5:y=x+2*yPrint"形參的值";"x=";x,"y=";yEndSub1510MNXY實(shí)參形參說(shuō)明:①使用按地址傳遞的形參,對(duì)應(yīng)的實(shí)參一般要求同類型的變量(或數(shù)組元素)。若實(shí)參是常量或表達(dá)式,則將按傳值方式傳遞,若和形參類型不一致,則系統(tǒng)自動(dòng)對(duì)實(shí)參進(jìn)行類型轉(zhuǎn)換,并將轉(zhuǎn)換后的值送給形參。②變量轉(zhuǎn)變?yōu)楸磉_(dá)式的方法:將變量加括號(hào)③調(diào)用結(jié)束后,形參不在占用此存儲(chǔ)單元,由實(shí)參占用。示例6-8參數(shù)的數(shù)據(jù)類型轉(zhuǎn)換

swf

數(shù)組按傳地址方式進(jìn)行傳遞。形參數(shù)組的語(yǔ)法格式:

形參數(shù)組名()[As

類型]

語(yǔ)法格式中忽略數(shù)組維數(shù)定義,圓括號(hào)不能省。調(diào)用時(shí)注意:

①對(duì)應(yīng)的實(shí)參必須是數(shù)組,且類型與形參類型對(duì)應(yīng)

②實(shí)參數(shù)組直接放在實(shí)參表中,忽略維數(shù)的定義,圓括號(hào)可以省略。6.4.3

數(shù)組參數(shù)的傳遞

③如果被調(diào)過(guò)程不知道實(shí)參數(shù)組的上下界,可用LBound和UBound函數(shù)確定實(shí)參數(shù)組的下界和上界。

④通用過(guò)程中不能用Dim語(yǔ)句對(duì)形參數(shù)組進(jìn)行聲明。當(dāng)實(shí)參數(shù)組是動(dòng)態(tài)數(shù)組時(shí),可以在過(guò)程中用Redim語(yǔ)句改變形參數(shù)組的維界(大小),重新定義數(shù)組的大小,當(dāng)控制返回主調(diào)過(guò)程時(shí),對(duì)應(yīng)實(shí)參數(shù)組的維界也會(huì)隨之發(fā)生變化6.4.3

數(shù)組參數(shù)的傳遞例題6-9累乘積問(wèn)題

PrivateSubForm_Click()Dima%(1to5),b%(4to8),i%,t1#,t2#Fori=1to5a(i)=iNextiFori=4to8b(i)=iNexti

t1=tim(a())t2=tim(b)Print“t1=”,t1,“t2=”,t2EndSub示例6-9Functiontim(a()AsInteger)Dimt#,i%t=1fori=Lbound(a)toUbound(a)

t=t*a(i)nextitim=tEndFunction編一求任意一維數(shù)組各元素之積的通用函數(shù)過(guò)程,并調(diào)用它復(fù)習(xí)Sub子過(guò)程和Function函數(shù)過(guò)程的定義、建立方法、調(diào)用方法要善于把一些問(wèn)題通過(guò)編寫(xiě)Sub子過(guò)程和Function函數(shù)過(guò)程來(lái)實(shí)現(xiàn)參數(shù)傳遞:按值傳遞、按地址傳遞數(shù)組參數(shù)的傳遞傳遞時(shí)的注意點(diǎn):變量,表達(dá)式,數(shù)據(jù)類型區(qū)別:實(shí)參的值與形參的變化例6-10選擇法排序(調(diào)用排序的子過(guò)程)

PublicSubsort2(a()AsInteger)

DimiAsInteger,jAsIntegerDimiminAsInteger,tAsIntegerFori=LBound(a)ToUBound(a)-1imin=iForj=i+1ToUBound(a)Ifa(j)<a(imin)Thenimin=jNextjt=a(i):a(i)=a(imin):a(imin)=tNextiEndSubPrivateSubForm_Click()

Dima()AsInteger,iAsInteger,nAsIntegern=Val(InputBox("輸入數(shù)組元素個(gè)數(shù)"))ReDima(1Ton)Randomize:Print"排序前"Fori=1Tona(i)=Int((99-10+1)*Rnd)+10Printa(i);NextiPrint:

sort2a()

Print"排序后"Fori=1TonPrinta(i);NextiEndSub

例6-10

指在調(diào)用一個(gè)過(guò)程時(shí),向過(guò)程傳遞實(shí)參的個(gè)數(shù)可以任意變化。格式:

Sub過(guò)程名(ParamArray數(shù)組名())

例6-116.4.4可變參數(shù)VB允許用對(duì)象作為參數(shù)向過(guò)程傳遞,即窗體或控件可以作為通用過(guò)程的參數(shù)

在形參表中用“AsForm”來(lái)定義的形參為窗體參數(shù),調(diào)用該過(guò)程時(shí),可向過(guò)程傳遞窗體;在形參表中用“AsControl”來(lái)定義的形參為控件參數(shù),調(diào)用該過(guò)程時(shí),可向過(guò)程傳遞控件。注意:對(duì)象的傳遞只能是按地址傳遞。

例6-136.4.5對(duì)象參數(shù)6.5

變量與過(guò)程的作用域6.5.1變量的作用域6.5.2過(guò)程的作用域(1)局部變量:過(guò)程中{Dim|Static}變量名[As類型][,變量名[As類型]]..(2)窗體/模塊級(jí)變量:窗體/模塊“通用聲明”處{Dim|Private}變量名[As類型][,變量名[As類型]]...(3)全局變量:窗體/模塊的“通用聲明”處

Public變量名[As類型][,變量名[As類型]]...6.5.1變量的作用域

'定義求階乘的Sub子過(guò)程facPrivateSubfac(ByValnAsInteger,fAsLong)

DimiAsInteger

f=1Fori=1Tonf=f*iNextiEndSub(1)局部變量:過(guò)程中,作用域:本過(guò)程

其值在運(yùn)行過(guò)程中存在,運(yùn)行后消失。每次調(diào)用過(guò)程時(shí),局部變量初始化。{Dim|Static}變量名[As類型][,變量名[As類型]]...6.5.1變量的作用域PrivateSubForm_Click()

DimxAsIntegerx=2Print“x=“;xEndSubPrivateSubCommand1_Click()

DimxAsIntegerx=3Print“x=“;xEndSubX的作用域X的作用域6.5.1變量的作用域例6-14靜態(tài)變量類型

作用域是過(guò)程內(nèi),但其值在運(yùn)行過(guò)程中保留,

每次調(diào)用過(guò)程時(shí),保留原來(lái)的值,不初始化PrivateSubForm_Click()

StaticikAsIntegerik=ik+1Print"目前為止已經(jīng)單擊了窗體";ik;"次"EndSub6.5.1變量的作用域(2)窗體/模塊級(jí)變量:窗體/模塊“通用聲明”處

{Dim|Private}變量名[As類型][,變量名[As類型]]...

DimikAsIntegerPrivateSubForm_Click()ik=ik+1PrintikEndSub‘單擊3次結(jié)果:234

PrivateSubForm_Load()ik=1EndSub作用域:本窗體/本模塊,可被本窗體/本模塊的任何過(guò)程調(diào)用6.5.1變量的作用域(3)全局變量:窗體/模塊“通用聲明”處

Public變量名[As類型][,變量名[As類型]]…作用域:整個(gè)應(yīng)用程序,可被應(yīng)用程序的任何過(guò)程訪問(wèn)其值在整個(gè)程序中保留,不會(huì)消失和初始化直到整個(gè)程序運(yùn)行結(jié)束,才會(huì)消失

注意:窗體中聲明的全局變量在被其它窗體引用時(shí),

窗體名.變量名

6.5.1變量的作用域在標(biāo)準(zhǔn)模塊中聲明PublicikAsInteger在Form1窗體模塊中編寫(xiě):PrivateSubForm_Load()

ik=1EndSubPrivateSubForm_Click()

ik=ik+1Print"ik=";ikForm2.ShowEndSub在Form2窗體模塊中編寫(xiě)PrivateSubForm_Click()

ik=ik+1Print"ik=";ikEndSub

例6-16全局變量改在Form1窗體中聲明PublicikAsInteger在Form1窗體模塊中編寫(xiě):PrivateSubForm_Load()

ik=1EndSubPrivateSubForm_Click()

ik=ik+1Print"ik=";ikForm2.ShowEndSub在Form2窗體模塊中編寫(xiě)PrivateSubForm_Click()

From1.ik=Form1.ik+1Print"ik=";Form1.ikEndSub

例6-16全局變量注意:

①VB允許在不同級(jí)聲明相同的變量名,一般在同一模塊中定義了不同級(jí)而同名的變量時(shí),系統(tǒng)優(yōu)先訪問(wèn)作用域小的變量名.②要在過(guò)程中引用同名的全局變量,必須在變量名前加窗體/模塊名6.5.1變量的作用域PublicXAsIntegerPrivateSubForm_Click()Dim

XAsInteger

X=2

‘訪問(wèn)局部變量X

Form1.X=1

‘訪問(wèn)全局變量XPrintX,F(xiàn)orm1.X‘輸出局部變量X,全局變量XEndSub6.5.1變量的作用域PrivatexAsIntegerPrivateSubCommand1_Click()

StaticyAsIntegerDimzAsIntegern=10:z=n+zy=y+z:x=x+zLabel1.Caption=xLabel2.Caption=yLabel3.Caption=zEndSub連續(xù)3次單擊命令按鈕,標(biāo)簽中顯示的內(nèi)容是(1)窗體/模塊級(jí)(Private)

只能被本窗體或本標(biāo)準(zhǔn)模塊內(nèi)的事件過(guò)程或其他過(guò)程調(diào)用

(2)全局級(jí)

(Public)

可被整個(gè)應(yīng)用程序的所有窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用

P178表6-3過(guò)程的作用域說(shuō)明6.5.2

過(guò)程的作用域(2)對(duì)于多窗體,選用某個(gè)窗體作為啟動(dòng)窗體的方法:“工程”+“工程屬性”或在工程上單擊右鍵舉例說(shuō)明創(chuàng)建新窗體和添加現(xiàn)有窗體(工程/添加窗體)刪除窗體保存窗體(1)多重窗體的建立和管理6.8

多重窗體的程序設(shè)計(jì)(3)窗體之間的切換語(yǔ)句和方法

①Load語(yǔ)句:把窗體裝入到內(nèi)存,但并不顯示出來(lái)

語(yǔ)句格式:Load窗體名稱

②Unload語(yǔ)句:將窗體從內(nèi)存中卸載

Unload窗體名稱/UnloadMe

③Show方法:顯示一個(gè)窗體,觸發(fā)窗體的Load事件

[窗體名稱.]Show

Show方法兼有裝入和顯示窗體兩種功能。

④Hide方法:隱藏指定的窗體,沒(méi)有刪除

[窗體名稱.]Hide6.8

多重窗體的程序設(shè)計(jì)(4)多重窗體應(yīng)用frmmainfrminputfrmoutput結(jié)束示例工程16.8

多重窗體的程序設(shè)計(jì)6.6

遞歸6.6.1

遞歸的概念6.6.2

遞歸子過(guò)程和遞歸函數(shù)(1)遞歸定義用自身的結(jié)構(gòu)來(lái)描述自身就稱為“遞歸”例:n!=n×(n-1)!

(2)遞歸種類:直接遞歸調(diào)用與間接遞歸調(diào)用①直接遞歸調(diào)用:甲調(diào)用甲

②間接遞歸調(diào)用:甲調(diào)用乙,并且乙調(diào)用甲6.6.1遞歸的概念

直接遞歸調(diào)用間接遞歸調(diào)用

f函數(shù)f1函數(shù)f2函數(shù)調(diào)用f函數(shù)調(diào)用f2函數(shù)調(diào)用f1函數(shù)

6.6.1遞歸的概念

即:一個(gè)子過(guò)程和函數(shù)在自身定義的內(nèi)部直接(或間接)調(diào)用自己。其特點(diǎn)是:

描述方便、編程簡(jiǎn)單

如求階乘。缺點(diǎn)是:

時(shí)、空開(kāi)銷大。在遞歸調(diào)用中,一個(gè)過(guò)程執(zhí)行的某一步要用到其自身的前一步或者前若干步的結(jié)果。6.6.2

遞歸子過(guò)程和遞歸函數(shù)

例6-17:計(jì)算Fac(n)=n!n!=n×(n-1)!=n×Fac(n-1)Fac(n)=1(n=0,n=1)n×Fac(n-1)(n>1)Fac(5)=Fac(4)*5Fac(3)*4Fac(2)*3Fac(1)*2=1*2=26.6.2

遞歸子過(guò)程和遞歸函數(shù)(1)具備遞歸結(jié)束條件及結(jié)束時(shí)的值(2)能用遞歸形式表示,并且遞歸向終止條件

(或稱邊界條件)發(fā)展(3)軟件支持構(gòu)成遞歸的條件遞歸例程序例6-17求Fac(n)=n!的值:①用遞歸形式表示:n!=n×(n-1)!

Fac(n)=②遞歸結(jié)束條件:Fac(1)=1③遞歸向終止條件發(fā)展

Fac(4)=4*Fac(3)=4*3*Fac(2)=4*3*2*Fac(1)1,n=1n×Fac(n-1),n>1復(fù)習(xí)可變參數(shù),對(duì)象參數(shù)變量的作用域:定義的位置、使用的關(guān)鍵字過(guò)程的作用域:定義的位置、使用的關(guān)鍵字遞歸的定義遞歸的條件fac(3)=3*fac(2)fac(1)=1fac(2)=2*1fac(3)=3*2fac(2)=2*fac(1)遞推回歸動(dòng)畫(huà)演示‘求Fac(n)=n!的函數(shù)PrivateFunctionFac(NAsInteger)AsLong‘遞歸函數(shù)

IfN=0OrN=1ThenFac=1Else

Fac=N*Fac(N-1)EndIfEndFunction‘輸出結(jié)果過(guò)程Fac(4)PrivateSubForm_Click()Print“Fac(4)=”;Fac(4)EndSub‘調(diào)用遞歸函數(shù),求N!PrivateSubForm_Click()DimNAsInteger,FAsLongN=Val(InputBox("輸入一個(gè)非負(fù)整數(shù)"))

F=Fac(N)PrintN;"!=";FEndSub 6-17

遞歸調(diào)用的執(zhí)行過(guò)程:

①主調(diào)程序執(zhí)行過(guò)程中遇到調(diào)用遞歸函數(shù)時(shí),轉(zhuǎn)去執(zhí)行相應(yīng)的函數(shù);②每次調(diào)用時(shí),應(yīng)記錄下次調(diào)用的返回地址和本次調(diào)用的各有關(guān)參數(shù)值;③遞歸調(diào)用結(jié)束時(shí),按照每次調(diào)用的參數(shù)與返回值的對(duì)應(yīng)關(guān)系逐個(gè)取出,進(jìn)行計(jì)算。

PrivateFunctionFac(nAsInteger)AsLongDimiAsIntegerFac=1Fori=2Ton

Fac=Fac*iNextiEndFunction遞推:

采用一般的子過(guò)程或函數(shù)用循環(huán)的方法,每次用本次結(jié)果遞推計(jì)算下次結(jié)果例:遞推計(jì)算階乘n!=1×2×3×…×n.

遞歸和遞推比較

遞歸:簡(jiǎn)潔精練可讀性好存儲(chǔ)空間開(kāi)銷大(棧)

運(yùn)行速度慢遞推:可讀性差開(kāi)銷小運(yùn)行速度快例6-18求契比雪夫多項(xiàng)式

1n=0T(n,x)=xn=12xT(n-1,x)-T(n-2,x)n>=2PrivateFunctionChb(nAsInteger,xAsSingle)AsSingle

Ifn=0ThenChb=1ElseIfn=1ThenChb=xElse

Chb=2*x*Chb(n-1,x)-Chb(n-2,x)

EndIfEndFunc

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論