過程調用和參數(shù)傳遞_第1頁
過程調用和參數(shù)傳遞_第2頁
過程調用和參數(shù)傳遞_第3頁
過程調用和參數(shù)傳遞_第4頁
過程調用和參數(shù)傳遞_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、關于過程調用與參數(shù)傳遞第一張,PPT共五十頁,創(chuàng)作于2022年6月知識要點1、過程的基本概念2、sub過程定義格式定義方法窗體事件的執(zhí)行順序3、Function過程(定義格式、定義方法)第二張,PPT共五十頁,創(chuàng)作于2022年6月7.3 過程調用7.3.1 事件過程的調用7.3.2 調用Sub過程7.3.3 調用Function過程7.3.4 調用其它模塊中的公有過程 第三張,PPT共五十頁,創(chuàng)作于2022年6月 事件過程由一個發(fā)生在Visual Basic中的事件來自動調用或者由同一模塊中的其它過程顯式調用。 請看示例。p1317.3.1 事件過程的調用第四張,PPT共五十頁,創(chuàng)作于2022

2、年6月 Sub過程和function過程必須在事件過程或其他過程中顯式調用,否則過程代碼就永遠不會被執(zhí)行。 在調用程序時,程序執(zhí)行到調用某通用過程的語句后,系統(tǒng)就會將控制轉移到被調用的過程。在被調用的過程中,從第一條sub或function語句開始,依次執(zhí)行其中的所有語句,當執(zhí)行到end sub或end function語句后,返回到主調程序的斷點,并從斷點處繼續(xù)程序的執(zhí)行。7.3.2 調用Sub過程第五張,PPT共五十頁,創(chuàng)作于2022年6月主調程序 調用過程AEnd Sub過程AEnd Sub調用Sub通用過程流程第六張,PPT共五十頁,創(chuàng)作于2022年6月Sub子過程的調用(1) 用Ca

3、ll語句調用Sub過程 語法:Call 過程名(實在參數(shù)表) 實在參數(shù)的個數(shù)、類型和順序,應該與被調用過程的形式參數(shù)相匹配,有多個參數(shù)時,用逗號分隔。如果被調用的過程是一個無參過程,則括號可以省略.第七張,PPT共五十頁,創(chuàng)作于2022年6月Private Sub Command1_Click() Dim a As Integer, b As Integer a = Val(Text1.Text): b = Val(Text2.Text) Call add(a, b)End Sub例:Private Sub add(x As Integer, y As Integer) s = x + y T

4、ext3.Text = sEnd Sub調用add子過程第八張,PPT共五十頁,創(chuàng)作于2022年6月Private Sub Command1_Click() Dim a As Integer, b As Integer a = Val(Text1.Text): b = Val(Text2.Text) s = a + b Text3.Text = sEnd Sub等價于:第九張,PPT共五十頁,創(chuàng)作于2022年6月例7-2編寫一個找出任意一個正整數(shù)的因子的程序Private Sub Command1_Click() Dim Inta As Integer, St As String Inta =

5、 Text1.Text Call Factor(Inta, St) Text2.Text = StEnd SubPrivate Sub Factor(ByVal N As Integer, S As String) Dim I As Integer For I = 1 To N - 1 If N Mod I = 0 Then S = S & Str(I) Next IEnd Sub第十張,PPT共五十頁,創(chuàng)作于2022年6月(2)把過程名作為一個語句來用語法:過程名 實參1,實參2它與(1)的不同點是:去掉了關鍵字call和實參列表的括號Private Sub Command1_Click()

6、 Dim a As Integer, b As Integer a = Val(Text1.Text): b = Val(Text2.Text) add a, bEnd SubPrivate Sub add(x As Integer, y As Integer) s = x + y Text3.Text = sEnd Sub第十一張,PPT共五十頁,創(chuàng)作于2022年6月練一練:使用第2種調用方式修改例7.2。 Private Sub Command1_Click() Dim Inta As Integer, St As String Inta = Text1.Text Factor Inta,

7、 St Text2.Text = StEnd SubPrivate Sub Factor(ByVal N As Integer, S As String) Dim I As Integer For I = 1 To N - 1 If N Mod I = 0 Then S = S & Str(I) Next IEnd Sub第十二張,PPT共五十頁,創(chuàng)作于2022年6月課堂練習2:編寫一個實現(xiàn)兩數(shù)交換的程序,要求程序中定義一個交換兩數(shù)的通用過程。 Private Sub command1_click()Dim a%,b% a=text1.text b=text2.text call swap(a

8、,b) text1.text=a text2.text=bEnd SubPrivate Sub Swap( X As Integer, Y As Integer)Dim temp As Integer Temp=X : X=Y : Y=TempEnd Sub第十三張,PPT共五十頁,創(chuàng)作于2022年6月 調用Function過程的方法與調用Visual Basic內部函數(shù)方法相同。即在表達式中寫出它的名稱和相應的實在參數(shù): Function 過程名(實在參數(shù)表) 1)調用Function過程與調用Sub過程不同,必須給參數(shù)加上括號,即使調用無參函數(shù),括號也不能缺??; 2) Visual Bas

9、ic也允許像調用Sub過程那樣調用Function過程。(即使用call語句和把函數(shù)名當作一個語句使用。)7.3.3 調用Function過程第十四張,PPT共五十頁,創(chuàng)作于2022年6月例7-3 編寫程序,求兩個正整數(shù)的最大公約數(shù)。Private Sub Form_Click() Dim N As Integer, M As Integer, G As Integer N = InputBox(輸入N) M = InputBox(輸入M) G = Gcd(N, M) Print N; 和; M; 的最大公約數(shù)是:; GEnd SubPrivate Function Gcd(ByVal A A

10、s Integer, ByVal B As Integer) As Integer Dim R As Integer R = A Mod B Do While R 0 A = B:B = R:R = A Mod B Loop Gcd = BEnd Function第十五張,PPT共五十頁,創(chuàng)作于2022年6月1. 調用窗體模塊中的公有過程 Call Form1.ExamSub(實參表) 2調用標準模塊中的公有過程 Call CommonSub (實在參數(shù)) 或 Call Module2.CommonSub(實參表) 7.3.4 調用其它模塊中的公有過程(了解)第十六張,PPT共五十頁,創(chuàng)作于2

11、022年6月課堂練習在調用過程中,下述說明中正確的是( )A)只能使用Call語句調用Sub過程B)調用Sub過程時,實在參數(shù)必須用括號括起來C)在表達式中調用Function過程時, 可以不用括號把實在參數(shù)括起來D)Function過程也可用Call語句調用第十七張,PPT共五十頁,創(chuàng)作于2022年6月課堂練習在Visual Basic中,以下說法正確的是( )A)過程的定義可以嵌套,但過程的調用不能嵌套B)過程的定義不可以嵌套,但過程的調用能嵌套C)過程的定義和過程的調用均可以嵌套D)過程的定義和過程的調用均不可以嵌套第十八張,PPT共五十頁,創(chuàng)作于2022年6月課堂練習在語句Public

12、 Sub Sort(I As Integer)中,I是一個按( )傳遞的參數(shù)A)地址B)值C)變量D)常量第十九張,PPT共五十頁,創(chuàng)作于2022年6月7.4 參數(shù)的傳遞(重點、難點)7.4.1 形參與實參7.4.2 按值傳遞參數(shù)7.4.3 按地址傳遞參數(shù)7.4.4 數(shù)組參數(shù)7.4.5 對象參數(shù)第二十張,PPT共五十頁,創(chuàng)作于2022年6月 在調用一個有參數(shù)的過程時,首先進行的是“形實結合”,即按傳值傳遞或按地址傳遞方式,實現(xiàn)調用程序和被調用的過程之間的數(shù)據傳遞。Private Sub command1_click()Dim a%,b% a=text1.text b=text2.text ca

13、ll swap(a,b) text1.text=a text2.text=bEnd SubPrivate Sub Swap( X As Integer, Y As Integer)Dim temp As Integer Temp=X X=Y Y=TempEnd Sub實參形參7.4.1 形參與實參第二十一張,PPT共五十頁,創(chuàng)作于2022年6月1. 形參 出現(xiàn)在Sub過程和Function過程的形參表中的變量名、數(shù)組名稱之為形式參數(shù),過程被調用之前,并未為其分配內存,其作用是用來接收傳送給子過程的數(shù)據 形參可以是: 1) 除定長字符串變量之外的合法變量名; 2) 后面跟有左、右圓括號(注意:不

14、含下標)的數(shù)組名。 第二十二張,PPT共五十頁,創(chuàng)作于2022年6月2. 實參 實際參數(shù)是指包含在過程調用的實參表中的變量,數(shù)組等。其作用是將它們的數(shù)據(數(shù)值或地址)傳送給Sub或Function過程與其對應的形參變量。 實參可以是常量、表達式、有效的變量名、數(shù)組名組成。如call test(x2,true,a,st)算術表達式第二十三張,PPT共五十頁,創(chuàng)作于2022年6月 參數(shù)傳遞是按對應“位置”結合而不是按名字結合,即第一個實參與第一形參結合,第二個實參與第二個形參結合,依此類推。3、參數(shù)傳遞(虛實結合) 參數(shù)傳遞指主調過程的實參(調用時已有確定值和內存地址的參數(shù))傳遞給被調過程的形參,

15、參數(shù)的傳遞有兩種方式:按值傳遞、按地址傳遞。形參前加“ByVal”關鍵字的是按值傳遞,缺省或加“ByRef”關鍵字的為按地址傳遞。 第二十四張,PPT共五十頁,創(chuàng)作于2022年6月例:Private Sub command1_click()Dim a%,b% a=text1.text b=text2.text call swap(a,b) text1.text=a text2.text=bEnd SubPrivate Sub Swap( X As Integer, Y As Integer)Dim temp As Integer Temp=X X=Y Y=TempEnd Sub實參形參第二十五

16、張,PPT共五十頁,創(chuàng)作于2022年6月 說明:(1)形參表和實參表中的對應變量名可以不必相同。Private sub examsub(x as integer,y as single) .End subPrivate sub form_click() dim x as integer,y as single . Call examsub(y,x)End sub第二十六張,PPT共五十頁,創(chuàng)作于2022年6月形 參 實 參變量 變量、常數(shù)、表達式、數(shù)組元素、對象數(shù)組 數(shù)組(2)形參與實參的個數(shù)必須相同,對應位置的參數(shù)類型必須一致。對應關系如下表第二十七張,PPT共五十頁,創(chuàng)作于2022年6月

17、按值傳遞時,系統(tǒng)分配臨時的變量單元給形參。系統(tǒng)僅把實參的值復制一份,然后把這個副本再傳給形參。 被調過程執(zhí)行時,對形參的任何改變,都不會影響實參變量。結論:按值傳遞,形參變,相應的實參不變。7.4.2 按值傳遞參數(shù)第二十八張,PPT共五十頁,創(chuàng)作于2022年6月分析下列程序的值 Private Sub Command1_Click() Dim M As Integer, N As Integer M = 15: N = 20 Call Value_Change(M,N) Print M, NEnd SubPrivate Sub Value_Change(ByVal X As Integer,

18、ByVal Y As Integer) X=X+20 Y=X+Y Print “X=“;X,”Y=“;Y End Sub1520返回地址1520MNXY100010021004100510031520返回地址3555MNXY10001002100410051003第二十九張,PPT共五十頁,創(chuàng)作于2022年6月結論:按地址傳遞參數(shù),形參變,相應的實參也跟著變7.4.3 按地址傳遞參數(shù) 按地址傳遞參數(shù)是把實參變量的地址傳給形參,即系統(tǒng)并不分配臨時的變量單元給形參,而是形參與實參共用同一存儲單元,因此,被調過程執(zhí)行時,形參變量的任一變化,實參也相應改變。 按地址傳遞參數(shù)可節(jié)省內存,執(zhí)行效率高,但也

19、可能對程序運行產生某些干擾。第三十張,PPT共五十頁,創(chuàng)作于2022年6月分析下列程序的值 Private Sub Command1_Click() Dim M As Integer, N As Integer M = 15: N = 20 Call Value_Change(M,N) Print M, N End Sub Private Sub Value_Change(X As Integer, by value Y As Integer) X=X+20 Y=X+Y Print “X=“;X,”Y=“;Y End SubX=35 y=55M=35 N=20第三十一張,PPT共五十頁,創(chuàng)作于

20、2022年6月1520返回地址1000(地址)20MNXY100010021004100510033520返回地址1000(地址)55MNXY10001002100410051003第三十二張,PPT共五十頁,創(chuàng)作于2022年6月Private Sub Form_Click() Dim sum As Integer, i As Integer For i = 5 To 1 Step -1 sum = sum + fact(i) Next i Print sum=; sumEnd Sub編寫程序計算5!+4!+3!+2!+1!的值調用函數(shù),循環(huán)變量作為實參Public Function fact

21、(n As Integer) As Integer fact = 1 Do While n 0 fact = fact * n n = n - 1 LoopEnd Function按地址傳遞參數(shù)產生不良干擾的示例:(1)循環(huán)變量作為實參Why?如何修改?結果:120正確結果應為:153第三十三張,PPT共五十頁,創(chuàng)作于2022年6月參數(shù)數(shù)據類型轉換的例子Private Sub Form_Click() Dim S as Single S=125.5 Call Convert(S),”12”+”.5”)End Sub如果為Call Convert(S),”125a”)呢?Private Sub

22、Convert(Inx As Integer,Sing As Single) Inx = Inx * 2 Sing = Sing + 23 Print “Inx+”;Inx,”sing=”;SingEnd Sub第三十四張,PPT共五十頁,創(chuàng)作于2022年6月Private Sub Form_Click() Dim v1 As Integer, v2 As Integer, v3 As Integer v1 = 2: v2 = 3: v3 = 4 Print v1 + v2 + v3 * f(v1, v2, v3)End SubPublic Function f(a As Integer, b

23、 As Integer, c As Integer) a = a + 10 b = b + 10 c = c + 10 f = a + b + cEnd Function調用函數(shù)語句,實參是傳地址的。實參變量又出現(xiàn)在表達式中結果是571,而非161。why?(2)實參出現(xiàn)在表達式中第三十五張,PPT共五十頁,創(chuàng)作于2022年6月 因為在print語句中,計算表達式時,優(yōu)先執(zhí)行函數(shù)調用。調用結束時f=39,而v1,v2,v3的值也變了,不是2,3,4 而是 12,13,14所以結果是:12+13+14*39=571第三十六張,PPT共五十頁,創(chuàng)作于2022年6月Private Sub Form_

24、Click() Dim v1 As Integer, v2 As Integer, v3 As Integer v1 = 2: v2 = 3: v3 = 4 V4=v1 + v2 + v3 * f(v1, v2, v3) Print v4End Sub修改成賦值語句結果為161 因為執(zhí)行賦值語句時,計算右側表達式的值不是首先調用函數(shù),而是按從左到右的順序進行的,即計算2+3+4*39第三十七張,PPT共五十頁,創(chuàng)作于2022年6月如果修改成: Private Sub Form_Click() Dim v1 As Integer, v2 As Integer, v3 As Integer v1

25、= 2: v2 = 3: v3 = 4 V4=v1 + v2 + v3 * f(v1, v2, v3)*1.0) Print v4End Sub這是一個非整型的()也叫實型表達式 結果又是571了,因為計算實型表達式時優(yōu)先調用函數(shù)第三十八張,PPT共五十頁,創(chuàng)作于2022年6月 結論:函數(shù)調用的優(yōu)先級是不確定的,與諸多因素有關。編程時盡量不把按地址傳遞的實參變量放在函數(shù)調用的前面,可能會使算術表達式的值難以預料。第三十九張,PPT共五十頁,創(chuàng)作于2022年6月 形參數(shù)組只能是按地址傳遞的參數(shù)。 對應實參必須也是數(shù)組且數(shù)據類型必須和形參數(shù)組的數(shù)據類型相一致。7.4.4 數(shù)組參數(shù)第四十張,PPT共

26、五十頁,創(chuàng)作于2022年6月對數(shù)組作形參作幾點說明: 1)如果形參數(shù)組的類型是變長字符串型,則對應的實參數(shù)組的類型也必須是變長字符串型。第四十一張,PPT共五十頁,創(chuàng)作于2022年6月Private sub form_click() Dim array(5) as string * 8 Call changedim(array)End subPrivate sub changedim(a() as string) Dim i as integer Redim preserve a(7) For i =1 to 7 a(i)=i Next IEnd sub形參是變長數(shù)組 錯誤:實參是定長數(shù)組第四

27、十二張,PPT共五十頁,創(chuàng)作于2022年6月Private sub form_click() Dim array(5) as string * 10 Call changedim(array)End subPrivate sub changedim(a() as string*8) Dim i as integer Redim preserve a(7) For i =1 to 7 a(i)=i Next IEnd sub形參是定長數(shù)組實參也是定長數(shù)組 2)如果形參數(shù)組的類型定長字符串型,則對應的實參數(shù)組的類型也必須是定長字符串型,但長度可以不同。第四十三張,PPT共五十頁,創(chuàng)作于2022年6

28、月3)調用過程時,只要把傳遞的數(shù)組名放在實參表中即可,數(shù)組名后面不跟圓括號。Private sub form_click() Dim array(5) as string * 8 Call changedim(array)End sub第四十四張,PPT共五十頁,創(chuàng)作于2022年6月4)在過程中不可以用dim語句對形參數(shù)組進行聲明,否則將產生“重復聲明”的錯誤 ,但是使用動態(tài)數(shù)組時,可以用redim語句改變形參數(shù)組的維界,重新定義數(shù)組的大小。當控制返回調用程序時,對應參數(shù)的維界也跟著發(fā)生變化。第四十五張,PPT共五十頁,創(chuàng)作于2022年6月Private sub form_click() Dim array() as integer,i as integer Redim array(5) Print “調用前數(shù)組上界:”;ubound(array) Call changedim(array) P

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論