第6章過程.ppt_第1頁
第6章過程.ppt_第2頁
第6章過程.ppt_第3頁
第6章過程.ppt_第4頁
第6章過程.ppt_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、本章主要內(nèi)容,過程、函數(shù)的定義和使用 函數(shù)和過程參數(shù)的傳遞 變量、過程的作用域,第6章 過程,過程是一個具有某種功能的獨(dú)立程序單位,供多次調(diào)用。,第6章 過程,使程序變得更簡短而清晰 有利于程序維護(hù) 可以提高程序開發(fā)的效率 提高了代碼的重用性,為什么設(shè)計(jì)過程,過程的分類,VB中過程按是否由系統(tǒng)提供分為兩種過程: 系統(tǒng)提供的: 內(nèi)部函數(shù): 例:print abs(-90) 事件過程: 例:private sub form_click() print abs(-90) End sub,用戶自定義的:通用過程,通用過程: 有時(shí)多個不同的事件過程可能需要使用同一段程序代碼,這時(shí)可將這段代碼獨(dú)立出來,編

2、寫為一個共用的過程,稱為通用過程。 通用過程常用的有兩類: Sub過程 (無返回值) Function 過程 (有返回值),通用過程的分類,6.1 函數(shù)過程的定義與調(diào)用,1.引例:已知多邊形的邊和對角線的長 度,求多邊形的面積,6.1 函數(shù)過程的定義與調(diào)用,若三角形三個邊的長度為x,y,z,則三角形的面積公式:,其中:,6.1 函數(shù)過程的定義與調(diào)用,分析:首先定義一個求三角形面積的函數(shù)過程,過程中有三個參數(shù),分別代表三角形的三個邊,函數(shù)返回值為所求的面積,然后三次調(diào)用該函數(shù),6.1 函數(shù)過程的定義與調(diào)用,定義函數(shù) Public Function area(x!, y!, z!) As Sing

3、le Dim C! C = 1 / 2 * (x + y + z) area = Sqr(C * (C - x) * (C - y) * (C - z) End Function,其中: Public可以省略,也可以用Private 注意: 函數(shù)返回值一定要通過函數(shù)名賦值實(shí)現(xiàn),形參x , y, z,函數(shù)過程名,函數(shù)返回值的類型,6.1 函數(shù)過程的定義與調(diào)用,Private Sub Form_Click() 調(diào)用過程求面積 Dim a!, b!, c!, d!, e!, f!, g!, s1!, s2!, s3! a = InputBox(請輸入a) b = InputBox(請輸入b) c =

4、 InputBox(請輸入c) d = InputBox(請輸入d) e = InputBox(請輸入e) f = InputBox(請輸入f) g = InputBox(請輸入g) s1 = area(a, b, c) 第一次調(diào)用函數(shù) s2 = area(c, d, e) s3 = area(e, f, g) Print s1 + s2 + s3 End Sub,實(shí)參a ,b ,c,6.1 函數(shù)過程的定義與調(diào)用,2. 函數(shù)過程的定義 : 1) 利用菜單命令 工具-添加過程,再單擊”函數(shù)”單選鈕,6.1 函數(shù)過程的定義與調(diào)用,2. 函數(shù)過程的定義 : 2) 利用代碼窗口直接定義,Public|

5、Private Function 函數(shù)名(形參聲明) As 類型 局部變量或常數(shù)定義 語句塊 Exit Function 函數(shù)名=返回值 End Function,說明: Public: 公有過程,被程序中的所有模塊訪問調(diào)用。 Private: 私有過程,只能被本模塊的其它過程訪問。 As 類型: 函數(shù)返回值的類型 Exit Function : 在函數(shù)過程中終止過程的運(yùn)行。 形參聲明形式: 形參名1 As 類型,形參名2 As 類型, 形參:只能是變量或數(shù)組,函數(shù)過程體,例6.1,6.1 函數(shù)過程的定義與調(diào)用,3. 函數(shù)過程的調(diào)用 :,函數(shù)過程名(實(shí)參),如例6.1的三條調(diào)用函數(shù)area求面

6、積: s1 = area(a, b, c) s2 = area(c, d, e) s3 = area(e, f, g),第1次調(diào)用過程 實(shí)參 a b c 形參 x y z,例6.2 編一個程序求最大公約數(shù)的函數(shù)過程,m n n0 r=m mod n m=n n=r 124 24 T 體 4 24 4 4 T 體 0 4 0 0 F 結(jié)束循環(huán),公約數(shù)為m,Function gcd(m%, n%) As Integer If m 0 求最大公約數(shù) r = m Mod n m = n : n = r Loop gcd = m End Function,6.1 函數(shù)過程的定義與調(diào)用,例6.2 編一個程

7、序求最大公約數(shù)的函數(shù)過程,Function gcd(m%, n%) As Integer If m 0 求最大公約數(shù) r = m Mod n m = n n = r Loop gcd = m End Function,調(diào)用函數(shù) Private Sub Form_Click() Dim x%, y%, z% x = 124: y = 24 z = gcd(x, y) Print 最大公約數(shù); z End Sub,6.1 函數(shù)過程的定義與調(diào)用,例6.3 編一個函數(shù)過程,統(tǒng)計(jì)字符串中漢字個數(shù),6.1 函數(shù)過程的定義與調(diào)用,例6.3 編一個函數(shù)過程,統(tǒng)計(jì)字符串中漢字個數(shù),Function CountC

8、%(s$) 定義函數(shù)過程 Dim i%, k%, c$ For i = 1 To Len(s) c = Mid(s, i, 1) If Asc(c) 0 Then k = k + 1 Next i CountC = k End Function,漢字的ASCII碼值小于0,6.1 函數(shù)過程的定義與調(diào)用,例6.3 編一個函數(shù)過程,統(tǒng)計(jì)字符串中漢字個數(shù),Private Sub Command1_Click() 調(diào)用 Dim C1! C1 = CountC(Text1) Picture1.Print Text1; Tab(30); :有 ; C1; 個漢字 End Sub,注意:書上P150 倒數(shù)第

9、2行,末尾的分號應(yīng)該去掉,6.2 子過程的定義與調(diào)用,1. 引例 例6.4 編一個過程,對Label1控件進(jìn)行移動,其中通過參數(shù)Tag的值(1或-1)決定向右下角還是左上角移動,6.2 子過程的定義與調(diào)用,1. 引例,Sub MyMove(Tag%) 定義過程MyMove,形參為Tag Label1.Left = Label1.Left + Tag * 200 Label1.Top = Label1.Top + Tag * 200 End Sub Private Sub Command1_Click() Dim k% If Rnd 0.5 Then k = 1 Else k = -1 Call

10、 MyMove(k) 調(diào)用過程,k是實(shí)參 或 MyMove k End Sub,6.2 子過程的定義與調(diào)用,2. Sub子過程的定義 Private | Public Sub 過程名(形參聲明) 局部變量或常數(shù)定義 Exit Sub 語句塊 End Sub,3. Sub子過程的調(diào)用 方法一: Call 過程名 (實(shí)參列表) 方法二: 過程名 實(shí)參列表,P151括號位置寫錯位了,例6.4,8.1.1 Sub 子過程的定義與調(diào)用,注意:定義一個過程中,不能在該過程中又定義了另一個過 程,即定義過程時(shí)不能嵌套,否則出錯。,Private Sub a() Print * Private Sub b()

11、 Print * End Sub End Sub Private Sub Command1_Click() Call a End Sub,6.2 子過程的定義與調(diào)用,8.1.1 Sub 子過程的定義與調(diào)用,注意:定義過程時(shí)不能嵌套定義,但可以調(diào)用另一個過程。,Private Sub a() Print * Call b End Sub Private Sub b() Print * End Sub Private Sub Command1_Click() Call a End Sub,06.9,下列敘述中正確的是( )。 A)一個Sub過程至少要有一個Exit Sub語句 B)一個Sub過程必

12、須有一個End Sub語句 C)可以在Sub過程中定義一個Function過程, 但不能定義Sub過程 D)調(diào)用一個Function過程可以獲得多個返回值,b,Function和Sub兩種過程的區(qū)別,例6.5 分別編一個統(tǒng)計(jì)字符串S中定冠詞” the “出現(xiàn)的個數(shù)的子過程和函數(shù)過程,并分別調(diào)用,運(yùn)行界面如圖,如:輸入”If you cant find the answers you need in the product”,則顯示結(jié)果如上,6.2 子過程的定義與調(diào)用,Function FuncThe(s$) 方法一,定義函數(shù)過程 Dim Count%, i%, st$ Count = 0 :

13、st = Trim(s) i = InStr(st, the ) Do While i 0 Count = Count + 1 st = Mid(st, i + 1) i = InStr(st, the ) Loop FuncThe = Count End Function Private Sub Command1_Click() 調(diào)用函數(shù)過程 Text2 = FuncThe(Text1) End Sub,兩邊要有空格,Function和Sub兩種過程的區(qū)別,為找下一個準(zhǔn)備,6.2 子過程的定義與調(diào)用,Sub ProcThe(s$, Count%) 方法二,定義sub過程 Dim i%, st

14、$ Count = 0 : st = Trim(s) i = InStr(st, the ) Do While i 0 Count = Count + 1 st = Mid(st, i + 1) : i = InStr(st, the ) Loop End Sub Private Sub Command2_Click() 調(diào)用子程序過程 Dim n% : Call ProcThe(Text1, n) : Text3 = n End Sub,增加一個形參Count,保存?zhèn)€數(shù),Function和Sub兩種過程的區(qū)別,6.2 子過程的定義與調(diào)用,1.若程序有一個返回值,用函數(shù)過程比較直觀,當(dāng)過程有多

15、 個返回值時(shí),習(xí)慣用子過程 2.函數(shù)過程有返回值,過程名就有類型,同時(shí)在函數(shù)過程 體內(nèi)必須對函數(shù)過程名賦值. 3.形參個數(shù)的確定: 不要將過程中使用過的變量均作為形 參 4. 形參只能是簡單變量、數(shù)組名、自定義類型,Function和Sub兩種過程的區(qū)別,如例6.1 求面積 Public Function area(x!, y!, z!) As Single Dim C! C = 1 / 2 * (x + y + z) area = Sqr(C * (C - x) * (C - y) * (C - z) End Function,6.3 參數(shù)傳遞,參數(shù)傳遞: 在調(diào)用過程時(shí),就是參數(shù)傳遞,是虛(

16、形參)實(shí)(實(shí)參)結(jié)合。 虛實(shí)結(jié)合的兩種方式: 傳值和傳址,6.3.1 傳址與傳值,傳值: “單向” 傳遞,傳址: “雙向” 傳遞,實(shí)參,形參,傳值時(shí):在形參前用 ByVal來界定,傳址時(shí),在形參前用 ByRef或無 ByRef和Byval關(guān)鍵字。,實(shí)參,形參,例6.7 編寫交換兩個數(shù)的過程,Swap1用傳值傳遞,Swap2用傳址傳遞,請讀者區(qū)別兩個過程分別調(diào)用后的結(jié)果,6.3.1 傳址與傳值,Public Sub Swap1(ByVal x%, ByVal y%) 傳值 Dim t% : t = x : x = y : y = t End Sub Public Sub Swap2(ByRef

17、x%, y%) 傳址 Dim t% : t = x : x = y : y = t End Sub,Private Sub Command1_Click() Dim a%, b% : a = 10: b = 20 Swap1 a, b 調(diào)用sub過程Swap1,值單向 Print A1 = ; a; B1 = ; b; a = 10: b = 20 Swap2 a, b 調(diào)用sub過程Swap2,址雙向 Print A1 = ; a; B1 = ; b; End Sub,傳址:形參的變化會對實(shí)參 產(chǎn)生影響。(雙向傳遞), ,傳值:形參的變化不會對實(shí)參產(chǎn)生影響。(單向傳遞), ,6.3.1 傳址

18、與傳值,6.3 參數(shù)傳遞 實(shí)驗(yàn)書P174-4,Sub m(x As Integer, y As Integer) x = x + y y = y + x End Sub Private Sub Form_Click() Dim x As Integer Dim y As Integer x = 4: y = 5 m x, y 址傳遞 Print x; y; m (x), (y) 值傳遞 Print x; y : End Sub 單擊命令按鈕,則結(jié)果是_。,m x, y,調(diào)用過程m, 址傳遞 形: X=4+5=9, Y=5+9=14 實(shí)參等于形參 m (x), (y),調(diào)用過程m, 值傳遞 形:

19、x=9+14=23 y=14+23=37 實(shí)參:不變,注意: 帶括號的變量傳遞時(shí)按值傳遞,6.3.2 數(shù)組參數(shù)的傳遞,用數(shù)組名作為形參或?qū)崊?,按址傳遞,忽略維數(shù)的定義,但數(shù)組的圓括號不能省 如果被調(diào)用過程不知道實(shí)參數(shù)組的上界和下界,可用LBound和UBound函數(shù)來確定傳送給過程的數(shù)組的下界和上界 用數(shù)組元素作為實(shí)參進(jìn)行傳遞,6.3.2 數(shù)組參數(shù)的傳遞,例6.8 編一個函數(shù)過程,求任意一維數(shù)組中各元素之積,主調(diào)該函數(shù),分別求,Function tim(a() As Integer) As Double 定義 t = 1 For i = LBound(a) To UBound(a) t = t

20、 * a(i) Next i tim = t End Function Private Sub Command1_Click() Dim a%(1 To 5), b%(2 To 10), i%, t1#, t2# For i = 1 To 5 賦初值 a(i) = i Next i For i = 2 To 10 賦初值 b(i) = i Next i t1 = tim(a() : t2 = tim(b() 調(diào)用 Print t1=; t1, t2=; t2 End Sub,6.3.2 數(shù)組參數(shù)的傳遞,例6.9 編兩個子過程:子過程一求數(shù)組中最大值和最小值;子過程二以每行5列來顯示數(shù)組結(jié)果.

21、主調(diào)程序有10個元素,分別調(diào)用兩個子過程.,Sub fmaxmin(a(), maxa, mina) 求最大值最小值的過程 n1 = LBound(a) : n2 = UBound(a) maxa = a(n1) : mina = a(n1) For i = n1 + 1 To n2 If a(i) maxa Then maxa = a(i) If a(i) mina Then mina = a(i) Next i End Sub Sub printa(b() 一行輸出5個數(shù)組元素的過程 For i = LBound(b) To UBound(b) Print b(i); j = j + 1

22、If j Mod 5 = 0 Then Print Next i End Sub,P157 的代碼錯寫在一行上了,Private Sub Command1_Click() Dim a(1 To 10) For i = 1 To 10 Randomize a(i) = Int(Rnd * 100) Next i Call printa(a() 調(diào)用 Call fmaxmin(a(), a1, a2) Print 最大值為:; a1, 最小值為:; a2 End Sub,補(bǔ)充對象作為過程的參數(shù),設(shè)一個工程由兩個窗體組成,其名稱分別為 Form1和Form2,在Form1上有一個名稱為command

23、1的命 令按鈕.窗體Form1的程序代碼如下: Private Sub Command1_Click() Dim a As Integer a = 10 Call G(Form2, a) End Sub Private Sub G(f As Form, x As Integer) y = IIf(x 10, 100, -100) f.Show f.Caption = Y End Sub,運(yùn)行程序后,正確的結(jié)果是() orm1的caption的屬性值為 orm的caption的屬性值為 orm1的caption的屬性值為 orm的caption的屬性值為,B,作用域是某些事物起作用或有效的區(qū)域。

24、,限于陸地,限于海洋,限于空中,6.4 過程和變量的作用域,在程序中我們定義的變量、過程、函數(shù)均有其作用范圍即作用域。 過程作用域分為: 1.窗體/模塊級:指在某個窗體或標(biāo)準(zhǔn)模塊內(nèi)定義的過程,定義的過程前加Private 關(guān)鍵字,只能被本窗體或本標(biāo)準(zhǔn)模塊中的過程調(diào)用 2. 全局級:指在某個窗體或標(biāo)準(zhǔn)模塊內(nèi)定義的過程,其默認(rèn)是全局的,也可以加Public關(guān)鍵字, 作用域最大,作用在整個工程范圍所有窗體和所有標(biāo)準(zhǔn)模塊內(nèi)。,6.4.1 過程的作用域,1. 局部變量(過程級) : 在過程中用Dim或不加聲明直接使用的變量 2. 窗體/模塊級變量: 在窗體模塊中的“通用”過程中用Dim/Private聲

25、明,可被本窗體/模塊的任何過程訪問 3. 全局級變量(工程級): 必須在標(biāo)準(zhǔn)模塊的通用過程中用Public或global定義,可以被應(yīng)用程序的任何過程或函數(shù)訪問.全局變量的值在整個應(yīng)用程序中始終不會消失和重新初始化,只有當(dāng)整個應(yīng)用程序執(zhí)行結(jié)束時(shí),才會消失。,6.4.2變量的作用域,6.4.2變量的作用域,例: 在一個標(biāo)準(zhǔn)模塊中進(jìn)行不同級的變量聲明 Public pa As Integer 全局變量 Private mb As String * 10 窗體模塊級變量 Sub F1() Dim Fa As Integer 局部變量 End Sub Sub F2() Dim Fb As Single

26、 局部變量 End Sub,6.4.2變量的作用域,說明: 在一個過程中,變量不能同名,但可以與過程外的窗體/模塊級變量或全局變量同名. 如果存在同名情況,則在過程內(nèi)使用的變量一般是指過程內(nèi)定義的局部變量,全局變量被同名的局部變量”屏蔽”掉了,若要訪問,則要在變量名前加窗體名或模塊名,使用形式如下:,窗體名或模塊名.變量名,6.4.2變量的作用域,Public temp As Integer 全局變量 Private Sub Form_Click() Dim temp As Integer 局部變量 temp = 10 訪問局部變量 Form1.temp = 20 訪問全局變量必須加窗體名 P

27、rint Form1.temp, temp End Sub,6.4.2 變量的作用域 實(shí)驗(yàn)P164-21,在窗體上畫一個名稱為Commandl的命令按鈕,再畫兩個名稱分別為Labell、Label2的標(biāo)簽,然后編寫如下程序代碼: Private x As Integer Private Sub Command1_Click() x = 5: Y = 3 Call proc(x, Y) Label1.Caption = x :Label2.Caption = Y End Sub Private Sub proc(ByVal a As Integer, ByVal b As Integer) x

28、= a * a :Y = b + b End Sub 程序運(yùn)行后,單擊命令按鈕,則兩個標(biāo)簽中顯示的內(nèi)容分別是: A) 5和3 B) 25和3 C)25和6 D)5和6,6.4.3 靜態(tài)變量,靜態(tài)變量: 在程序運(yùn)行過程中可以保留變量的值。 每次調(diào)用過程時(shí),靜態(tài)變量的初值為上一次調(diào) 用過程結(jié)束后的變量的值,有如下三種定義形式: Static 變量名 As 類型 Static Function 函數(shù)名(參數(shù)列表) As 類型 Static sub 過程名(參數(shù)列表),若函數(shù)名、過程名前加Static,表示該函數(shù)、過程內(nèi)的局部變量為靜態(tài)變量,例6.10 一個窗體單擊事件過程(Form_Click())

29、和一個求和函數(shù)(sum()組成的應(yīng)用程序,在Form_Click()過程中5次調(diào)用函數(shù)sum()。,注意:若將Static j%修改為dim j %,則結(jié)果如下面 的圖所示.,Private Sub Form_Click() Dim i%, isum% For i = 1 To 5 isum = sum(i) Print isum=; isum Next i End Sub Public Function sum(n As Integer) Static j% : j = j + n sum = j End Function,6.4.3 靜態(tài)變量,補(bǔ)例(實(shí)驗(yàn):P215-20) Function

30、F(aAsInteger) b=0 Staticc b=b+1 c=c+2 F=a+b+c EndFuncton PrivateSubCommand1_Click() DimaAsInteger a=2 Fori=1to3 Print F(a); Nexti EndSub 運(yùn)行上面的程序,單擊命令按鈕,輸出結(jié)果為_。 A)456B)579C)468 D)479,分析: I=1,b=1,c=2,f=2+1+2=5 I=2,b=1,c=4,f=2+1+4=7 I=3,b=1,c=6,f=2+1+6=9,6.5 遞歸,過程的嵌套調(diào)用: 在一個過程(Sub過程或Function過程)中調(diào)用另外一個過程

31、,稱為過程的嵌套調(diào)用。,主程序 調(diào)用S1 End Sub,子過程 S1 調(diào)用S2 End Sub,子過程S2 End Sub,執(zhí)行過程: 主程序或子過程遇到調(diào)用子過程語句就轉(zhuǎn)去執(zhí)行子過程,而本程序的余下部分要等從子過程返回后才得以繼續(xù)執(zhí)行。,6.5 遞歸,遞歸:就是一個過程調(diào)用過程本身。在遞歸調(diào)用中,一個過程執(zhí)行的某一步要用到它自身的上一步(或上幾步)的結(jié)果。 例:用遞歸方法求n?。??。?。 用遞歸方法求4!,即4!等于4 3!,而3!32!1!1。 可用下面的遞歸公式表示:,例6.11 求fac(n)=n! 用遞歸方法求n?。??。?遞歸編程特點(diǎn):二分支 1.一分支結(jié)束 2. 二分支規(guī)則,

32、Public Function fac(n As Integer) As Integer 定義 If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End If End Function Private Sub Command1_Click() 調(diào)用 Print fac(4)=; fac(4) End Sub,6.5 遞歸,8.4 遞歸,例:用遞歸方法求n?。?!)的調(diào)用過程。,fac(4)=4*fac(3),fac(3)=3*fac(2),fac(2)=2*fac(1),fac(1)=1,fac(2)=2*1,fac(3)=3*2,fac(4)=4

33、*6,6.5 遞歸,例6.12 用函數(shù)過程及遞歸實(shí)現(xiàn)求兩個數(shù)的最大公約數(shù),6.5 遞歸,例6.12 用函數(shù)過程及遞歸實(shí)現(xiàn)求兩個數(shù)的最大公約數(shù),6.5 遞歸,Function gcd1(m%, n%) As Integer 方法一函數(shù) Do r = m Mod n m = n n = r Loop While r 0 gcd1 = m End Function Private Sub Command1_Click() 調(diào)用函數(shù)過程gcd1 Dim x%, y% x = CInt(Text1) y = CInt(Text2) If x y Then t = x: x = y: y = t Text

34、3 = gcd1(x%, y%) End Sub,6.5 遞歸,Public Function gcd%(m%, n%) 方法二,遞歸 If (m Mod n) = 0 Then gcd = n Else gcd = gcd(n, m Mod n) End If End Function Private Sub Command2_Click() 調(diào)用遞歸函數(shù)gcd Dim x%, y% x = CInt(Text1) y = CInt(Text2) If x y Then t = x: x = y: y = t Text3 = gcd(x%, y%) End Sub,查找:在數(shù)組中,根據(jù)指定的

35、關(guān)鍵值,找出與其值相同的元素。有順序查找和二分查找方法。,6.6綜合應(yīng)用,例6.15 順序查找根據(jù)查找的關(guān)鍵字與數(shù)組的元素逐一比較,若相同,則查找成功,若找不到,則查找失敗。界面如下:,程序: Public Sub Search(a(), ByVal key, index%) Dim i% For i = LBound(a) To UBound(a) If key = a(i) Then 如找到,下標(biāo)保存在index形參中,結(jié)束查找 index = i Exit Sub End If Next i index = -1 如找不到,index形參的值為-1 End Sub,6.6綜合應(yīng)用,程序:

36、 Private Sub Form_Click() Dim b() ( 此行需補(bǔ)充到P166 ) b = Array(1, 3, 5, 7, 9, 2, 4) k = Val(InputBox(輸入要查找的值) Call Search(b, k, n%) If n = 0 Then Print n Else Print 找不到 End Sub,6.6綜合應(yīng)用,本章小結(jié),1. 子程序sub及函數(shù)Function函數(shù)定義與調(diào)用 2. 參數(shù)的址傳遞及值傳遞的定義及特點(diǎn) 3. 變量的作用域(局部、模塊、全局) 4. 靜態(tài)變量幾種定義形式,作業(yè) P167 二、選擇題 三、填空題,本章等級考試大綱要求,八

37、、過程 1. Sub過程: (1)Sub過程的建立。 (2)調(diào)用Sub過程。 (3)調(diào)用過程和事件過程。 2. Funtion過程: (1)Funtion過程的定義。 (2)調(diào)用Funtion過程。 3. 參數(shù)傳送: (1)形參與實(shí)參。(2)引用。 (3)傳值。 (4)數(shù)組參數(shù)的傳送。 4. 可選參數(shù)和可變參數(shù)。 5. 對象參數(shù): (1)窗體參數(shù)。(2)控件參數(shù)。,教材P169-5:寫結(jié)果,Public Function f(ByVal n%, ByVal r%) If n 0 Then f = f(n r, r) Print n Mod r; End If End Function Priv

38、ate Sub Command1_Click() Print f(100, 8) End Sub,教材P169-5:寫結(jié)果,分析:f(100,8) n r n0 f(nr,r) 8 T f(12,8) 12 8 T f(1,8) 1 8 T f(0,8) 0 8 F,教材P169-5:寫結(jié)果,為方便分析,以f(16,8)為例:講解16轉(zhuǎn)為八進(jìn)制的遞歸過程 f(16,8) n r n0 16 8 T f(168,8) 2 8 T f( 28, 8) 0 8 F, 結(jié)束函數(shù)f(28,8)過程,返回 f(168,8)中的下一 條語句 print 2 mod 8, 輸出2,再返回f(16,8)中的 p

39、rint 16 mod 8,即輸出0,即輸出20. 同理:print f(100,8)輸出結(jié)果為144 用F9設(shè)置斷點(diǎn),然后”調(diào)試逐語句”可以觀察過程,教材P169-6:寫運(yùn)行結(jié)果,Private Sub Command1_Click() Dim m%, i%, x%(10) For i = 0 To 4 x(i) = i + 1 Next i For i = 1 To 2 Call proc(x) Next i For i = 0 To 4 Print x(i); Next i End Sub,Public Sub proc(a%() Static i% Do a(i) = a(i) + a

40、(i + 1) i = i + 1 Loop While i 2 End Sub,答案: 3 5 7 4 5,Private Sub Command1_Click() Dim m%, i%, x%(10) For i = 0 To 4 x(i) = i + 1 Next i For i = 1 To 2 Call proc(x) Next i For i = 0 To 4 Print x(i); Next i End Sub,Public Sub proc(a%() Static i% Do a(i) = a(i) + a(i + 1) i = i + 1 Loop While i 2 End

41、 Sub,答案: 3 5 7 4 5,分析: x(0)=1, x(1)=2, x(2)=3, x(3)=4, x(4)=5 i=1,proc(x), i=0,a(0)=a(0)+a(1)=3, i=i+1=12 i=1,a(1)=a(1)+a(2)=5,i=i+1=2,返回主 i=2,proc(x) i=2,a(2)=a(2)+a(3)=3+4=7,返回主 i=3,結(jié)束循環(huán),輸出數(shù)組元素,注意主程序i和Proc過程中的i是兩個不同的變量,Private Sub Command1_Click() s = p(1) + p(2) + p(3) + p(4) Print s; End Sub Pub

42、lic Function p(n As Integer) Static sum For I = 1 To n sum = sum + I Next I p = sum End Function,分析: P(1) =1 因?yàn)椋簊um=1 ,p(1)=1 P(2) =4 因?yàn)?For I=1 to 2 Sum=1+1+2=4 P(3)=10 4+1+2+3=10 P(4)=10+1+2+3+4=20 所以最后結(jié)果:1+4+10+20=35,實(shí)驗(yàn)P164-23,實(shí)驗(yàn)P165-24,Private Sub Form_Click() Dim a As Integer, b As Integer a = 8 : b = 3 Call test(6, a, b + 1) Print 主程序, 6, a, b End Sub Sub test(x As Integer, y As Integer, z As Integer) Print 子程序, x, y, z x = 2: y = 4: z = 9 End Sub 當(dāng)運(yùn)行程序后,顯示的結(jié)果是_。 A)子程序643 B) 主程序643 C)主程序684 D) 子程序684 主程序684 子程序684 子程序643 主程序643,a b+1 8 4 x y z 2 4 9,D,07年9月實(shí)驗(yàn)P166-27,(31)某人編寫了

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論