第四章函數(shù)和過程.ppt_第1頁
第四章函數(shù)和過程.ppt_第2頁
第四章函數(shù)和過程.ppt_第3頁
第四章函數(shù)和過程.ppt_第4頁
第四章函數(shù)和過程.ppt_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第四章函數(shù)和過程, “Sub” 保留字開始的為子過程 “Function” 保留字開始的為函數(shù)過程 例如 Private Sub Command1_Click() Form1.FontSize = 20 Form1.Print 這是一個sub過程 End Sub,在VB5.0/6.0中,除了系統(tǒng)提供的內(nèi)部函數(shù)過程和事件過程外,用戶可自定義過程下列四種過程:,在VB中,的Sub子過程分為:事件過程和通用過程 事件過程 (1)窗體事件的語法 Private Sub Form_事件名(參數(shù)列表) 語句組 End Sub (2)控件事件的語法 Private Sub 控件名_事件名(參數(shù)列表) 語句組

2、 End Sub,Sub過程,問題的引出,For i = 1 To n e = e + x i / fact(i) Next i,Private Function fact(k As Integer) As Long Dim i As Integer fact = 1 For i = 1 To k fact = fact * i Next i End Function,Function過程,Visual Basic函數(shù)分為內(nèi)部函數(shù)和外部函數(shù),外部函數(shù)是用戶根據(jù)需要用Function關(guān)鍵字定義的函數(shù)過程,與子過程不同的是函數(shù)過程將返回一個值 。,函數(shù)過程(Function過程)的定義,Publi

3、c|PrivateStaticFunction 函數(shù)名()As Exit Function 函數(shù)名=返回值 End Function,說明: (1)在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量使用,函數(shù)的返回值就是通過對函數(shù)名的賦值語句來實(shí)現(xiàn)的,在函數(shù)過程中至少要對函數(shù)名賦值一次。 (2)AS類型:是指函數(shù)返回值的類型,若省略,則函數(shù)返回變體類型值(Variant)。 (3)Exit Function:表示退出函數(shù)過程,常常是與選擇結(jié)構(gòu)(If或Select Case語句)聯(lián)用,即當(dāng)滿足一定條件時,退出函數(shù)過程。,函數(shù)的調(diào)用,調(diào)用形式如下: 函數(shù)名(實(shí)參列表) 或 函數(shù)名 實(shí)參列表 或 變量=函數(shù)名(實(shí)參列表)

4、或 call 函數(shù)名(實(shí)參列表) 說明: 在調(diào)用時實(shí)參和形參的數(shù)據(jù)類型、順序、個數(shù)必須匹配。函數(shù)調(diào)用只能出現(xiàn)在表達(dá)式中,其功能是求得函數(shù)的返回值。,例4-2,找出親密數(shù)對(ab, 但a的因子和 等于b,而b的因子和等于a),For a = 6 To 5000 b = f1(a) c = f1(b) If c = a And a b Then Form1.Print a, b Next a,只有b為a 的因子和,才來檢驗(yàn)b的因子和是否與a 相等,Private Function f1(n As Integer) As Integer Dim i As Integer f1 = 1 For i =

5、 2 To n / 2 If n Mod i = 0 Then f1 = f1 + i Next i End Function,符合條件,I 為因子,累加,例4-3,顯示1-1000之間的素?cái)?shù),要求編制函數(shù)過程,用于判斷1個整數(shù)是否是素?cái)?shù),For i = 1 To 1000 If prime(i)=true Then Print i, k = k + 1 If k Mod 6 = 0 Then Print 每行輸出6個 End If Next i,Private Function prime(n As Integer) As Boolean If n Sqr(n) Then prime = T

6、rue Else prime = False End If End Function,例4-4, 計(jì)算a數(shù)組中最大值與b數(shù)組中最大值之差,m = InputBox(輸入a數(shù)組元素的個數(shù), 1=m=20) n = InputBox(輸入b數(shù)組元素的個數(shù), 1=n=20) ReDim a(m) As Single, B(n) As Single For i = 1 To m a(i) = InputBox(a( + Str(i) + ), 輸入數(shù)組a) Next i For i = 1 To n B(i) = InputBox(b( + Str(i) + ), 輸入數(shù)組b) Next i Prin

7、t fmax(a(), m) - fmax(B(), n),Private Function fmax(x() As Single, ByVal n As Byte) As Single Dim i As Integer fmax = x(1) For i = 2 To n If x(i) fmax Then fmax = x(i) Next i End Function,例4-5,編寫一個函數(shù),其功能是求一個二維數(shù)組中全體元素的和,Private Sub form_click() Dim x(2, 3) As Single x(1, 1) = 1: x(1, 2) = 2: x(1, 3)

8、= 3 x(2, 1) = 2: x(2, 2) = 3: x(2, 3) = 4 Form1.Print f4(x(), 2, 3) End Sub,Private Function f4(a() As Single, m As Byte, n As Byte) As Single Dim i As Byte, j As Byte For i = 1 To m For j = 1 To n f4 = f4 + a(i, j) Next j Next i End Function,子過程的定義形式如下: Public|PrivateStatic Sub 子過程名(形參表) 語句組 語句組 En

9、d Sub,通用過程(Sub過程)的定義,說明: (1)子過程名:命名規(guī)則與變量名規(guī)則相同。子過程名不返回值,而是通過形參與實(shí)參的傳遞得到結(jié)果,調(diào)用時可返回多個值。,(2)形式參數(shù)列表:形式參數(shù)通常簡稱“形參”,僅表示形參的類型、個數(shù)、位置,定義時是無值的,只有在過程被調(diào)用時,虛實(shí)參結(jié)合后才獲得相應(yīng)的值。 (4)參數(shù)的定義形式: ByValByRef變量名( )As 類型,, ByVal表示當(dāng)該過程被調(diào)用時,參數(shù)是按值傳遞的;缺省或ByRef表示當(dāng)該過程被調(diào)用時,參數(shù)是按地址傳遞的。,編一個交換兩個整型變量值的子過程。 Private Sub Swap( X As Integer, Y As

10、Integer) Dim temp As Integer Temp=X : X=Y : Y=Temp End Sub,過程的調(diào)用 1 子過程的調(diào)用 子過程名 參數(shù)列表 或 Call 子過程名(參數(shù)列表) 說明: (1)參數(shù)列表稱為實(shí)參或?qū)嵲仨毰c形參保持個數(shù)相同,位置與類型一一對應(yīng)。 (2)調(diào)用時把實(shí)參值傳遞給對應(yīng)的形參。其中值傳遞(形參前有ByVal說明)時實(shí)參的值不隨形參的值變化而改變。而地址傳遞時實(shí)參的值隨形參值的改變而改變。,(3)當(dāng)參數(shù)是數(shù)組時,形參與實(shí)參在參數(shù)聲明時應(yīng)省略其維數(shù),但括號不能省。 (4)調(diào)用子過程的形式有兩種,用Call關(guān)鍵字時,實(shí)參必須加圓括號括起,反之則實(shí)參之

11、間用“,”分隔。 例:調(diào)用上面定義的Swap子過程的形式: Swap a,b Call Swap(a,b),例4-6,Private Sub prn(m As Byte, n As Byte, zf As String) Print Space(m); String(n, zf) End Sub Private Sub form_click() Dim i As Byte For i = 1 To 4 Call prn(6 - i, 2 * i - 1, *) Next i For i = 1 To 3 Call prn(3, 5, #) Next i End Sub,For i = 1 To

12、 6 b(i) = InputBox(b( + Str$(i) + )=, ) Next i Call sort(b(), 6) For i = 1 To 6 Print b(i), Next i,例4-7編程,將數(shù)組中各元素按值從大到小排序, 要求將數(shù)組排序編寫為sub過程,Private Sub sort(a() As Single, ByVal n As Byte) Dim i As Byte, j As Byte, k As Byte, temp As Single For i = 1 To n - 1 k = i For j = i + 1 To n If a(j) a(k) The

13、n k = j Next j temp! = a(k): a(k) = a(i): a(i) = temp! Next i End Sub,過程之間參數(shù)的傳遞,Visual Basic中不同模塊(過程)之間數(shù)據(jù)的傳遞有兩種方式: 通過過程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn); 使用全局變量來實(shí)現(xiàn)各過程中共享數(shù)據(jù)。,形式參數(shù)與實(shí)際參數(shù),1、形式參數(shù) 是指在定義通用過程時,出現(xiàn)在Sub或Function語句中的變量名后面園括號內(nèi)的數(shù),是用來接收傳送給子過程的數(shù)據(jù),形參表中的各個變量之間用逗號分隔。,2、實(shí)際參數(shù) 實(shí)際參數(shù)是指在調(diào)用Sub或Function過程時,寫入子過程名或函數(shù)名后括號內(nèi)的參數(shù),其作用是將它

14、們的數(shù)據(jù)(數(shù)值或地址)傳送給Sub或Function過程與其對應(yīng)的形參變量。 實(shí)參可由常量、表達(dá)式、有效的變量名、數(shù)組名(后加左、右括號,如A())組成,實(shí)參表中各參數(shù)用逗號分隔。,參數(shù)傳遞(虛實(shí)結(jié)合),參數(shù)傳遞指主調(diào)過程的實(shí)參(調(diào)用時已有確定值和內(nèi)存地址的參數(shù))傳遞給被調(diào)過程的形參,參數(shù)的傳遞有兩種方式:按值傳遞、按地址傳遞。形參前加“ByVal”關(guān)鍵字的是按值傳遞,缺省或加“ByRef”關(guān)鍵字的為按地址傳遞。,傳址與傳值 傳址: 形參得到的是實(shí)參的地址,當(dāng)形參值的改變同時也改變實(shí)參的值。 傳值: 形參得到的是實(shí)參的值,形參值的改變不會影響實(shí)參的值。,Sub Swap2(x as doubl

15、e, y as double) Dim T as double T = x: x = y: y = T End Sub,Sub Swap1(ByVal x as double, ByVal y as double) Dim T as double T = x: x = y: y = T End Sub,Private Sub CmdOK_Click() Dim a%,b% a = 10: b = 20 Swap1 a, b 傳 值 Print A1=; a, B1=; b a = 10: b = 20 Swap2 a, b 傳地址 Print A2=; a, B2=; b End Sub,Su

16、b Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End Sub,Sub Swap1(ByVal x%, ByVal y%) Dim Temp% Temp = x: x = y: y = Temp End Sub,值傳遞的執(zhí)行過程如下圖:,通過地址傳遞數(shù)據(jù)的執(zhí)行過程,有關(guān)過程之間數(shù)據(jù)傳遞的幾點(diǎn)說明,1參數(shù)的數(shù)據(jù)類型,2 按值傳遞參數(shù),3 按地址傳遞參數(shù),注意:在子過程和函數(shù)過程調(diào)用時,如果實(shí)參是常量(包括系統(tǒng)常量、用Const自定義的符號常量)或表達(dá)式,無論在定義時使用值傳遞還是地址傳遞,此時都是按值傳遞方式將常量或表達(dá)式計(jì)算的值傳遞給形參

17、變量。 如果形參定義是按傳地址方式,但調(diào)用時想使實(shí)參變量按值方式傳遞,可以把實(shí)參變量加上括號,將其轉(zhuǎn)換成表達(dá)式即可。,參數(shù)的傳遞問題:,4使用子過程還是使用函數(shù)過程 解決一個問題既可以使用子過程,也可以使用函數(shù)過程,是使用子過程還是使用函數(shù)過程呢?如果是需要求得一個值,一般情況使用函數(shù)過程,如不是為了求一個值,而是完成一些操作,或需要返回多個值,則使用子過程比較方便。,分別編寫計(jì)算下面級數(shù)的子過程和函數(shù)過程,并在窗體的單擊事件中調(diào)用。 級數(shù)為, 要求精度為:,數(shù)組作過程的參數(shù),Visual Basic允許把數(shù)組作為實(shí)參傳送到過程中。數(shù)組作參數(shù)是通過傳地址方式傳送。在傳送數(shù)組時,除遵守參數(shù)傳送的

18、一般規(guī)則外,還應(yīng)注意以下幾點(diǎn): 1為了把一個數(shù)組的全部元素傳送給一個過程,應(yīng)將數(shù)組名分別寫入形參表中,并略去數(shù)組的上下界,但括號不能省略。 Private Sub Sort( a() As single) End Sub 其中形參“a( )”即為數(shù)組。,2被調(diào)過程可通過Lbound和Ubound函數(shù)確定實(shí)參數(shù)組的上、下界。 3當(dāng)用數(shù)組作形參時,對應(yīng)的實(shí)參必須也是數(shù)組,且類型一致。 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ù)組后面的括號可以省略,

溫馨提示

  • 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

提交評論