第7章過程過程1_第1頁
第7章過程過程1_第2頁
第7章過程過程1_第3頁
第7章過程過程1_第4頁
第7章過程過程1_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章過程教學(xué)要求掌握VB的兩種過程:事件過程和通用過程掌握Sub過程的定義掌握Function過程的定義掌握過程的調(diào)用掌握參數(shù)的傳遞——按值傳遞和按地址傳遞掌握遞歸算法掌握變量的作用域

7.1Sub過程

7.2Function過程

7.3過程調(diào)用

7.4參數(shù)的傳遞

7.5遞歸過程

7.6變量的作用域

7.7程序示例

7.8創(chuàng)建與設(shè)置啟動過程教學(xué)內(nèi)容

基本思想:將一個大的程序按功能分割成一些小模塊特點:各模塊相對獨立、功能單一、結(jié)構(gòu)清晰、接口簡單控制了程序設(shè)計的復(fù)雜性避免程序開發(fā)的重復(fù)勞動易于維護(hù)和功能擴充模塊化程序設(shè)計cnm=m!(n-m)!n!PrivateSubCommand1_Click()n=Val(Text1.Text)m=Val(Text2.Text)k=nt=1Fori=1Tokt=t*iNextis=tk=mt=1Fori=1Tokt=t*iNextis=s/tk=n-mt=1Fori=1Tokt=t*iNextis=s/tText3.Text=Str(s)EndSub共同代碼計算k!能不能簡化?計算:模塊化程序設(shè)計舉例函數(shù)定義計算k!PrivateSubCommand1_Click()DimmAsInteger,nAsIntegerDimsAsLongn=Val(Text1.Text)m=Val(Text2.Text)s=fact(n)/(fact(m)*fact(n-m))Text3.Text=Str(s)EndSubPrivateFunctionfact(kAsInteger)AsLongDimiAsIntegerfact=1Fori=1Tokfact=fact*iNextiEndFunction函數(shù)調(diào)用(三次)使用函數(shù)過程的分類事件過程Sub過程通用過程子程序過程Sub函數(shù)過程Function7.1Sub過程--事件過程1.概念:由控件對象通過事件觸發(fā)所執(zhí)行的一系列代碼。2.說明:事件過程之前一般都有PrivateSub,表明事件過程是局部的,只在本窗體中有效。

事件過程是否有參數(shù)由系統(tǒng)自動添加,不能人為改動。3.分類:

窗體事件過程控件事件過程PrivateSubForm_事件名([參數(shù)列表])

[局部變量和常數(shù)聲明]

語句塊EndSubPrivateSub控件名_事件名([參數(shù)列表])

[局部變量和常數(shù)聲明]

語句塊EndSub窗體的事件過程名中不使用其具體名稱,而固定用Form控件的事件過程名中必須使用其具體名稱7.1Sub過程--事件過程4.窗體啟動時的4個相關(guān)事件(p.126)Initialize(初始化)事件——配置窗體,在Load之前。Load(加載)事件——窗體加載到內(nèi)存時觸發(fā)。Activate(激活)事件——成為被激活窗體時觸發(fā)GotFocus(聚焦)事件——窗體成為當(dāng)前焦點時觸發(fā),一般是窗體上的控件成為焦點,而不是窗體。執(zhí)行次序:

InitializeLoadActivateGotfocus注意:窗體的Initialize、Load事件發(fā)生在窗體被顯示之前,其中可放置系統(tǒng)初始化命令,但其中語句有所限制;窗體加載后,只要不被卸載,就不會再執(zhí)行Initialize、Load事件,但Activate事件會多次發(fā)生;當(dāng)訪問另一窗體上的“非可視”數(shù)據(jù)或調(diào)用其中定義的全局過程時,只會觸發(fā)該窗體的Initialize事件,而Load事件不觸發(fā);當(dāng)訪問另一窗體上的“可視”數(shù)據(jù)時,會同時觸發(fā)該窗體的Initialize和Load事件在以下兩種情況下,經(jīng)常使用自定義過程:(1)應(yīng)用程序中出現(xiàn)較頻繁處理的部分,僅僅是每次處理的數(shù)據(jù)不同而已;(2)程序中比較復(fù)雜的算法,獨立出來,增強程序的可讀性。

通用過程的引入使得整個程序的結(jié)構(gòu)更加清晰,模塊化更強。7.1Sub過程—通用過程概念:完成某一特定功能的程序段

說明:

必須顯式調(diào)用方可執(zhí)行。3.分類:

公有過程(Public)私有過程(Private)4.通用Sub過程的定義[格式]:

[Private|Public][static]Sub<過程名>([<參數(shù)列表>])<過程體>EndSub[說明]:(1)以Sub開頭,EndSub結(jié)束,中間是過程體——包括變量聲明和語句塊;(2)以Private為前綴的過程是模塊級的,以Public為前綴的過程是應(yīng)用程序級的,缺省默認(rèn)是Public;(3)Static選項說明過程中的局部變量是靜態(tài)變量;(4)過程名的命名規(guī)則和變量名相同,在同一個模塊中,過程名必須是唯一的;(5)參數(shù)列表中的參數(shù)稱為形式參數(shù),可以沒有,但無參數(shù)時圓括號不能省略;有多個參數(shù)時,參數(shù)之間用逗號間隔;(6)參數(shù)說明格式:

[Optional][ByVal|ByRef]<變量名>[()][As<數(shù)據(jù)類型>]其中:

a)若參數(shù)是數(shù)組,則在變量名后面加一對圓括號,但無維界定義;b)ByVal:指明參數(shù)傳遞方式是傳值;

c)ByRef:指明參數(shù)傳遞方式是傳地址,為缺省值;

d)若參數(shù)是字符型的,必須是不定長字符串;e)Optional:參數(shù)是可選的,必須定義在必選參數(shù)后面。(7)當(dāng)過程調(diào)用結(jié)束,即執(zhí)行到EndSub語句,系統(tǒng)自動返回調(diào)用程序的調(diào)用語句處,執(zhí)行調(diào)用語句的下一條語句;(8)在過程體中不能再定義過程,但可以調(diào)用其他過程;(9)可用ExitSub語句提前退出過程調(diào)用,返回調(diào)用語句。例:PrivateSubExchange(xAsInteger,yAsInteger)DimTempAsIntegerTemp=x:x=y:y=TempEndSub該通用過程實現(xiàn)交換功能,包含兩個參數(shù),均是ByRef形式的參數(shù)。調(diào)用語句(Call語句)下一條語句Sub過程體EndSub主調(diào)程序被調(diào)過程主調(diào)程序被調(diào)過程5.

建立通用Sub過程方法一:在“代碼編輯窗口”的“通用”中自行輸入;方法二:進(jìn)入代碼編輯器窗口,執(zhí)行“工具”菜單的“添加過程”,在“添加過程”對話框中輸入定義過程的名稱、類型和范圍后單擊“確定”按鈕,系統(tǒng)會自動在代碼窗口添加自定義過程的框架(過程頭和過程結(jié)束語句)。6.Sub過程調(diào)用[格式一]:Call<過程名>[(<實在參數(shù)表>)][格式二]:<過程名>[<實在參數(shù)表>][功能]:對已定義的過程進(jìn)行調(diào)用。[說明]:(1)調(diào)用的過程必須是已經(jīng)定義的,否則系統(tǒng)會出現(xiàn)“子程序或函數(shù)未定義”的信息提示;(2)實在參數(shù)可以是常量、變量或表達(dá)式、數(shù)組;(3)實在參數(shù)的數(shù)目及類型要和定義時必選參數(shù)保持一致,否則系統(tǒng)會出現(xiàn)“參數(shù)不可選”的信息提示,參數(shù)之間用逗號間隔;(4)若子程序沒有參數(shù),則格式一中的括號可以省略;(5)格式一和格式二的區(qū)別在于:格式二的參數(shù)表無須括號,而是和過程名之間用空格隔開;舉例1:將鍵盤輸入的三個數(shù)按從小到大的順序排列輸出。

[程序一]:PrivateSubCommand1_Click()DimaAsInteger,bAsInteger,cAsIntegerDimtAsIntegera=Text1.Text:b=Text2.Text:c=Text3.TextIfa>bThent=aa=bb=tEndIfIfa>cThent=aa=cc=tEndIfIfb>cThent=bb=cc=tEndIfText1.Text=a:Text2.Text=b:Text3.Text=cEndSub[程序二]:定義子程序Change實現(xiàn)交換功能,該子程序定義了兩個為ByRef方式的必選參數(shù),來傳遞交換功能實現(xiàn)前的原始數(shù)據(jù)和返回交換功能實現(xiàn)后的結(jié)果數(shù)據(jù),至于交換過程中需要的臨時變量Temp則因沒有保留的價值無須定義為參數(shù),僅在子程序體中定義。子程序即Sub過程的使用不僅可以縮短程序的長度,還能夠使程序的結(jié)構(gòu)更加清楚。PrivateSubCommand1_Click()DimaAsInteger,bAsIntegerDimcAsIntegera=Text1:b=Text2:c=Text3Ifa>bThenCallChange(a,b)Ifa>cThenCallChange(a,c)Ifb>cThenCallChange(b,c)Text1=a:Text2=b:Text3=cEndSubPrivateSubChange(x1AsInteger,x2AsInteger)DimTempAsIntegerTemp=x1x1=x2x2=TempEndSubCallChange(a,b)語句也可以用Changea,b來替代。PrivateSubvalue(a()AsInteger,minAsInteger)DimiAsIntegermin=a(1)Fori=2ToUBound(a) Ifa(i)<minThenmin=a(i)NextiEndSub

舉例2:定義一個通用過程用以求一維數(shù)組中的最小值7.2Function過程

Function過程的特點是返回一個值,因此我們通常也稱之為自定義函數(shù)。1.Function過程的定義

[格式]:

[Private|Public]Function<函數(shù)名>([參數(shù)列表])[As<數(shù)據(jù)類型>]<函數(shù)體>EndFunction

[說明]:

(1)以Function開頭,以EndFunction結(jié)束,中間是函數(shù)體;(2)函數(shù)名命名規(guī)則、參數(shù)列表的表示都和Sub過程相同;(3)As數(shù)據(jù)類型:函數(shù)過程將由函數(shù)名返回一個值,值的類型由[As數(shù)據(jù)類型]定義;★(4)函數(shù)體中一定要有對函數(shù)名賦值的語句——函數(shù)名=表達(dá)式,否則返回相應(yīng)類型的初值;★(5)函數(shù)體內(nèi)可有ExitFunction語句——無條件退出函數(shù)過程,返回主程序。(6)Function過程不能嵌套定義,但可嵌套調(diào)用。PrivateFunctionf(ByvalxAsInteger)AsIntegerf=3*x^3-2*x^2+6*x-1EndFunction舉例1:定義函數(shù):函數(shù)名=表達(dá)式舉例2:編寫一個求n!的函數(shù)。(p131)PrivateFunctionFact(ByvalNAsInteger)AsLongDimKAsIntegerFact=1Ifn=0Orn=1ThenExitFunctionElseForK=1ToNFact=Fact*KNextKEndIfEndFunction函數(shù)名=表達(dá)式函數(shù)類型傳值的參數(shù)函數(shù)類型2.

調(diào)用Function過程

[格式]:<函數(shù)名>([實在參數(shù)表])

[功能]:返回一個函數(shù)值。

[說明]:(1)一般情況下,函數(shù)的調(diào)用出現(xiàn)在賦值語句中,并且在賦值號的右側(cè);(2)若函數(shù)沒有參數(shù),函數(shù)名后的括號不能省略;(3)雖然VB允許象調(diào)用Sub過程那樣調(diào)用Function過程,但這樣調(diào)用時系統(tǒng)不返回函數(shù)值,建議大家不要使用這種調(diào)用方法。Callfact(x)Factx

這兩種方法均放棄函數(shù)的返回值例如:PrivateSubForm_Click()DimSAsLong,iAsIntegerFori=1To10

NextiPrint”S=";SEndSubPrivateFunctionFact(nAsInteger)AsLongDimiAsIntegerFact=1Fori=1TonFact=Fact*iNextiEndFunction函數(shù)名=表達(dá)式函數(shù)調(diào)用:S=S+Fact(i)舉例3:S=1!+2!+…+10!PrivateFunctionmin(a()AsInteger)AsIntegerDimiAsInteger

min=a(1)Fori=2ToUBound(a) Ifa(i)<minThenmin=a(i)NextiEndSub舉例4:用函數(shù)實現(xiàn)求一維數(shù)組中的最小值(對比前例Sub)PrivateSubvalue(a()AsInteger,minAsInteger)DimiAsIntegermin=a(1)Fori=2ToUBound(a) Ifa(i)<minThenmin=a(i)NextiEndSub

函數(shù)名=表達(dá)式函數(shù)類型PrivateFunctionPrime(NAsInteger)AsBooleanDimiAsIntegerPrime=FalseFori=2ToN-1IfNModi=0ThenExitForNextiIfi=NthenPrime=TrueEndFunction函數(shù)名=表達(dá)式可省略,因Prime的初始值就是false舉例5:定義函數(shù)用以判斷一個數(shù)是否是素數(shù)PrivateFunctionGcd(ByVal

AAsInteger,ByValBAsInteger)AsIntegerDimRAsIntegerR=AModBDoWhileR<>0A=BB=RR=AModBLoopGcd=BEndFunction使用賦

溫馨提示

  • 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

提交評論