




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9章過(guò) 程與函數(shù)第1頁(yè),共33頁(yè)。過(guò)程的定義: 在設(shè)計(jì)一個(gè)規(guī)模較大、復(fù)雜程度較高的程序時(shí),往往根據(jù)需要按功能將程序分解成若干個(gè)相對(duì)獨(dú)立的部分,然后對(duì)每個(gè)部分分別編寫(xiě)一段程序,這些程序段稱(chēng)為過(guò)程。 過(guò)程是構(gòu)成程序邏輯部件的基本單位,將程序分割成較小的邏輯部件可以簡(jiǎn)化程序設(shè)計(jì)任務(wù),結(jié)構(gòu)化設(shè)計(jì)就是建立在這個(gè)思路之上。 每個(gè)過(guò)程完成一個(gè)具有特定目的的任務(wù)。9.1 事件過(guò)程與通用過(guò)程第2頁(yè),共33頁(yè)。VB中有兩類(lèi)子程序過(guò)程函數(shù)內(nèi)部函數(shù)(如:Sin(3.14/6) )通用函數(shù)(自定義函數(shù)Function)事件過(guò)程通用過(guò)程(自定義過(guò)程Sub)窗體事件過(guò)程(如:Form_Click( ))控件事件過(guò)程(如:
2、Command1_Click( ))VB子程序分類(lèi)圖事件過(guò)程是對(duì)發(fā)生的事件進(jìn)行處理的程序段通用過(guò)程和通用函數(shù)是由用戶根據(jù)自己的需要定義和編寫(xiě) 的、可供事件過(guò)程多次調(diào)用的程序段 它們都不直接與特定的事件相關(guān)聯(lián)9.1 事件過(guò)程與通用過(guò)程第3頁(yè),共33頁(yè)。9.2 通用過(guò)程(Sub過(guò)程) Sub 過(guò)程是指以規(guī)定語(yǔ)法結(jié)構(gòu)組織的、可以被重復(fù)調(diào)用的、具有特定功能的、相對(duì)獨(dú)立的程序段。 Sub過(guò)程不與任何特定的事件過(guò)程相關(guān)聯(lián),只能由別的過(guò)程調(diào)用1、 聲明 Sub 過(guò)程(定義) 聲明 Sub 過(guò)程就是在窗體或標(biāo)準(zhǔn)模塊的代碼窗口編寫(xiě)一個(gè)能實(shí)現(xiàn)預(yù)期功能的語(yǔ)句塊。聲明Sub過(guò)程的語(yǔ)法格式為: Private | Pu
3、blic Static Sub 過(guò)程名() Exit Sub 過(guò)程體 End Sub 注意: Sub 過(guò)程名無(wú)值,無(wú)類(lèi)型。第4頁(yè),共33頁(yè)。說(shuō)明:1、每個(gè)通用過(guò)程都有一個(gè)過(guò)程名(由用戶自己指定,規(guī)定同變量名),同一模塊中過(guò)程名不得重復(fù)。2、過(guò)程前加上Public關(guān)鍵字或缺省,則該過(guò)程為全局級(jí)過(guò)程,可以被應(yīng)用程序的所有窗體模塊或標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用(在窗體中定義,調(diào)用時(shí)應(yīng)加窗體名)。3、過(guò)程前加上Private關(guān)鍵字,則該過(guò)程為模塊級(jí)過(guò)程,只有在聲明它的模塊中才可以調(diào)用此過(guò)程。4、在過(guò)程名前加上Static關(guān)鍵字,表明該過(guò)程的變量都是靜態(tài)變量。5、形參列表是傳遞到過(guò)程中的變量名(多個(gè)時(shí)用“,”分
4、隔),它指明了調(diào)用時(shí)傳遞給過(guò)程的參數(shù)的類(lèi)型和個(gè)數(shù). 過(guò)程可以有參數(shù),也可以不帶任何參數(shù)。根據(jù)需要而定 格式為:ByVal|ByRef變量名( ) AS 數(shù)據(jù)類(lèi)型, ByVal 表示按值傳遞;ByRef 表示按地址傳遞6、過(guò)程內(nèi)不能再定義過(guò)程,過(guò)程定義也不能寫(xiě)在事件過(guò)程內(nèi)第5頁(yè),共33頁(yè)。如:Sub Tryout( x as integer , y as integer) x=x+100 y=y*6 Print x,y End Sub 7、建立通用過(guò)程可以使用以下兩種方法: “工具”添加過(guò)程” 在標(biāo)準(zhǔn)模塊或窗體模塊中, 直接輸入通用過(guò)程的代碼。8、子過(guò)程名不返回值,只能通過(guò)形式參數(shù)與調(diào)用語(yǔ)句通信
5、9、過(guò)程體中的Exit Sub 表示強(qiáng)制退出過(guò)程返回9.2 通用過(guò)程(Sub過(guò)程)第6頁(yè),共33頁(yè)。2、調(diào)用 Sub 過(guò)程要執(zhí)行一個(gè)過(guò)程,必須調(diào)用該過(guò)程。調(diào)用的方法為:方法1使用Call語(yǔ)句 格式:Call 過(guò)程名(實(shí)參列表)方法2. 將過(guò)程名作為語(yǔ)句使用: 格式: 過(guò)程名 特點(diǎn): Sub 過(guò)程的調(diào)用是一句獨(dú)立的語(yǔ)句。例:要調(diào)用前面的Tryout過(guò)程,可以使用下面兩種方式: Call Tryout(a , b) 或 Tryout a , b主過(guò)程Call 過(guò)程1End Sub過(guò)程1Call 過(guò)程2End Sub過(guò)程2End Sub調(diào)用的本質(zhì):轉(zhuǎn)入被調(diào)用過(guò)程去執(zhí)行,完成后返回第7頁(yè),共33頁(yè)。說(shuō)
6、明:1、使用Call語(yǔ)句調(diào)用時(shí),參數(shù)必須放在括號(hào)內(nèi),如沒(méi)有參數(shù),括號(hào)可省略2、用過(guò)程名調(diào)用時(shí),過(guò)程名后不能加括號(hào),若有參數(shù),參數(shù)與過(guò)程名間用空格隔開(kāi)3、參數(shù)表:在調(diào)用語(yǔ)句中的參數(shù)稱(chēng)為實(shí)際參數(shù)(簡(jiǎn)稱(chēng)實(shí)參),實(shí)參可以是變量、常量、數(shù)組或表達(dá)式,參數(shù)間用逗號(hào)隔開(kāi)4、可以直接調(diào)用本模塊中聲明的過(guò)程或標(biāo)準(zhǔn)模塊中聲明的全局過(guò)程;5、當(dāng)定義的過(guò)程重名時(shí),調(diào)用過(guò)程時(shí),過(guò)程名前應(yīng)加模塊名修飾;6、如果要調(diào)用窗體模塊中聲明的全局過(guò)程,調(diào)用時(shí)過(guò)程名前應(yīng)加窗體名。第8頁(yè),共33頁(yè)。 Function 過(guò)程 與Sub 過(guò)程 的主要區(qū)別是: Function 過(guò)程可通過(guò)函數(shù)名返回一個(gè)值到調(diào)用的過(guò)程1、 聲明 Functi
7、on 過(guò)程(函數(shù)定義)格式:Public|Private Static Function 函數(shù)過(guò)程名 () As = 返回值語(yǔ)句 Exit Function End Function注意:在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量名使用,函數(shù)的返回值就是通過(guò)對(duì)函數(shù)名的賦值語(yǔ)句來(lái)實(shí)現(xiàn)的。即函數(shù)值通過(guò)函數(shù)名返回。函數(shù)體中的Exit Function語(yǔ)句的功能是強(qiáng)制退出函數(shù)并返回函數(shù)過(guò)程需要返回的值的類(lèi)型由 As 設(shè)置。9.3 Function 過(guò)程(自定義函數(shù))函數(shù)體第9頁(yè),共33頁(yè)。2、 調(diào)用 Function 過(guò)程Function 過(guò)程的調(diào)用,與標(biāo)準(zhǔn)函數(shù)(內(nèi)部函數(shù))相同。 通常用在表達(dá)式中 格式:函數(shù)名()
8、 特點(diǎn):不能獨(dú)立成為語(yǔ)句,必須參加表達(dá)式的運(yùn)算。如1:下面是已知直角三角形兩直角邊的值,計(jì)算斜邊的函數(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頁(yè),共33頁(yè)。例2:將前面的兩個(gè)Sub過(guò)程改為Function過(guò)程。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( ) 無(wú)參數(shù)時(shí),括號(hào)不能省略 End IfEnd Sub第11頁(yè),共33頁(yè)。9.4 參數(shù)傳遞不同模塊(過(guò)程)之間數(shù)據(jù)的傳遞方式:通過(guò)全局變量實(shí)現(xiàn)各過(guò)程中共享數(shù)據(jù)(即在“通用”部份定義的變量,由該模塊所有過(guò)程共享)通過(guò)過(guò)程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn)按值傳遞(單向傳遞)按地址傳遞(雙向傳遞)第12頁(yè),共33頁(yè)。Sub過(guò)程和Function函數(shù)過(guò)程中的中的參數(shù)稱(chēng)為形式參數(shù)(形參),在程序中調(diào)用Sub過(guò)程和Function函數(shù)過(guò)程時(shí)中稱(chēng)為實(shí)際參數(shù)(實(shí)參) 。在調(diào)用過(guò)程時(shí),就是把“實(shí)參”依次按位置傳遞給被調(diào)用過(guò)程的“形
11、參” ,然后執(zhí)行被調(diào)用過(guò)程中的語(yǔ)句。參數(shù)傳遞時(shí)相當(dāng)于給變量賦初值。如: Print greatcd(x, y) Public Function greatcd(m As Integer, n As Integer) 參數(shù)傳遞有兩種模式:按值傳遞與 按址傳遞9.4 參數(shù)傳遞第13頁(yè),共33頁(yè)。按值傳遞就是將實(shí)參的值傳送給被調(diào)用過(guò)程中的形參。即:系統(tǒng)把實(shí)參復(fù)制一份傳送給形參。這樣,被調(diào)用的過(guò)程如果改變了形參的值,也不會(huì)改變實(shí)參的值。在VB中,傳值方式的標(biāo)志為:在形參前加上ByVal。這種傳遞方式是一種單向的數(shù)據(jù)傳遞,即調(diào)用時(shí)只能由實(shí)參的值傳遞給形參,調(diào)用結(jié)束不能由形參將操作結(jié)果返回給實(shí)參。實(shí)參可以
12、是常數(shù)、變量或表達(dá)式。1、 按值傳遞第14頁(yè),共33頁(yè)。例:寫(xiě)出下列程序的運(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頁(yè),共33頁(yè)。2、 按址傳遞變量的引用傳址方式是將實(shí)參在內(nèi)存的地址傳遞給形參,也就是實(shí)參、形參公用內(nèi)存的“地址”。在VB中,按址傳遞數(shù)據(jù)
13、是在形參前加上ByRef(默認(rèn)方式)。這種傳遞方式是一種雙向的數(shù)據(jù)傳遞,即調(diào)用時(shí)實(shí)參將值傳遞給形參;調(diào)用結(jié)束由形參將操作結(jié)果返回給實(shí)參。當(dāng)用傳址方式時(shí),實(shí)參只能是變量、數(shù)組名,不能是常數(shù)、表達(dá)式。修改前例題 ByVal ByRef 再寫(xiě)其運(yùn)行結(jié)果第16頁(yè),共33頁(yè)。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頁(yè),共33頁(yè)。3、 數(shù)組作過(guò)程的參數(shù) Visual Basic允許把數(shù)組作為實(shí)參傳送到過(guò)程中。數(shù)組作參數(shù)是通過(guò)傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn): 1為了把一個(gè)數(shù)組的全部元素傳送給一個(gè)過(guò)程,應(yīng)將數(shù)組名分別寫(xiě)入形參表中,并略去數(shù)組的上下界,但括號(hào)不能省略。Private Sub Sort(a() As single) End Sub其中形參“a( )”即為數(shù)組。第18頁(yè),共33頁(yè)。 2被調(diào)過(guò)程可通過(guò)Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上、下界。 3當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類(lèi)型一
15、致。 4實(shí)參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實(shí)參數(shù)組共用一段內(nèi)存單元。 例如:定義了實(shí)參數(shù)組b(1 to 8),給它們賦了值,調(diào)用Sort()函數(shù)過(guò)程的形式如下: Sort b( ) 或 Call Sort( b() ) 實(shí)參數(shù)組后面的括號(hào)可以省略,但為便于閱讀,建議一般不要省略為好。 3、 數(shù)組作過(guò)程的參數(shù)第19頁(yè),共33頁(yè)。 調(diào)用時(shí)形參數(shù)組a和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一段內(nèi)存單元,如圖6-7所示。因此在Sort()過(guò)程中改變數(shù)組a的各元素值,也就相當(dāng)于改變了實(shí)參數(shù)組b中對(duì)應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束時(shí),形參數(shù)組a成為無(wú)定義。 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í)虛實(shí)結(jié)合示意圖 3、 數(shù)組作過(guò)程的參數(shù)第20頁(yè),共33頁(yè)??蛇x參數(shù)和可變參數(shù)1、 可選參數(shù) 在過(guò)程的形參列表中加入Optional關(guān)鍵字,就可以指定過(guò)程的參數(shù)為可選的。如果指定了可選參數(shù),則參數(shù)表中此參數(shù)后面的其它參數(shù)也必是可選的,并且要用Optional關(guān)鍵字來(lái)聲明。 例6:求兩個(gè)數(shù)的和的函數(shù)過(guò)程。 lt6.vbp 函數(shù)過(guò)程: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頁(yè),共33頁(yè)。事件過(guò)程: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( )檢測(cè)可選參數(shù)是否被省略第22頁(yè),共33頁(yè)。2、 不定數(shù)量的參數(shù)(可變參數(shù)) 一般說(shuō)來(lái),過(guò)程調(diào)用中的參數(shù)個(gè)數(shù)應(yīng)等于過(guò)程說(shuō)明的參數(shù)個(gè)數(shù)。在傳遞參數(shù)時(shí),如果要求參數(shù)的數(shù)目可以變化,則在函數(shù)過(guò)程或Sub過(guò)程的形參前可加 ParamArray關(guān)鍵字(不能與ByVal ByDef連用)指明。 格式如下:Sub 過(guò)程名( 其他參數(shù), ParamArray ( ) ) 第23頁(yè),共33頁(yè)。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頁(yè),共33頁(yè)。9.4.4 對(duì)象參數(shù)窗體參數(shù)形參定義格式: 形參名
20、As form調(diào)用時(shí)實(shí)參: 必須為某個(gè)窗體名稱(chēng)控件參數(shù):形參定義格式: 形參名 As Control調(diào)用時(shí)實(shí)參: 可為任意一個(gè)控件對(duì)象第25頁(yè),共33頁(yè)。變量的作用域根據(jù)變量的作用域,變量分為局部(過(guò)程級(jí))變量、窗體/ 模塊變量和全局變量局部變量在過(guò)程中用Dim/static語(yǔ)句定義,只存在于過(guò)程中用Dim 定義的變量稱(chēng)為動(dòng)態(tài)變量,生存期為過(guò)程的一次調(diào)用.用Static定義的變量稱(chēng)為靜態(tài)變量,生存期為整個(gè)應(yīng)用程序的執(zhí)行期間(重點(diǎn)掌握,舉例)窗體/ 模塊變量Dim語(yǔ)句或Private語(yǔ)句定義,模塊中的所有過(guò)程都可使用全局變量Public語(yǔ)句定義,可以在所有模塊中使用9.5 變量與過(guò)程的作用范圍第
21、26頁(yè),共33頁(yè)。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)行時(shí)單擊窗體, 程序輸出結(jié)果為:第27頁(yè),共33頁(yè)。能能變量名前加窗體名不能不能被其他模塊存取能能不能被本模塊的其他過(guò)程存取通用聲明通用聲明過(guò)程中聲明位置PublicDimPrivateDimStatic聲明方式標(biāo)準(zhǔn)模塊窗體全局變量窗體/ 模塊級(jí)變量局部變量作用范圍不同作用范圍的三種變量聲明及使用規(guī)則第28頁(yè),共33頁(yè)。不同作用范圍的二種過(guò)程定義及調(diào)用
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨物運(yùn)輸代理授權(quán)委托合同
- VR技術(shù)在教育培訓(xùn)行業(yè)的創(chuàng)新應(yīng)用
- 客戶往來(lái)商務(wù)信函管理規(guī)范
- 《歷史經(jīng)典著作〈紅樓夢(mèng)〉閱讀教學(xué)設(shè)計(jì)》
- 產(chǎn)品采購(gòu)及供應(yīng)協(xié)議規(guī)范內(nèi)容
- 高考語(yǔ)文復(fù)習(xí):文言文專(zhuān)題訓(xùn)練《莊子》
- 人才培訓(xùn)與招聘服務(wù)協(xié)議
- 健康生活咨詢服務(wù)協(xié)議條款
- 補(bǔ)簽購(gòu)銷(xiāo)合同
- 高考語(yǔ)文新增分大一輪人教版講義專(zhuān)題八文言文閱讀Ⅲ核心突破五
- 使用磷化鋁進(jìn)行常規(guī)熏蒸作業(yè)
- 海洋工程裝備技術(shù)專(zhuān)業(yè)人才培養(yǎng)方案(高職)
- 天然氣培訓(xùn)課件
- 腹腔穿刺術(shù)(僅供參考)課件
- 教學(xué)課件:《新能源材料技術(shù)》朱繼平
- 人教版部編七年級(jí)下冊(cè)語(yǔ)文必背古詩(shī)文言文
- 2022年七年級(jí)初一數(shù)學(xué)希望杯競(jìng)賽模擬真題含答案27屆
- 自動(dòng)駕駛數(shù)據(jù)安全白皮書(shū)
- 工期定額-民用建筑
- 2020新版?zhèn)€人征信報(bào)告模板
- 云南省實(shí)驗(yàn)教材信息技術(shù)三年級(jí)第一冊(cè)第13課PPT課件
評(píng)論
0/150
提交評(píng)論