計算機(jī)基礎(chǔ)與VisualBasic程序設(shè)計(第三版)第九章過程課件_第1頁
計算機(jī)基礎(chǔ)與VisualBasic程序設(shè)計(第三版)第九章過程課件_第2頁
計算機(jī)基礎(chǔ)與VisualBasic程序設(shè)計(第三版)第九章過程課件_第3頁
計算機(jī)基礎(chǔ)與VisualBasic程序設(shè)計(第三版)第九章過程課件_第4頁
計算機(jī)基礎(chǔ)與VisualBasic程序設(shè)計(第三版)第九章過程課件_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第9章過 程與函數(shù)第1頁,共33頁。過程的定義: 在設(shè)計一個規(guī)模較大、復(fù)雜程度較高的程序時,往往根據(jù)需要按功能將程序分解成若干個相對獨(dú)立的部分,然后對每個部分分別編寫一段程序,這些程序段稱為過程。 過程是構(gòu)成程序邏輯部件的基本單位,將程序分割成較小的邏輯部件可以簡化程序設(shè)計任務(wù),結(jié)構(gòu)化設(shè)計就是建立在這個思路之上。 每個過程完成一個具有特定目的的任務(wù)。9.1 事件過程與通用過程第2頁,共33頁。VB中有兩類子程序過程函數(shù)內(nèi)部函數(shù)(如:Sin(3.14/6) )通用函數(shù)(自定義函數(shù)Function)事件過程通用過程(自定義過程Sub)窗體事件過程(如:Form_Click( ))控件事件過程(如:

2、Command1_Click( ))VB子程序分類圖事件過程是對發(fā)生的事件進(jìn)行處理的程序段通用過程和通用函數(shù)是由用戶根據(jù)自己的需要定義和編寫 的、可供事件過程多次調(diào)用的程序段 它們都不直接與特定的事件相關(guān)聯(lián)9.1 事件過程與通用過程第3頁,共33頁。9.2 通用過程(Sub過程) Sub 過程是指以規(guī)定語法結(jié)構(gòu)組織的、可以被重復(fù)調(diào)用的、具有特定功能的、相對獨(dú)立的程序段。 Sub過程不與任何特定的事件過程相關(guān)聯(lián),只能由別的過程調(diào)用1、 聲明 Sub 過程(定義) 聲明 Sub 過程就是在窗體或標(biāo)準(zhǔn)模塊的代碼窗口編寫一個能實(shí)現(xiàn)預(yù)期功能的語句塊。聲明Sub過程的語法格式為: Private | Pu

3、blic Static Sub 過程名() Exit Sub 過程體 End Sub 注意: Sub 過程名無值,無類型。第4頁,共33頁。說明:1、每個通用過程都有一個過程名(由用戶自己指定,規(guī)定同變量名),同一模塊中過程名不得重復(fù)。2、過程前加上Public關(guān)鍵字或缺省,則該過程為全局級過程,可以被應(yīng)用程序的所有窗體模塊或標(biāo)準(zhǔn)模塊中的過程調(diào)用(在窗體中定義,調(diào)用時應(yīng)加窗體名)。3、過程前加上Private關(guān)鍵字,則該過程為模塊級過程,只有在聲明它的模塊中才可以調(diào)用此過程。4、在過程名前加上Static關(guān)鍵字,表明該過程的變量都是靜態(tài)變量。5、形參列表是傳遞到過程中的變量名(多個時用“,”分

4、隔),它指明了調(diào)用時傳遞給過程的參數(shù)的類型和個數(shù). 過程可以有參數(shù),也可以不帶任何參數(shù)。根據(jù)需要而定 格式為:ByVal|ByRef變量名( ) AS 數(shù)據(jù)類型, ByVal 表示按值傳遞;ByRef 表示按地址傳遞6、過程內(nèi)不能再定義過程,過程定義也不能寫在事件過程內(nèi)第5頁,共33頁。如:Sub Tryout( x as integer , y as integer) x=x+100 y=y*6 Print x,y End Sub 7、建立通用過程可以使用以下兩種方法: “工具”添加過程” 在標(biāo)準(zhǔn)模塊或窗體模塊中, 直接輸入通用過程的代碼。8、子過程名不返回值,只能通過形式參數(shù)與調(diào)用語句通信

5、9、過程體中的Exit Sub 表示強(qiáng)制退出過程返回9.2 通用過程(Sub過程)第6頁,共33頁。2、調(diào)用 Sub 過程要執(zhí)行一個過程,必須調(diào)用該過程。調(diào)用的方法為:方法1使用Call語句 格式:Call 過程名(實(shí)參列表)方法2. 將過程名作為語句使用: 格式: 過程名 特點(diǎn): Sub 過程的調(diào)用是一句獨(dú)立的語句。例:要調(diào)用前面的Tryout過程,可以使用下面兩種方式: Call Tryout(a , b) 或 Tryout a , b主過程Call 過程1End Sub過程1Call 過程2End Sub過程2End Sub調(diào)用的本質(zhì):轉(zhuǎn)入被調(diào)用過程去執(zhí)行,完成后返回第7頁,共33頁。說

6、明:1、使用Call語句調(diào)用時,參數(shù)必須放在括號內(nèi),如沒有參數(shù),括號可省略2、用過程名調(diào)用時,過程名后不能加括號,若有參數(shù),參數(shù)與過程名間用空格隔開3、參數(shù)表:在調(diào)用語句中的參數(shù)稱為實(shí)際參數(shù)(簡稱實(shí)參),實(shí)參可以是變量、常量、數(shù)組或表達(dá)式,參數(shù)間用逗號隔開4、可以直接調(diào)用本模塊中聲明的過程或標(biāo)準(zhǔn)模塊中聲明的全局過程;5、當(dāng)定義的過程重名時,調(diào)用過程時,過程名前應(yīng)加模塊名修飾;6、如果要調(diào)用窗體模塊中聲明的全局過程,調(diào)用時過程名前應(yīng)加窗體名。第8頁,共33頁。 Function 過程 與Sub 過程 的主要區(qū)別是: Function 過程可通過函數(shù)名返回一個值到調(diào)用的過程1、 聲明 Functi

7、on 過程(函數(shù)定義)格式:Public|Private Static Function 函數(shù)過程名 () As = 返回值語句 Exit Function End Function注意:在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量名使用,函數(shù)的返回值就是通過對函數(shù)名的賦值語句來實(shí)現(xiàn)的。即函數(shù)值通過函數(shù)名返回。函數(shù)體中的Exit Function語句的功能是強(qiáng)制退出函數(shù)并返回函數(shù)過程需要返回的值的類型由 As 設(shè)置。9.3 Function 過程(自定義函數(shù))函數(shù)體第9頁,共33頁。2、 調(diào)用 Function 過程Function 過程的調(diào)用,與標(biāo)準(zhǔn)函數(shù)(內(nèi)部函數(shù))相同。 通常用在表達(dá)式中 格式:函數(shù)名()

8、 特點(diǎn):不能獨(dú)立成為語句,必須參加表達(dá)式的運(yùn)算。如1:下面是已知直角三角形兩直角邊的值,計算斜邊的函數(shù)。 function myfun(A as integer,B as integer) as string myfun=sqr(A*A+B*B) End functionSub Command1_Click( ) a=val(text1.text) : b= val(text2.text) label1.caption=myfun( a , b) End Sub第10頁,共33頁。例2:將前面的兩個Sub過程改為Function過程。Private Function triarea(x As

9、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 FunctionPrivate Sub Command1_Click() Dim a#, b#, c#, s#, intYesorNo% 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 Print 面積 =

10、; triarea(a, b, c) Else intYesorNo = suberr( ) 無參數(shù)時,括號不能省略 End IfEnd Sub第11頁,共33頁。9.4 參數(shù)傳遞不同模塊(過程)之間數(shù)據(jù)的傳遞方式:通過全局變量實(shí)現(xiàn)各過程中共享數(shù)據(jù)(即在“通用”部份定義的變量,由該模塊所有過程共享)通過過程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn)按值傳遞(單向傳遞)按地址傳遞(雙向傳遞)第12頁,共33頁。Sub過程和Function函數(shù)過程中的中的參數(shù)稱為形式參數(shù)(形參),在程序中調(diào)用Sub過程和Function函數(shù)過程時中稱為實(shí)際參數(shù)(實(shí)參) 。在調(diào)用過程時,就是把“實(shí)參”依次按位置傳遞給被調(diào)用過程的“形

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

12、是常數(shù)、變量或表達(dá)式。1、 按值傳遞第14頁,共33頁。例:寫出下列程序的運(yùn)行結(jié)果Sub tryout(ByVal x as integer, ByVal y as integer) x=x+100 y=y*6 print “x=“;x.”y=“;yEnd SubSub Form_click() Dim a%,b% a=10:b=20 tryout a,b Print “a=“;a,”b=“;bEnd Sub傳值:X=110 y=120a=10 b=20第15頁,共33頁。2、 按址傳遞變量的引用傳址方式是將實(shí)參在內(nèi)存的地址傳遞給形參,也就是實(shí)參、形參公用內(nèi)存的“地址”。在VB中,按址傳遞數(shù)據(jù)

13、是在形參前加上ByRef(默認(rèn)方式)。這種傳遞方式是一種雙向的數(shù)據(jù)傳遞,即調(diào)用時實(shí)參將值傳遞給形參;調(diào)用結(jié)束由形參將操作結(jié)果返回給實(shí)參。當(dāng)用傳址方式時,實(shí)參只能是變量、數(shù)組名,不能是常數(shù)、表達(dá)式。修改前例題 ByVal ByRef 再寫其運(yùn)行結(jié)果第16頁,共33頁。Sub tryout(ByRef x as integer, ByRef y as integer) x=x+100 y=y*6 print “x=“;x.”y=“;yEnd SubSub Form_click() Dim a%,b% a=10:b=20 tryout a,b Print “a=“;a,”b=“;bEnd Sub傳址

14、:X=110 y=120a=110 b=120第17頁,共33頁。3、 數(shù)組作過程的參數(shù) Visual Basic允許把數(shù)組作為實(shí)參傳送到過程中。數(shù)組作參數(shù)是通過傳地址方式傳送。在傳送數(shù)組時,除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn): 1為了把一個數(shù)組的全部元素傳送給一個過程,應(yīng)將數(shù)組名分別寫入形參表中,并略去數(shù)組的上下界,但括號不能省略。Private Sub Sort(a() As single) End Sub其中形參“a( )”即為數(shù)組。第18頁,共33頁。 2被調(diào)過程可通過Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上、下界。 3當(dāng)用數(shù)組作形參時,對應(yīng)的實(shí)參必須也是數(shù)組,且類型一

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

16、7) b(8) a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8)參數(shù)為數(shù)組時虛實(shí)結(jié)合示意圖 3、 數(shù)組作過程的參數(shù)第20頁,共33頁。可選參數(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 =

17、first + second If Not IsMissing(third) Then mysum = mysum + thirdEnd Function第21頁,共33頁。事件過程: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=; SumEnd SubIsMissin

18、g( )檢測可選參數(shù)是否被省略第22頁,共33頁。2、 不定數(shù)量的參數(shù)(可變參數(shù)) 一般說來,過程調(diào)用中的參數(shù)個數(shù)應(yīng)等于過程說明的參數(shù)個數(shù)。在傳遞參數(shù)時,如果要求參數(shù)的數(shù)目可以變化,則在函數(shù)過程或Sub過程的形參前可加 ParamArray關(guān)鍵字(不能與ByVal ByDef連用)指明。 格式如下:Sub 過程名( 其他參數(shù), ParamArray ( ) ) 第23頁,共33頁。Private Sub Command1_Click() Dim s( ), a%, b As Long, c As Variant, d As Double s = Array(1, 2, 3, 4, 5) Pri

19、nt sum=; multisum( s(0), s(2), s(4) ) a = 1000: b = 10000: 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第24頁,共33頁。9.4.4 對象參數(shù)窗體參數(shù)形參定義格式: 形參名

20、As form調(diào)用時實(shí)參: 必須為某個窗體名稱控件參數(shù):形參定義格式: 形參名 As Control調(diào)用時實(shí)參: 可為任意一個控件對象第25頁,共33頁。變量的作用域根據(jù)變量的作用域,變量分為局部(過程級)變量、窗體/ 模塊變量和全局變量局部變量在過程中用Dim/static語句定義,只存在于過程中用Dim 定義的變量稱為動態(tài)變量,生存期為過程的一次調(diào)用.用Static定義的變量稱為靜態(tài)變量,生存期為整個應(yīng)用程序的執(zhí)行期間(重點(diǎn)掌握,舉例)窗體/ 模塊變量Dim語句或Private語句定義,模塊中的所有過程都可使用全局變量Public語句定義,可以在所有模塊中使用9.5 變量與過程的作用范圍第

21、26頁,共33頁。Private Sub Form_Click() Dim acc As Integer, i As Integer acc = 0 For i = 1 To 3 acc = acc + funa(i) Next i Print accEnd SubPrivate Function funa(x As Integer) As Integer Static s As Integer s = s + x funa = sEnd Function運(yùn)行時單擊窗體, 程序輸出結(jié)果為:第27頁,共33頁。能能變量名前加窗體名不能不能被其他模塊存取能能不能被本模塊的其他過程存取通用聲明通用聲明過程中聲明位置PublicDimPrivateDimStatic聲明方式標(biāo)準(zhǔn)模塊窗體全局變量窗體/ 模塊級變量局部變量作用范圍不同作用范圍的三種變量聲明及使用規(guī)則第28頁,共33頁。不同作用范圍的二種過程定義及調(diào)用

溫馨提示

  • 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

提交評論