《Visual_Basic_6.0程序設(shè)計(jì)》第6章:過程_第1頁
《Visual_Basic_6.0程序設(shè)計(jì)》第6章:過程_第2頁
《Visual_Basic_6.0程序設(shè)計(jì)》第6章:過程_第3頁
《Visual_Basic_6.0程序設(shè)計(jì)》第6章:過程_第4頁
《Visual_Basic_6.0程序設(shè)計(jì)》第6章:過程_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第6章 過 程,(時(shí)間:2次課,4學(xué)時(shí)),第6章 過 程,在本章中,我們就來介紹這樣一種可代替重復(fù)操作的新的概念過程。 過程是結(jié)構(gòu)和功能均獨(dú)立的邏輯部件??煞譃槭录^程、通用過程和函數(shù)過程。事件過程就是我們都已經(jīng)很熟悉的針對(duì)不同的控件響應(yīng)不同的外部事件時(shí)編寫的代碼段,由外部事件觸發(fā)執(zhí)行。,第6章 過 程,6.1 通用過程 6.2 Function函數(shù)過程 6.3 調(diào)用過程時(shí)的參數(shù)傳遞 6.4 遞歸 6.5 習(xí)題,6.1 通 用 過 程,通用過程,又叫sub子程序過程,結(jié)構(gòu)與事件過程類似,在程序中用語句顯式調(diào)用。,6.1 通 用 過 程,6.1.1 聲明sub過程 6.1.2 調(diào)用sub過程,6

2、.1.1 聲明sub過程,sub過程的定義語法如下: private | publicstatic sub 過程名 (參數(shù)列表) 變量和常量聲明 語句體 exit sub 語句體 end sub 其中: (1)過程名的命名規(guī)則和變量的命名規(guī)則一致,不允許使用事件過程名作為通用過程名。 (2)帶有private前綴的sub過程是窗體級(jí)過程,只能在本窗體中調(diào)用;帶有public前綴的sub過程是全局過程,在本工程中均可調(diào)用。省略時(shí)默認(rèn)為public。 在其他窗體調(diào)用全局過程時(shí),需要指明該過程所在的窗體名)。 (3)過程體用來描述過程的操作??赏ㄟ^exit sub語句提前結(jié)束過程的執(zhí)行。,6.1.1

3、 聲明sub過程,(4)參數(shù)列表中給出的是過程的形式參數(shù)。過程是會(huì)反復(fù)使用的一段代碼,形參則是每次使用時(shí)有可能不同的量,類似于數(shù)學(xué)公式中的自變量。形參不同于變量,沒有存儲(chǔ)空間。允許有多個(gè)形參,之間用逗號(hào)隔開。定義時(shí)語法如下: bybal 變量名1() as 數(shù)據(jù)類型 ,變量名2() as 數(shù)據(jù)類型 形參可以是變量或數(shù)組,數(shù)組做形參時(shí),數(shù)組名后跟一對(duì)空括號(hào)。 byval表明形參的傳遞方式,在后續(xù)章節(jié)中討論。 as 數(shù)據(jù)類型用來說明形參的類型,缺省時(shí)形參為變體型(定長字符串不能作形參)。 (5)sub過程不能嵌套定義,即不允許在sub中再定義sub或function過程。 例6.1 定義一個(gè)過程,

4、控制計(jì)算機(jī)喇叭連續(xù)蜂鳴。在代碼窗口通用聲明處輸入如下代碼:,6.1.1 聲明sub過程,Private Sub beep_sound(n As Integer) Dim i As Integer,j As Integer For i = 1 To n Beep beep語句用于控制計(jì)算機(jī)喇叭蜂鳴 For j=1 to 1000000 在兩聲喇叭聲之間適當(dāng)延時(shí) Next Next End Sub 上面定義的過程控制計(jì)算機(jī)根據(jù)形參的取值蜂鳴n下。 完成了過程定義后,必須在程序中調(diào)用才能實(shí)現(xiàn)過程所定義的操作。,6.1.2 調(diào)用sub過程,1. 顯示調(diào)用 sub過程的調(diào)用一般通過語句顯式調(diào)用,有如下兩

5、種形式: (1)Call語句調(diào)用 Call 過程名(實(shí)參表) (2)過程名語句調(diào)用 過程名 實(shí)參表 說明:Call語句調(diào)用過程時(shí),實(shí)參表必須用括號(hào)括起來;過程名語句調(diào)用過程時(shí),實(shí)參表不需要用括號(hào)括起來。 例6.2 在窗體上添加兩個(gè)命令按鈕cmd1和cmd2,單擊cmd1喇叭蜂鳴3下,單擊cmd2喇叭蜂鳴5下。通過調(diào)用例6.1中定義的過程來實(shí)現(xiàn)要求的功能,具體代碼如下 Private Sub cmd1_Click() Call beep_sound(3) End Sub Private Sub Form_Click() beep_sound 5 End Sub,6.1.2 調(diào)用sub過程,本例中

6、的調(diào)用將實(shí)參3和5代入過程beep_sound中形參n的位置來實(shí)現(xiàn)蜂鳴3下和蜂鳴5下的目的,這種把實(shí)參帶入形參的過程叫做參數(shù)傳遞。 2. sub過程的調(diào)用過程 當(dāng)程序運(yùn)行到調(diào)用語句時(shí),系統(tǒng)中止當(dāng)前的程序段的運(yùn)行,完成參數(shù)傳遞后轉(zhuǎn)去執(zhí)行sub過程的語句體,遇到end sub語句或exit sub語句后結(jié)束過程的運(yùn)行,返回調(diào)用點(diǎn)執(zhí)行調(diào)用語句的下一句。以例6.2的調(diào)用為例,其執(zhí)行過程如下: 注意:調(diào)用sub過程時(shí),若在過程中修改了按址定義的形參的值,則會(huì)影響傳遞給它的實(shí)參的值。,6.1.2 調(diào)用sub過程,6.2 Function函數(shù)過程,6.2.1 聲明Function函數(shù)過程 6.2.2 調(diào)用F

7、unction函數(shù),6.2 Function函數(shù)過程,函數(shù)過程基本上和sub子程序過程類似,惟一的不同在于: sub子程序僅定義一段可能重復(fù)使用的代碼,而Function函數(shù)過程除了定義一段可重復(fù)使用的代碼外,還可以在調(diào)用結(jié)束后帶回一個(gè)返回值。,6.2.1 聲明Function函數(shù)過程,Function函數(shù)的聲明格式如下: private | publicstatic function 函數(shù)名 (參數(shù)列表) As 類型 變量和常量聲明 語句體 函數(shù)名=表達(dá)式 exit function 語句體 end function 其中: (1)函數(shù)通過函數(shù)名帶回返回值,可將函數(shù)名看作一變量,其命名規(guī)則和

8、sub子程序的過程名命名規(guī)則一樣; (2)參數(shù)列表外的類型說明定義的是通過函數(shù)名返回的值的數(shù)據(jù)類型; (3)因?yàn)橐ㄟ^函數(shù)名返回值,所以在函數(shù)體中至少要有一句對(duì)函數(shù)名賦值的語句; (4)其他規(guī)則等同于sub子程序的定義規(guī)則。,6.2.1 聲明Function函數(shù)過程,例6.3 要求定義一個(gè)求階乘的函數(shù)過程 Private Function JC(n As Integer) As Long JC = 1 Do While n 0 JC = JC * n 對(duì)函數(shù)名的賦值 n = n - 1 Loop End Function,6.2.2 調(diào)用Function函數(shù),1. 表達(dá)式中調(diào)用 一般來說,F(xiàn)u

9、nction函數(shù)的調(diào)用會(huì)在表達(dá)式中完成,如: 變量=函數(shù)名(實(shí)參表) 表示將函數(shù)調(diào)用后的返回值賦給變量。或者,在print語句中完成: print 函數(shù)名(實(shí)參表) 表示將函數(shù)調(diào)用后的返回值打印輸出。 2. 語句調(diào)用 Visual Basic也允許象調(diào)用sub子程序一樣調(diào)用Function函數(shù): Call 函數(shù)名(實(shí)參表) 或函數(shù)名 實(shí)參表 但是,用sub子程序的調(diào)用方法調(diào)用函數(shù)必須放棄返回值。,6.3 調(diào)用過程時(shí)的參數(shù)傳遞,6.3 調(diào)用過程時(shí)的參數(shù)傳遞,參數(shù)傳遞(又叫形實(shí)結(jié)合)是過程調(diào)用的關(guān)鍵,前面說過,形參類似于公式中的自變量,而實(shí)參就類似于使用公式時(shí)代入自變量的具體取值,可以是變量、數(shù)組

10、、數(shù)組元素和表達(dá)式(常量是表達(dá)式的特殊形式)。 進(jìn)行參數(shù)傳遞時(shí)要首先記住一個(gè)原則:一一對(duì)應(yīng)。包括: (1)位置一一對(duì)應(yīng)。若形參表中包含多個(gè)形參,則調(diào)用時(shí)的實(shí)參表中也要包含相同數(shù)目的實(shí)參,且位置要對(duì)應(yīng)一致。若實(shí)參數(shù)目少于形參數(shù)目則認(rèn)為沒有實(shí)參項(xiàng)的形參取默認(rèn)值;若實(shí)參數(shù)目多于形參數(shù)目則忽略多余項(xiàng)。 (2)類型一一對(duì)應(yīng)。位置一致的形、實(shí)參數(shù)應(yīng)具有相同的數(shù)據(jù)類型,在有些情況下也可以做相容匹配。 參數(shù)的傳遞的目的是要通過某種方式讓形參獲得實(shí)參的值,根據(jù)采取的方式不同可分為兩種傳遞方式:按值傳遞和按址傳遞。,6.3 調(diào)用過程時(shí)的參數(shù)傳遞,1. 按值傳遞參數(shù) 按值傳遞方式定義時(shí)在形參前加上ByVal保留字加

11、以標(biāo)識(shí);傳遞時(shí)要在內(nèi)存中開辟一臨時(shí)存儲(chǔ)空間,將實(shí)參的值復(fù)制到該臨時(shí)存儲(chǔ)空間,然后將臨時(shí)存儲(chǔ)空間的地址傳遞給形參,即形參最終指向擁有實(shí)參值副本的臨時(shí)存儲(chǔ)空間。具體過程如圖6.2所示。 2. 按址傳遞參數(shù) 按址傳遞方式定義時(shí)在形參前加上ByRef保留字或默認(rèn)作為標(biāo)識(shí);傳遞時(shí)參數(shù)直接將實(shí)參存儲(chǔ)空間的地址傳遞給形參,即形參最終和實(shí)參指向同一存儲(chǔ)空間。具體過程如圖6.3所示。,6.3 調(diào)用過程時(shí)的參數(shù)傳遞,圖6.2 按值傳遞,圖6.3 按址傳遞,6.3 調(diào)用過程時(shí)的參數(shù)傳遞,例6.4 按值、按址傳遞參數(shù)實(shí)例。 Private Sub example(ByVal x As Integer, y As In

12、teger) x = x + 10 y = y + 5 Print x=; x, y=; y End Sub Private Sub Form_Click() Dim a As Integer, b As Integer a = 10: b = 10 Print a=; a, b=; b Call example(a, b) Print a=; a, b=; b End Sub,6.3 調(diào)用過程時(shí)的參數(shù)傳遞,題中,example過程中修改了形參x和y的值,而x是按值傳遞定義的,y是按址傳遞定義的,所以,單擊窗體后從運(yùn)行結(jié)果可以看出,x的改變沒有影響實(shí)參a的取值;y的改變影響了實(shí)參b的取值,這由

13、它們不同的傳遞方式?jīng)Q定的。程序運(yùn)行結(jié)果如下: a=10b=10 x=20y=15 a=10b=15 按值和按址傳遞參數(shù)的方式關(guān)鍵區(qū)別在于調(diào)用完過程后實(shí)參是否跟隨形參發(fā)生變化,所以在使用時(shí)要根據(jù)實(shí)際情況進(jìn)行選擇,尤其要注意循環(huán)控制變量作為按址傳遞的實(shí)參使用時(shí),循環(huán)次數(shù)有可能受到的影響。 另外,按址傳遞的參數(shù),若實(shí)參是變量時(shí),要求形參、實(shí)參類型嚴(yán)格匹配;而常量作實(shí)參或按值傳遞時(shí)可以做相容匹配。,6.4 遞 歸,6.4 遞 歸,數(shù)學(xué)是計(jì)算機(jī)編程的理論基礎(chǔ),而很多的數(shù)學(xué)模型和算法設(shè)計(jì)方法是遞歸定義的,所以有時(shí)需要使用遞歸過程。 遞歸過程是在過程定義中調(diào)用本身的過程。在此調(diào)用中,一個(gè)過程執(zhí)行的某一步要用

14、到自身的前面一步或前面若干步。 例如,求n!的函數(shù)fact(n)的定義: 1, (當(dāng)n=0 或 n=1) n Fact (n-1), (當(dāng)n1時(shí)) 這個(gè)函數(shù)的遞推方式是從Fact (n-1)推出Fact (n)的值,即要求出函數(shù)Fact (n)的值,必須要調(diào)用函數(shù)本身來求出Fact(n-1)的值。在此函數(shù)定義中調(diào)用了函數(shù)本身,這就是遞歸定義的函數(shù)。,6.4 遞 歸,例6.5 編寫遞歸函數(shù)求n!。 Private Sub Form_Click ( ) Dim N As Integer, F As Long N=InputBox (輸入一個(gè)正整數(shù)) F=Fact (N) Print N; ! =;

15、 F End Sub Private Function Fact (N As Integer) As Long If N=0 Or N=1 Then Fact=1 Else Fact=N*Fact (N-1) End if End Function 運(yùn)行此程序,單擊窗體執(zhí)行Form_Click事件過程,從鍵盤輸入“3”,求3的階層。運(yùn)行過程如下:,6.4 遞 歸,(1)將3賦值給變量N,以Fact (N)形式調(diào)用函數(shù)Fact。 (2)執(zhí)行函數(shù)Fact。經(jīng)判斷執(zhí)行函數(shù)體中的Fact=N*Fact (N-1)語句,要先計(jì)算表達(dá)式3*Fact (3-1)即3*Fact (2)的值。 (3)以2為實(shí)參

16、又一次調(diào)用函數(shù)Fact,同樣要執(zhí)行語句Fact=N*Fact (N-1)語句,計(jì)算表達(dá)式2*Fact (2-1)即2*Fact (1)的值。 (4)再以1為實(shí)參,再次調(diào)用Fact函數(shù)。經(jīng)判斷執(zhí)行Fact=1語句后,以1為函數(shù)值返回本次調(diào)用點(diǎn),即返回作為3)中Fact(1)的值計(jì)算得出2*Fact (1)的值。 (5)以計(jì)算得出的2*Fact (1)的值2作為Fact (2)的值返回2)處調(diào)用點(diǎn),計(jì)算3*Fact (2)的值。 (6)以計(jì)算得出的3*Fact (2)的值6作為Fact (3)的值返回1)處調(diào)用點(diǎn)得出Face(3)的值為6。即計(jì)算出3!=6。 具體的調(diào)用和返回過程如圖6.4所示。,

17、6.4 遞 歸,圖6.4 遞歸過程執(zhí)行流程示意圖,6.4 遞 歸,由此可見,一個(gè)遞歸問題可分為“調(diào)用”和“返回”兩個(gè)階段。當(dāng)進(jìn)入遞歸調(diào)用階段后,便逐層向下調(diào)用遞歸過程,因此Fact函數(shù)被調(diào)用3次,即Fact (3)、Fact (2)、Fact (1),直到遇到遞歸過程的初始條件Fact=1為止。 然后帶著初始(終止)條件所給的函數(shù)值進(jìn)入返回階段。按照原來的路徑逐層返回,由Fact (1)推出Fact (2),由Fact (2)推出Fact (3)為止。所以,編寫遞歸程序過程時(shí)要注意:遞歸過程必須有一個(gè)結(jié)束遞歸過程的條件(又稱之為終止條件或邊界條件),即遞歸過程是有限遞歸。例如,上面求N!的遞歸

18、函數(shù)的邊界條件是:Fact=1。若一個(gè)遞歸程序沒有終止條件,那它則是一個(gè)無窮遞歸過程。,6.5 習(xí) 題,6.5 習(xí) 題,1. 選擇題 (1)下列過程定義語句中哪些是不正確的 。A. Private Sub S1(s , i as integer)B. Private Sub S1(x as string *3)C. Private Sub S1(a ( , ) as integer )D. Private Sub S1(a(2) as integer) (2)若在應(yīng)用程序中用“Private Sub Sub1(X as Integer, Y as Single)”定義了子程序Sub1,調(diào)用程序

19、中的變量I、J均為Integer型,則正確調(diào)用子程序Sub1的Call語句是 。CallSub1(I,J)CallSub1(3.1415,I)CallSub1(3.14,234)CallSub1(245,231.5)A. B. C. D. 無 (3)若在應(yīng)用程序中用Private Function F1(x As Integer) As Srting定義了函數(shù)F1,則下列調(diào)用中,哪些語句是錯(cuò)誤的 。A. S1=F1(3.14)B. F1 8C. Call F1 2 * 5D. F1 (8 * 0.6),6.5 習(xí) 題題,2. 填空題 (1)參數(shù)傳遞分按值傳遞和按址傳遞兩種方式,如果數(shù)組做參數(shù),則形參只能定義成 方式;如果形參定義成按址傳遞的方式,而對(duì)應(yīng)實(shí)參為常數(shù)表達(dá)式,則按照 方式進(jìn)行參數(shù)傳遞。 (2) Function函數(shù)通過 返回值,Sub子程序通過 返回值。 (3) 若想獲得函數(shù)返回值,應(yīng)該使用 調(diào)用函數(shù);如果用 語句和 語句調(diào)用函數(shù),則會(huì)犧牲返回值。 (4)執(zhí)行下面的程序,輸出結(jié)果中的第一行是 ,輸出結(jié)果的第二行是 。,6.5 習(xí) 題,Private Sub F

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論