第8章過程與函數(shù).ppt_第1頁
第8章過程與函數(shù).ppt_第2頁
第8章過程與函數(shù).ppt_第3頁
第8章過程與函數(shù).ppt_第4頁
第8章過程與函數(shù).ppt_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第8章,過 程與函數(shù),過程的定義: 在設(shè)計一個規(guī)模較大、復(fù)雜程度較高的程序時,往往根據(jù)需要按功能將程序分解成若干個相對獨立的部分,然后對每個部分分別編寫一段程序,這些程序段稱為過程。 過程是構(gòu)成程序邏輯部件的基本單位,將程序分割成較小的邏輯部件可以簡化程序設(shè)計任務(wù),結(jié)構(gòu)化設(shè)計就是建立在這個思路之上。 每個過程完成一個具有特定目的的任務(wù)。,過程的分類:,事件過程 VB中有兩類過程: Sub 過程 通用過程 Function 過程 事件過程是對發(fā)生的事件進行處理的代碼 通用過程是由用戶根據(jù)自己的需要定義和編寫的、可供事件過程多次調(diào)用的程序段。 二者的區(qū)別是: 通用過程是由程序中的語句調(diào)用。 事件過

2、程往往是由用戶事件 觸發(fā)。,8.1 Sub 過程(子程序過程),Sub 過程是指以規(guī)定語法結(jié)構(gòu)組織的、可以被重復(fù)調(diào)用的、具有特定功能的、相對獨立的語句塊。 1、 聲明 Sub 過程 聲明 Sub 過程就是在窗體或標準模塊的代碼窗口編寫一個能實現(xiàn)預(yù)期功能的語句塊。 聲明Sub過程的語法格式為: Private | Public Static Sub 過程名() Exit Sub 過程體 End Sub 注意: Sub 過程名無值,無類型。,上一頁,下一頁,返回首頁,說明:,1、每個通用過程都有一個過程名(由用戶自己指定,規(guī)定同變量名),同一模塊中過程名不得重復(fù)。 2、過程前加上Public關(guān)鍵字

3、或缺省,則該過程為全局級過程,可以被應(yīng)用程序的所有窗體模塊或標準模塊中的過程調(diào)用(在窗體中定義,調(diào)用時應(yīng)加窗體名)。 3、過程前加上Private關(guān)鍵字,則該過程為模塊級過程,只有在聲明它的模塊中才可以調(diào)用此過程。 4、在過程名前加上Static關(guān)鍵字,表明該過程的變量都是靜態(tài)變量。 5、形參列表是傳遞到過程中的變量名(多個時用“,”分隔),它指明了調(diào)用時傳遞給過程的參數(shù)的類型和個數(shù), 格式為:變量名() AS 數(shù)據(jù)類型(過程級變量),上一頁,下一頁,返回首頁,如:Sub Tryout(x as integer, y as integer),x=x+100 y=y*6 Print x,y En

4、d Sub 6、注意:過程可以有參數(shù),也可以不帶任何參數(shù)。 通用過程可以在標準模塊中建立,也可以在窗體模塊中建立。 7、建立通用過程可以使用以下兩種方法: “工程”添加模塊”,添加一標準模塊; “工具”添加過程” 在標準模塊或窗體模塊中, 直接輸入通用過程的代碼。,上一頁,下一頁,返回首頁,2、調(diào)用 Sub 過程,在其他過程中執(zhí)行已聲明的Sub過程被稱為對Sub 過程的調(diào)用。 1使用Call語句調(diào)用Sub過程 格式:Call 過程名(實參列表) 2. 將過程名作為語句使用 格式: 過程名 特點: Sub 過程的調(diào)用是一句獨立的語句。,上一頁,下一頁,返回首頁,說明:,1、可以直接調(diào)用本模塊中聲

5、明的過程或標準模塊中聲明的全局過程; 2、當定義的過程重名時,調(diào)用過程時,過程名前應(yīng)加模塊名修飾; 3、如果要調(diào)用窗體模塊中聲明的全局過程,調(diào)用時過程名前應(yīng)加窗體名。 4、調(diào)用Sub 過程時,若省略 Call ,則 外面的括號也必須省略。 5、調(diào)用Sub 過程時,每個實參可以加單獨的括號。 6、實參數(shù)表,是往被定義過程的形參列表傳遞的數(shù)據(jù);因此,其數(shù)據(jù)類型需要和形參列表保持一致。實參可以是常量、變量、數(shù)組,或復(fù)雜表達式,但無論是什么 都必須有確定的值。,上一頁,下一頁,返回首頁,例1:將求三角形的面積的代碼存放在過程triarea(a,b,c)中,邊長從三個文本框中輸入,如果符合構(gòu)成三角形的條

6、件,則調(diào)用該過程,否則調(diào)用suberr過程。 Lt1.vbp 程序如下: Private Sub triarea(area As Double, x As Double, y As Double, z As Double) Dim s As Double s = (x +y + z) / 2 area = Sqr(s - x) * (s - y) * (s - z) * s) End Sub Private Sub suberr(intyrn As Integer) intyrn = MsgBox(請檢查您的數(shù)據(jù), vbYesNo + vbInformation, 數(shù)據(jù)錯誤) End Sub,

7、3、 使用 Sub 過程,上一頁,下一頁,返回首頁,Private Sub Command1_Click() Dim a#, b#, c#, s# Dim intYesorNo As Integer a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) If a + b c And b + c a And c + a b Then Call triarea(s, a, b, c) 使用Call關(guān)鍵字,實際參數(shù)用括號括起來 Print 面積 =; s Else suberr intYesorNo 不使用Call關(guān)鍵字,實際參數(shù)不用

8、括號 End If End Sub Sub 過程的調(diào)用是一句獨立的語句。,上一頁,下一頁,返回首頁,Function 過程 與Sub 過程 的主要區(qū)別是: Function 過程可返回一個值到調(diào)用的過程 1、 聲明 Function 過程 格式:Public|Private Static Function 函數(shù)過程名 () As = 返回值語句 Exit Function End Function 注意:Function 過程名有值,有類型。在函數(shù)體內(nèi),函數(shù)名可以當變量名使用,函數(shù)的返回值就是通過對函數(shù)名的賦值語句 來實現(xiàn)的。即函數(shù)值通過函數(shù)名返回。 函數(shù)過程需要返回的值的類型由 As 設(shè)置。

9、,8.2 Function 過程(函數(shù)),上一頁,下一頁,返回首頁,2、 調(diào)用 Function 過程,Function 過程的調(diào)用,與標準函數(shù)(內(nèi)部函數(shù))相同。 通常用在表達式中 格式:函數(shù)名() 特點:不能獨立存在,必須參加表達式的運算。 如:下面是已知直角三角形兩直角邊的值,計算斜邊的函數(shù)。 function myfun(A as integer,B as integer) as string myfun=sqr(A*A+B*B) End function label1.caption=myfun(Cint(text1.text),cint(text2.text) strX=myfun(

10、width,height),上一頁,下一頁,返回首頁,例2:將例1中兩個Sub過程改為Function過程。 Private Function triarea(x As Double, y As Double, z As Double) Dim s As Double s = (x + y + z) / 2 triarea = Sqr(s - x) * (s - y) * (s - z) * s) End Function Private Sub Command1_Click() Dim a#, b#, c#, s#, intYesorNo% a = Val(Text1.Text) : b =

11、 Val(Text2.Text) c = Val(Text3.Text) If a + b c And b + c a And c + a b Then Print 面積 =; triarea(a, b, c) Else intYesorNo = suberr( ) 無參數(shù)時,括號不能省略 End If End Sub,上一頁,下一頁,返回首頁,Sub過程和Function函數(shù)過程中的中的參數(shù)稱為形式參數(shù)(形參),在程序中調(diào)用Sub過程和Function函數(shù)過程時中稱為實際參數(shù)(實參) 。 在調(diào)用過程時,就是把“實參”依次按位置傳遞給被調(diào)用過程的“形參” ,然后執(zhí)行被調(diào)用過程中的語句。參數(shù)傳遞

12、時相當于給變量賦初值。 如: Print greatcd(x, y) Public Function greatcd(m As Integer, n As Integer) 參數(shù)傳遞有兩種模式:按值傳遞與 按址傳遞,8.3 過程中參數(shù)的傳送,按值傳遞就是將實參的值傳送給被調(diào)用過程中的形參。即:系統(tǒng)把實參復(fù)制一份傳送給形參。這樣,被調(diào)用的過程如果改變了形參的值,也不會改變實參的值。 在VB中,傳值方式的標志為:在形參前加上ByVal。 這種傳遞方式是一種單向的數(shù)據(jù)傳遞,即調(diào)用時只能由實參的值傳遞給形參,調(diào)用結(jié)束不能 由形參將操作結(jié)果返回給實參。實參可以是 常數(shù)、變量或表達式。,1、 按值傳遞,上

13、一頁,下一頁,返回首頁,例:寫出下列程序的運行結(jié)果,Sub tryout(ByVal x as integer, ByVal y as integer) x=x+100 y=y*6 print “x=“;x.”y=“;y End Sub Sub Form_click() Dim a%,b% a=10:b=20 tryout a,b Print “a=“;a,”b=“;b End Sub,傳值: X=110 y=120 a=10 b=20,傳址: X=110 y=120 a=110 b=120,上一頁,下一頁,返回首頁,2、 按址傳遞變量的引用,傳址方式是將實參在內(nèi)存的地址傳遞給形參,也就是實參

14、、形參公用內(nèi)存的“地址”。 在VB中,按址傳遞數(shù)據(jù)是在形參前加上ByDef(默認方式)。 這種傳遞方式是一種雙向的數(shù)據(jù)傳遞,即調(diào)用時實參將值傳遞給形參;調(diào)用結(jié)束由形參將操作結(jié)果返回給實參。當用傳址方式時,實參只能是變量、數(shù)組名,不能是常數(shù)、表達式。 修改前例題 ByVal ByDef 再寫其運行結(jié)果,例5:下面的程序求解 S1=n S2=n+n Sn=n+n+n(n個n累加) 并輸出S1到Sn。n為自然數(shù),從文本框值輸入。 函數(shù)過程(注意傳值與傳址的區(qū)別): ByDef Public Function sum(m As Integer, ByVal n As Integer) sum = m

15、Do While n 1 sum = sum + m n = n - 1 Loop End Function,上一頁,下一頁,返回首頁,事件過程:,Private Sub Command1_Click() Dim i%, s( ), a%, k% Cls a = Val(Text1.Text) ReDim s(1 To a) For i = 1 To a 按值傳送 s(i) = sum(a, i) k = k + 1 Print i=; i, k=; k, s s(i) If k a Then Exit For Next i End Sub,按址傳送,上一頁,下一頁,返回首頁,3、 數(shù)組作過程

16、的參數(shù),Visual Basic允許把數(shù)組作為實參傳送到過程中。數(shù)組作參數(shù)是通過傳地址方式傳送。在傳送數(shù)組時,除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點: 1為了把一個數(shù)組的全部元素傳送給一個過程,應(yīng)將數(shù)組名分別寫入形參表中,并略去數(shù)組的上下界,但括號不能省略。 Private Sub Sort(a() As single) End Sub 其中形參“a( )”即為數(shù)組。,2被調(diào)過程可通過Lbound和Ubound函數(shù)確定實參數(shù)組的上、下界。 3當用數(shù)組作形參時,對應(yīng)的實參必須也是數(shù)組,且類型一致。 4實參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實參數(shù)組共用一段內(nèi)存單元。 例如:定義了實參數(shù)組b

17、(1 to 8),給它們賦了值,調(diào)用Sort()函數(shù)過程的形式如下: Sort b( ) 或 Call Sort( b() ) 實參數(shù)組后面的括號可以省略,但為便于閱讀,建議一般不要省略為好。,3、 數(shù)組作過程的參數(shù),調(diào)用時形參數(shù)組a和實參數(shù)組b虛實結(jié)合,共用一段內(nèi)存單元,如圖6-7所示。因此在Sort()過程中改變數(shù)組a的各元素值,也就相當于改變了實參數(shù)組b中對應(yīng)的元素的值,當調(diào)用結(jié)束時,形參數(shù)組a成為無定義。 b(1) b(2) b(3) b(4) b(5) b(6) b(7) b(8) a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8) 參數(shù)為數(shù)組時虛實結(jié)合示

18、意圖,3、 數(shù)組作過程的參數(shù),8.4 可選參數(shù)和可變參數(shù),1、 可選參數(shù) 在過程的形參列表中加入Optional關(guān)鍵字,就可以指定過程的參數(shù)為可選的。如果指定了可選參數(shù),則參數(shù)表中此參數(shù)后面的其它參數(shù)也必是可選的,并且要用Optional關(guān)鍵字來聲明。,例6:求兩個數(shù)的和的函數(shù)過程。 lt6.vbp 函數(shù)過程: Public Function mysum (first As Integer, second As Long, Optional third ) mysum = first + second If Not IsMissing(third) Then mysum = mysum + t

19、hird End Function,事件過程:,Private Sub Command1_Click() Dim a As Integer, b As Long, c As Double Dim sum As Integer a = 10: b = 20 Sum=mysum(a, b) Print sum=; Sum a = 10: b = 20: c = 30 Sum=mysum(a, b, c) Print sum=; Sum End Sub IsMissing( )檢測可選參數(shù)是否被省略,上一頁,下一頁,返回首頁,2、 不定數(shù)量的參數(shù)(可變參數(shù)),一般說來,過程調(diào)用中的參數(shù)個數(shù)應(yīng)等于過程

20、說明的參數(shù)個數(shù)。在傳遞參數(shù)時,如果要求參數(shù)的數(shù)目可以變化,則在函數(shù)過程或Sub過程的形參前可加 ParamArray關(guān)鍵字(不能與ByVal ByDef連用)指明。 格式如下:,Sub 過程名( 其他參數(shù), ParamArray ( ) ),上一頁,下一頁,返回首頁,Private Sub Command1_Click() Dim s( ), a%, b As Long, c As Variant, d As Double s = Array(1, 2, 3, 4, 5) Print sum=; multisum( s(0), s(2), s(4) ) a = 1000: b = 10000:

21、 c = 100: d = 10 Print sum=; multisum( a, b, c, d ) End Sub Public Function multisum( ParamArray p() ) Dim int1%, sum as variant For int1= LBound(p) To UBound(p) sum = sum + p(int1) Next multisum=sum End Sub,上一頁,下一頁,返回首頁,8.6 過程的嵌套和遞歸,1、 過程的嵌套,在程序中調(diào)用一子過程,而在子過程中又調(diào)用另外的子過程,這種程序結(jié)構(gòu)稱為過程的嵌套。過程的嵌套調(diào)用執(zhí)行過程如下圖:,2、 過程的遞歸調(diào)用,用自身的結(jié)構(gòu)來描述自身,稱遞歸。例如,對階乘的定義:,Visual Basic允許在一個Sub子過程和Function過程的定義內(nèi)部調(diào)用自己,即遞歸Sub子過程和遞歸Function函數(shù)。,6.6 過程的嵌套和遞歸調(diào)用,Private Function fac(n As Inte

溫馨提示

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

評論

0/150

提交評論