版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Visual Basic程序設(shè)計教程,內(nèi)蒙古科技大學(xué)實踐訓(xùn)練中心,第八章 過程,8.1 過程的定義與調(diào)用,VB的過程: 系統(tǒng)提供的內(nèi)部函數(shù)過程,其中,事件是構(gòu)成VB應(yīng)用程序的主體,應(yīng) 用設(shè)計基本上是對事件過程進行設(shè)計; 用戶根據(jù)應(yīng)用的需要而設(shè)計的過程; VB的過程分類: 以”Sub”保留字開始的子過程; 以“Function”保留字開始的函數(shù)過程; 以“Property”保留字開始的屬性過程; 以“Event”保留字開始的事件過程;,8.1 過程的定義與調(diào)用,8.1.1 Sub過程的定義與調(diào)用 用戶自定義子過程通常來完成一個特定的功能,其名字可由用戶根據(jù)自己的習(xí)慣而定義。 VB的事件過程只在用
2、戶觸發(fā)該事件后啟動,而用戶自定義的子過程只有在被其他過程調(diào)用時才啟動。 1、用戶自定義子過程的一般格式 Static Private | Public Sub 子過程名 (參數(shù)列表) 語句塊 Exit Sub 語句塊 End Sub 說明: 格式中“Sub 子過程名”和”End Sub“不可缺; 子過程名的命名規(guī)則與 變量命名規(guī)則相同;,8.1 過程的定義與調(diào)用,8.1.1 Sub過程的定義與調(diào)用 Static:在過程名之前使用Static,表示過程中的局部變量都是靜態(tài)變 量。當程序退出該程序時,局部變量的值仍然保留作為下次調(diào)用的初 值。Static對數(shù)組變量也有效,但對動態(tài)變量則無法轉(zhuǎn)換為靜
3、態(tài)變量; Private:表示該過程為私有過程,只有本模塊中的其他過程訪問,不能 被其他模塊中的模塊訪問; Public:表示該過程為公有過程,即可以被程序中所有模塊調(diào)用。本窗 體和其他模塊均可調(diào)用,但過程名必須是唯一的, 否則在過程名前加上 該過程所在的窗體名或模塊名。 參數(shù)列表:其他過程與本過程進行參數(shù)傳遞和交換的形式參數(shù),當參數(shù) 個數(shù)大于等于2時,參數(shù)之間用”,”隔開; Exit Sub:在過程任意位置終止過程的運行而退出過程而使用的語句; End Sub:過程結(jié)束標識,用來正常終止過程;,8.1 過程的定義與調(diào)用,8.1.1 Sub過程的定義與調(diào)用 過程參數(shù)的傳遞默認方式為引用(地址)
4、傳遞(ByRef),若只傳參數(shù)(實參) 的值則必須將形式參數(shù)說明為Byval,格式如下: Byval 變量名或數(shù)組名( ) As 數(shù)據(jù)類型 過程內(nèi)部不能再定義其他過程,可以調(diào)用其他合法的過程,事件過程中 也不允許定義子過程。,sub command_click( ) call test() end sub,static sub test( ) dim a(2) as integer a(0)=a)(0)+1 a(1)=a(1)+1 print a(0);a(1) end sub,8.1 過程的定義與調(diào)用,8.1.1 Sub過程的定義與調(diào)用 定義過程的方式: 手工方式:在過程、事件代碼窗口中,編
5、寫事件程序: sub 過程名(參數(shù)列表) End Sub 系統(tǒng)方式 進入模塊代碼窗口:系統(tǒng)菜單”工程“”添加” “新建”,則新建一 個模塊,在標準模塊中填寫子過程代碼; 系統(tǒng)菜單”工具“”添加過程“,確定子過程的名稱以及類型后,即回 到模塊的代碼窗口;,8.1 過程的定義與調(diào)用,8.1.1 Sub過程的定義與調(diào)用 2、子過程調(diào)用 Call 過程名(實參列表);如:call text(12,”abc”) 過程名實參列表;如:test 12,”abc” 例8-1求n! 解題思路:在標準模塊中定義一個子過程n,用于實現(xiàn)求任意正整數(shù)的階乘。,8.1 過程的定義與調(diào)用,8.1.1 Sub過程的定義與調(diào)用
6、 2、子過程調(diào)用 Call 過程名(實參列表);如:call text(12,”abc”) 過程名實參列表;如:test 12,”abc” 例8-2給出矩形的長和寬,求矩形的面積。 解題思路:定義一個過程area,計算矩形的面積。,8.1 過程的定義與調(diào)用,8.1.2 Function過程的定義與調(diào)用 函數(shù)過程(Function)與子過程一樣,可將一組完成特定功能的程序代碼組織起來,作為一個相對獨立的過程使用;但子過程沒有值的返回,函數(shù)過程有值的返回。 1、函數(shù)過程的定義 Static Public Private Function 函數(shù)過程名(參數(shù)列表)As 類型 語句塊 Exit Func
7、tion 語句塊給函數(shù)名賦返回值 End Funtion,8.1 過程的定義與調(diào)用,8.1.2 Function過程的定義與調(diào)用 說明: 格式中的Static、Public、Private的含義與作用以及參數(shù)列表的格式 和使用方法,Byval傳值的作用等均與子過程的定義相同; Exit Function的作用與Exit Sub相同; As類型,指定該函數(shù)的返回值的類型; 語句塊為符合VB語法的一條語句或多條語句; 給函數(shù)名賦值:一般情況下,定義一個函數(shù)過程,就是能返回一個值 給調(diào)用程序,故函數(shù)過程應(yīng)有一條語句給函數(shù)名賦值即調(diào)用后的返回 值;若不賦值,則默認返回值為0(數(shù)值型函數(shù)),或空值(可變
8、類 型函數(shù))。 與Sub定義一樣,函數(shù)過程定義的函數(shù)體內(nèi)不允許定義其他的函數(shù)過 程和子過程。,8.1 過程的定義與調(diào)用,8.1.2 Function過程的定義與調(diào)用 2、函數(shù)過程的定義方法 在代碼窗口中手工輸入函數(shù)過程的框架; 如: Static Private Function Areturn( a as integer, b as integer) as Integer End Function 系統(tǒng)菜單“工具”“添加過程”,選擇相應(yīng)的類型和范圍屬性; 3、函數(shù)過程的調(diào)用 函數(shù)過程的調(diào)用如同調(diào)用VB的系統(tǒng)內(nèi)部函數(shù)一樣;程序中。函數(shù)過程的 調(diào)用一般放在表達式中賦值號”“的右邊,將它看成某種類
9、型的值而參加 表達式的組成。,8.1 過程的定義與調(diào)用,8.1.2 Function過程的定義與調(diào)用 3、函數(shù)過程的調(diào)用 例8-3函數(shù)過程的定義與調(diào)用:判斷某個成績(百分制)的等級. 解題思路:定義一個函數(shù)過程,用于判斷分數(shù)的等級,判斷后的結(jié)果返回為 字符串:優(yōu)、良、中、及格或不及格。,8.1 過程的定義與調(diào)用,8.1.2 Function過程的定義與調(diào)用 例8-4 編寫求任意給定兩個自然數(shù)的最大公約數(shù)的程序。 解題思路: 對于已知兩個數(shù)m、n,使得mn; m除以n得余數(shù) r; 若r0,則n為所求的最大公約數(shù),算法結(jié)束,否則執(zhí)行(1); nm,rn,再重復(fù)步驟(2);,8.2 函數(shù)和過程的參數(shù)
10、傳遞,參數(shù)傳遞: 在調(diào)用過程時,過程參數(shù)使用的是實際參數(shù),它要與定義過程時的形式參數(shù)一一對應(yīng),并以適當?shù)男问綄崊鹘o行參,供過程使用。 參數(shù)傳遞的方式:傳值;傳址; 8.2.1 傳值 形參:指在定義過程時出現(xiàn)在參數(shù)列表中的變量名,這些變量名的使用只 能在過程內(nèi)部。 實參:是在調(diào)用該過程時調(diào)用過程中已組織好的準備傳給形參的常量、變 量、表達式或數(shù)組控件對象等,它是在調(diào)用過程(主程序或父過程)中 組織好的數(shù)據(jù),實參若是常量,則傳遞就相當于將該常量的值賦給 形參。實參若為一個簡單變量的表達式,也是與常量一樣將該表達 式的值賦給對應(yīng)的形式參數(shù)。 傳遞參數(shù)時,形參和實參的個數(shù)一定相同,傳遞時要一一對應(yīng)
11、; 參數(shù)之間要用“,”隔開; 每個實參的類型必須與相對應(yīng)的行參類型相同;,8.2 函數(shù)和過程的參數(shù)傳遞,8.2.1 傳值 Sub tempSub(a as integer,b as single , c as string) End Sub 可采用調(diào)用方式:call tempsub(a%,b!,”comm”),過程定義中默認的參數(shù)傳遞是地址傳遞,但在定義過程中,若某個參數(shù)用Byval來說明。則該參數(shù)便是傳值。 傳值的一個特點是將實參的值復(fù)制一份給形式參數(shù)所代表的臨時內(nèi)存單元,此后實參與形參之間再無任何聯(lián)系,形式參數(shù)的任何變化均不會對實參產(chǎn)生任何影響。,8.2 函數(shù)和過程的參數(shù)傳遞,8.2.1
12、傳值 例【8-5】傳值調(diào)用 Private sub command1_click() dim x as integer , y as integer x=10: y=20 print “x=“;x;”y=“;y; call temp(x,y) print “x=“;x;”y=“;y; End Sub Sub temp(Byval x as integer,Byval y as integer) x=x+100:y=x*60 print “x=“;x,”y=“,y; End Sub 運行結(jié)果: x=10 y=20 調(diào)用前的實參 x=110 y=6600 temp中的行參 x=10 y=20 調(diào)用
13、后的實參,8.2 函數(shù)和過程的參數(shù)傳遞,8.2.1 傳值 例8-6求冪級數(shù) 解題思路:定義temp函數(shù)用于計算x的冪,需要用到2個參數(shù),x和y,x用于傳遞某個數(shù),y用于傳遞冪的次方數(shù)。y是傳值參數(shù),因此,函數(shù)中y值的改變不會影響它相應(yīng)的實際參數(shù)。,8.2 函數(shù)和過程的參數(shù)傳遞,8.2.2 傳址 在過程調(diào)用過程中,參數(shù)傳遞的默認方式是按地址傳遞,故不加任何關(guān)鍵字就是傳址調(diào)用。 傳址的特點是形參與對應(yīng)實參用相同的內(nèi)存地址,形參的改變將影響實參的改變,實際上,形參也是實參的別名。 通常情況下,形式參數(shù)為傳值形式,則形式參數(shù)可認為是一個局部變量; 但若為傳址方式,則由形參與實參連系起來,使形參為非局部
14、變量,因為形參的改變結(jié)果直接傳給了實參。 例【8-7】對于例8-5中的過程temp將其定義為: sub temp(x as integer,y as integer) End Sub 則Call temp(x,y)變?yōu)榱藗髦氛{(diào)用,故形參的改變會引起實參x、y的值改變。,8.2 函數(shù)和過程的參數(shù)傳遞,8.2.2 傳址 例8-8傳值與傳址兩種方式下,形參與實參的改變。,8.2 函數(shù)和過程的參數(shù)傳遞,8.2.3 數(shù)組及對象作為過程的參數(shù) 1、數(shù)組作為參數(shù) 用數(shù)組名作為形參或?qū)崊ⅲ?用數(shù)組元素作為實參進行傳遞; 注意: 第中方法相當于傳址方式,即將數(shù)組的起始地址傳給形參,但在使 用時應(yīng)注意以下幾點:
15、用數(shù)組名進行地址傳遞時,在參數(shù)列表中說明數(shù)組,不需要說明其維 數(shù)的定義,但圓括號不可省略; 在過程定義體內(nèi)如需要知道參數(shù)的上、下界,可用UBound和 LBound 確定參數(shù)組的上、下界; 形參數(shù)組和實參數(shù)組的類型必須一致; 例8-9求一個nn方陣所有元素之和;,8.2 函數(shù)和過程的參數(shù)傳遞,8.2.3 數(shù)組及對象作為過程的參數(shù) 1、數(shù)組作為參數(shù) 例8-9求一個nn方陣所有元素之和; 解題思路:利用隨機函數(shù)產(chǎn)生一個6階方陣a,并保存在二維數(shù)組中,將此數(shù)組作為參數(shù)傳給函數(shù)suma,在函數(shù)suma中計算方陣的元素之和;在函數(shù)過程內(nèi)部使用Ubound(a,1)確定數(shù)組a的第一維上界。,8.2 函數(shù)和
16、過程的參數(shù)傳遞,8.2.3 數(shù)組及對象作為過程的參數(shù) 2、對象參數(shù) 對于過程中的參數(shù),可以用對象參數(shù)進行傳遞,如窗體、控件等。經(jīng) 過傳遞后,可以使用對象的有關(guān)屬性以及方法。 在使用控件作為參數(shù)時,必須考慮到作為實參的控件是否具有通過過 程中所列的控件的屬性,因此必須先判斷控件是哪一類控件。 判斷格式為: If/Elseif Typeof 控件名稱 is 控件類型 其中:控件類型指各種不同的控件的關(guān)鍵字,如文本框的關(guān)鍵字為 TextBox等。 If typeof Testctr is textbox then testctr.text=“Ms” End if,8.3 變量、過程的作用域,在VB程
17、序中我們定義的變量、過程、函數(shù)均有其作用范圍,在VB系統(tǒng)內(nèi),該范圍稱為其作用域。 作用域分為三個層次:過程、模塊(文件)、全局(工程); 過程的作用域最小,僅局限于過程內(nèi)部(針對局部變量); 模塊(文件)次之,僅在某個模塊或文件內(nèi); 全局(工程)范圍最大,在整個應(yīng)用工程范圍內(nèi)。 8.3.1 過程的作用域 過程的作用域:模塊級(文件級)和全局級; 一個工程應(yīng)用程序一般由三類模塊構(gòu)成: 窗體模塊(*.frm):通常有:事件過程、自定義子過程和自定義函數(shù)過程 標準模塊文件(*.bas):由若干個VB子過程和函數(shù)組成,通常為應(yīng)用程序 提供可調(diào)用的標準程序單元; 類模塊文件(*.cls):包括自定義的類
18、、為相應(yīng)類設(shè)計的屬性過程、自定 義方法過程、自定義事件過程等;,8.3 變量、過程的作用域,8.3.1 過程的作用域,應(yīng)用程序(.vbp文件),至少一個或多個 窗體模塊(*.frm)文件,事件過程(sub)、 自定義過程(Sub) 自定義函數(shù)(Function),一個或多個 標準模塊(.bas)文件,自定義過程(Sub) 自定義函數(shù)(Function),一個或多個 類模塊(.cls)文件,自定義屬性過程(Property) 自定義方法過程(Sub 或Function) 自定義事件過程(Event),8.3 變量、過程的作用域,8.3.1 過程的作用域 1、模塊級(文件級)過程 指只能在本文件或
19、模塊中被調(diào)用,此類過程(或函數(shù))定義時在Sub或 Function前加“Private”關(guān)鍵字; 2、全局級過程 指能在整個應(yīng)用程序中被調(diào)用的過程,此類過程與模塊級過程的定義過 程完全相同,只是在定義前不加關(guān)鍵字“Private”,或加關(guān)鍵字“Public”。 調(diào)用方式通常為:標準模塊名(或窗體名).子過程或函數(shù)名(參數(shù))。,8.3 變量、過程的作用域,8.3.1 過程的作用域,8.3 變量、過程的作用域,8.3.2 變量的作用域 變量的作用域分為三級:局部(過程)級、模塊級(文件)、全局(工程)級 ; 1、局部變量(過程級):指在過程內(nèi)部定義、只能在過程內(nèi)使用的變量, 別的過程不能使用;定義
20、方式:Dim、Static; 局部變量隨過程的調(diào)用而產(chǎn)生,也隨著過程調(diào)用的結(jié)束而結(jié)束(Dim聲 明的變量將被釋放內(nèi)存,而用Static聲明的變量,變量沒有被釋放,但已 變得不可訪問,下次發(fā)問時,其值仍存在); 2、窗體模塊級變量:指在窗體(模塊)文件內(nèi),但在所有過程之外定義的 變量,即在窗體文件中的“通用聲明”段里用Dim或Private語句聲明的變 量,該變量可被窗體文件中的任何過程訪問,但不能被其他模塊文件中 的過程訪問。此類變量隨窗體的產(chǎn)生而產(chǎn)生,也隨著窗體的結(jié)束而結(jié)束。 3、全局變量(工程級變量):指窗體或任一模塊中定義,但不在任一過程 內(nèi)定義的變量,此類變量的聲明必須用Public語
21、句完成,次變量在整個 工程文件中存在,在工程應(yīng)用結(jié)束時才會被釋放。,8.3 變量、過程的作用域,8.3.2 變量的作用域,8.3 變量、過程的作用域,文件1(*.Bas)(模塊文件 Module1.Bas) public a as integer private b as integer 模塊級變量 sub f1() dim c as integer 局部變量 print form1.c;c;b end sub,文件2(*.frm) (窗體模塊:Form1.frm) public c as single 全局變量 public a as integer 全局變量 sub command1_cl
22、ick() dim c as integer 局部變量 print module1.a;c; form1.c;a end sub,注釋:上面Form1.frm文件print語句中, “Module1.a”是指“Module1.Bas”文件中定義的全局變量a; ”Form1.c“是指Form1.frm中定義的全局變量c; ”c“是指command1_click中定義的局部變量c; “a”是指在Form1.frm中定義的全局變量a;,8.3 變量、過程的作用域,說明: 在同一模塊不同過程中定義的變量可以同名; 在同一模塊不同級別中定義的變量可以同名; 在不同模塊中定義的全局變量可以同名; 在過程中
23、直接引用的變量總是同名變量中作用域最小的那個變量; 在其他模塊(定義全局變量所在模塊)中引用全局變量時,必須在該變 量前加上模塊名;,8.3 變量、過程的作用域,8.3.3 靜態(tài)變量 局部變量除了用Dim語句聲明外,還可以用Static語句將變量聲明為靜態(tài)變量,它在程序運行中保留變量的值。即每次調(diào)用過程,用Static說明的變量保持原來的值;而用Dim說明的變量,每次調(diào)用過程時,重新初始化。 形式: Static 變量名 As 類型 Static Function 函數(shù)名 (參數(shù)列表) As 類型 Static Sub 過程名(參數(shù)列表) 若函數(shù)名、過程名前加”Static“,表示該函數(shù)、過程
24、內(nèi)的局部變量都是靜態(tài) 變量。,8.3 變量、過程的作用域,8.3.3 靜態(tài)變量 例8-10 一個窗體單擊事件過程(Form_click()和一個求和函數(shù)(sum()組成的應(yīng)用程序,在Form_click()過程中5次調(diào)用函數(shù)sum(),Dim i As Integer, isum As Integer For i = 1 To 5 isum = sum(i) Print isum=; isum; Next Private Function sum(n As Integer) Static j As Integer Dim j As Integer j = j + n sum = j End F
25、unction,8.4 遞歸,遞歸是指一個自己調(diào)用自己的過程。 VB允許定義一個自定義過程或函數(shù)在過程內(nèi)部自己調(diào)用自己,這樣的子過程或函數(shù)叫做遞歸子過程或遞歸函數(shù)。 例8-11 求n!的函數(shù)。 解題思路:遞歸就是一個自己不斷調(diào)用自己的過程,直到達到遞歸結(jié)束條件,而后逐級返回到上一次調(diào)用過程。每一次調(diào)用自己,先把形參、局部變量、調(diào)用結(jié)束時的返回地址壓棧,直到遞歸結(jié)束,這個過程叫做遞歸過程;然后一級一級從堆棧彈出參數(shù),直到棧空,這個過程叫做回歸。 定義階乘運算如下: n!=n(n1)! (n1)!=(n1)(n2)! 若用fn(n)表示n!,則由有:,8.4 遞歸,求n!的函數(shù)定義如下: publ
26、ic function fn(n as integer) as integer if n=1 then fn=1 else fn=n*fn(n-1) endif end function 假設(shè)n3,則上訴函數(shù)的步驟如下: fn(3) =3*fn(2),n3時調(diào)用fn(2); fn(2)=2*fn(1),n2時調(diào)用fn(1); fn(1)=1,n1時求得fn(1)的值; fn(2)=2*1,返回fn(2)的值; fn(3)=3*fn(2)=3*2,返回fn(3)的值; 設(shè)計一個遞歸過程或函數(shù)應(yīng)具備的條件: 具備遞歸條件及遞歸的條件; 遞歸調(diào)用遞歸結(jié)束的條件發(fā)展;,8.4 遞歸,例8-12在一個三角形中,取三邊的中點構(gòu)成一個三角形,然后在所畫的三角形的邊與
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度臨時用電安全設(shè)施維護保養(yǎng)合同文本2篇
- 2025年度產(chǎn)品代理合同:智能家電全系列產(chǎn)品代理權(quán)轉(zhuǎn)讓
- 2025版內(nèi)蒙古自治區(qū)農(nóng)牧廳農(nóng)業(yè)產(chǎn)業(yè)鏈延伸與價值鏈提升合同4篇
- 二零二五年度臨時用電安全培訓(xùn)服務(wù)合同范本
- 2025年度食品添加劑研發(fā)項目配料保密合同范本
- 2025年度苗木種植項目招投標合同4篇
- 二零二五年度家電品牌代言合同標準范本
- 二零二五年度某某學(xué)校校園內(nèi)電梯維修保養(yǎng)服務(wù)合同4篇
- 《短視頻編?。哼x題構(gòu)想+腳本制作+劇本策劃+鏡頭拍攝》課件 第5、6章 了解劇本:創(chuàng)作優(yōu)劇本的基礎(chǔ)、劇本編寫:創(chuàng)作優(yōu)的故事情節(jié)
- 2025年度鋼材深加工項目運輸及安裝合同2篇
- 《霍爾效應(yīng)測量磁場》課件
- 30題紀檢監(jiān)察位崗位常見面試問題含HR問題考察點及參考回答
- 高考作文復(fù)習(xí)任務(wù)驅(qū)動型作文的審題立意課件73張
- 詢價函模板(非常詳盡)
- 《AI營銷畫布:數(shù)字化營銷的落地與實戰(zhàn)》
- 麻醉藥品、精神藥品、放射性藥品、醫(yī)療用毒性藥品及藥品類易制毒化學(xué)品等特殊管理藥品的使用與管理規(guī)章制度
- 一個28歲的漂亮小媳婦在某公司打工-被老板看上之后
- 乘務(wù)培訓(xùn)4有限時間水上迫降
- 2023年低年級寫話教學(xué)評語方法(五篇)
- DB22T 1655-2012結(jié)直腸外科術(shù)前腸道準備技術(shù)要求
- GB/T 16474-2011變形鋁及鋁合金牌號表示方法
評論
0/150
提交評論