版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
章子程序和函數8.1子程序概述在VB5.0/6.0中,除了系統(tǒng)提供的內部函數過程和事件過程外,用戶可自定義過程下列四種過程:▲“Sub”保留字開始的為子過程▲“Function”保留字開始的為函數過程“Property”保留字開始的為屬性過程“Event”保留字開始的事件過程2021/6/281
在VB中,的Sub子過程分為:事件過程和通用過程8.2.1事件過程(1)窗體事件的語法PrivateSubForm_事件名(參數列表)<語句組>EndSub(2)控件事件的語法PrivateSub控件名_事件名(參數列表)<語句組>
EndSub8.2Sub過程2021/6/282子過程的定義形式如下:[Public|Private][Static]Sub子過程名([形參表])<局部變量或常數定義>
<語句組>
[ExitSub]
<語句組>EndSub
8.2.2通用過程(Sub過程)的定義說明:(1)子過程名:命名規(guī)則與變量名規(guī)則相同。子過程名不返回值,而是通過形參與實參的傳遞得到結果,調用時可返回多個值。2021/6/283(2)形式參數列表:形式參數通常簡稱“形參”,僅表示形參的類型、個數、位置,定義時是無值的,只有在過程被調用時,虛實參結合后才獲得相應的值。(3)過程可以無形式參數,但括號不能省。(4)參數的定義形式:[ByVal|ByRef]變量名[()][As類型][,…],ByVal表示當該過程被調用時,參數是按值傳遞的;缺省或ByRef表示當該過程被調用時,參數是按地址傳遞的。例8.1編一個交換兩個整型變量值的子過程。PrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X:X=Y:Y=TempEndSub2021/6/2848.2.3子過程的建立
通過“工具”菜單中的“添加過程”命令,出現“添加過程”對話框(見圖6.1),選擇過程類型(子過程、函數、屬性、事件)及作用范圍(公有的Public、私有的Private),單擊確定后得到一個過程或函數定義的結構框架(模板),如:PublicSubSort()
……EndSub2021/6/2858.2.4過程的調用
1子過程的調用
子過程名[參數列表]
或 Call子過程名(參數列表)2函數過程的調用
變量名=函數過程名([參數列表])說明:
(1)參數列表稱為實參或實元,它必須與形參保持個數相同,位置與類型一一對應。
(2)調用時把實參值傳遞給對應的形參。其中值傳遞(形參前有ByVal說明)時實參的值不隨形參的值變化而改變。而地址傳遞時實參的值隨形參值的改變而改變。2021/6/286(3)當參數是數組時,形參與實參在參數聲明時應省略其維數,但括號不能省。
(4)調用子過程的形式有兩種,用Call關鍵字時,實參必須加圓括號括起,反之則實參之間用“,”分隔。例:調用上面定義的Sawp子過程的形式:
Swapa,bCallSwap(a,b)2021/6/287PrivateSubCmdOK()……CallSwap(a,b)……Swapa,bEndSubPrivateSubSwap(x%,y%)
Dimtemp%Temp=XX=YY=TempEndSub
過程調用的執(zhí)行過程:2021/6/2888.3Function過程VisualBasic函數分為內部函數和外部函數,外部函數是用戶根據需要用Function關鍵字定義的函數過程,與子過程不同的是函數過程將返回一個值。8.3.1函數過程(Function過程)的定義[Public|Private][Static]Function函數名([<參數列表>])[As<類型>]<局部變量或常數定義><語句塊>函數體[函數名=返回值][ExitFunction]<語句塊>[函數名=返回值]EndFunction函數體2021/6/289說明:(1)函數名:命名規(guī)則與變量名規(guī)則相同。但不能與系統(tǒng)的內部函數或其它通用子過程同名,也不能與已定義的全局變量和本模塊中模塊級變量同名。(2)在函數體內,函數名可以當變量使用,函數的返回值就是通過對函數名的賦值語句來實現的,在函數過程中至少要對函數名賦值一次。(3)AS類型:是指函數返回值的類型,若省略,則函數返回變體類型值(Variant)。
(4)ExitFunction:表示退出函數過程,常常是與選擇結構(If或SelectCase語句)聯用,即當滿足一定條件時,退出函數過程。(5)形參數列表:形參的定義與子過程完全相同。例6.22021/6/28108.3.2函數的調用調用形式如下:
函數名(實參列表)說明:在調用時實參和形參的數據類型、順序、個數必須匹配。函數調用只能出現在表達式中,其功能是求得函數的返回值。2021/6/28118.4過程的作用域[Public|Private]Sub子過程名([形式參數列表])…..EndSub概念
通用子過程和函數過程既可寫在窗體模塊中也可寫在標準模塊中,在定義時可選用關鍵字Private(局部)和Public(全局),來決定它們能被調用的范圍。2021/6/28121、窗體/模塊級過程:
加Private關鍵字的過程,只能被定義的窗體或模塊中的過程調用。2、全局級過程:
加Public關鍵字(或缺?。┑倪^程,可供該應用程序的所有窗體和所有標準模塊中的過程調用。按過程的作用范圍來劃分,過程可分為:
模塊級過程
全局級過程用例7.1來說明過程的作用域2021/6/2813總結歸納過程的定義及作用域如下表(教材Pg.163)2021/6/28148.5過程之間參數的傳遞VisualBasic中不同模塊(過程)之間數據的傳遞有兩種方式:
通過過程調用實參與形參的結合實現;使用全局變量來實現各過程中共享數據。8.5.1形式參數與實際參數1、形式參數是指在定義通用過程時,出現在Sub或Function語句中的變量名后面園括號內的數,是用來接收傳送給子過程的數據,形參表中的各個變量之間用逗號分隔。2021/6/28152、實際參數實際參數是指在調用Sub或Function過程時,寫入子過程名或函數名后括號內的參數,其作用是將它們的數據(數值或地址)傳送給Sub或Function過程與其對應的形參變量。實參可由常量、表達式、有效的變量名、數組名(后加左、右括號,如A())組成,實參表中各參數用逗號分隔。8.5.2參數傳遞(虛實結合)
參數傳遞指主調過程的實參(調用時已有確定值和內存地址的參數)傳遞給被調過程的形參,參數的傳遞有兩種方式:按值傳遞、按地址傳遞。形參前加“ByVal”關鍵字的是按值傳遞,缺省或加“ByRef”關鍵字的為按地址傳遞。2021/6/2816
傳址與傳值傳址:形參得到的是實參的地址,當形參值的改變同時也改變實參的值。傳值:形參得到的是實參的值,形參值的改變不會影響實參的值。SubSwap2(x%,y%)DimTemp%Temp=x:x=y:y=TempEndSubSubSwap1(ByValx%,ByValy%)DimTemp%Temp=x:x=y:y=TempEndSub例8.42021/6/2817PrivateSubCmdOK_Click()a%=10:b%=20:Swap1a,b‘傳值
Print"A1=";a,"B1=";ba=10:b=20:Swap2a,b'傳地址
Print"A2=";a,"B2=";bEndSub程序調用執(zhí)行過程:2021/6/2818值傳遞的執(zhí)行過程如下圖:通過地址傳遞數據的執(zhí)行過程2021/6/2819數據傳遞的幾點說明:1.參數的數據類型2.按值傳遞參數 形參是實參的一個副本3.按地址傳遞參數 形參實參公用內存單元4.子過程執(zhí)行一系列操作,函數過程返回一個值注意:如果實參是常量(系統(tǒng)常量、符號常量)或者表達式,則無論定義時使用值傳遞還是地址傳遞,都是按值傳遞將常量或者表達式的計算值傳遞給形參。2021/6/28208.6高級用法(數組做為參數)VisualBasic允許把數組作為實參傳送到過程中。數組作參數是通過傳地址方式傳送。在傳送數組時,除遵守參數傳送的一般規(guī)則外,還應注意以下幾點:1.把一個數組的全部元素傳送給一個過程,應將數組名分別寫入形參列表中,并略去數組的上下界,但括號不能省略。PrivateSubSort(a()Assingle)
……EndSub其中形參“a()”即為數組。2021/6/28212.被調過程可通過Lbound和Ubound函數確定實參數組的上、下界。3.當用數組作形參時,對應的實參必須也是數組,且類型一致。4.實參和形參結合是按地址傳遞,即形參數組和實參數組共用一段內存單元。例如:定義了實參數組b(1to8),給它們賦了值,調用Sort()函數過程的形式如下:Sortb()或
CallSort(b())實參數組后面的括號可以省略,但為便于閱讀,建議一般不要省略為好。2021/6/2822調用時形參數組a和實參數組b虛實結合,共用一段內存單元,如下所示。因此在Sort()過程中改變數組a的各元素值,也就相當于改變了實參數組b中對應的元素的值,當調用結束時,形參數組a成為無定義。
b(1)b(2)b(3)b(4)b(5)b(6)b(7)b(8)a(1) a(2)a(3)a(4)a(5)a(6)a(7)a(8)參數為數組時虛實結合示意圖
例6.7改寫上章例5.3的排序程序,分別將排序用子過程Sort(),產生N個隨機整數用子過程GetData(),輸入N個數組元素用PrData()子過程來完成。2021/6/2823
補充例題:編寫判斷一個整數是不是素數寫函數過程。如果給定的整數是素數,則返回邏輯值True,否則返回False
PrivateFunctionPrime(nAsInteger)AsBooleanDimk%,YesAsBooleanYes=TrueFork=2ton\2IFnmodk=0thenYes=False:ExitForNextkPrime=Yes‘給函數名賦值,作為函的返回值EndFunction如何調用該函數呢?使用該函數,編一驗證哥德巴赫猜想。2021/6/2824PrivateSubForm_Click()Dimn%,n1%,n2%n=Val(InputBox("輸入大于6的正整數"))Forn1=3ton\2step2
'讓n1從3開始分解
n2=n-n1
'求得n2‘如果n1和n2都是素數,則打印輸出
Ifprime(n1)Andprime(n2)thenPrintn&"="&n1&"+"&n2ExitFor'結束循環(huán)
EndifNextn1EndSub2021/6/2825Fori=1Ton-1p=iForj=i+1TonIfa(p)>a(j)Thenp=jNextjtemp=a(i)a(i)=a(p)a(p)=tempNexti選擇法排序(升序)的VB程序:如何寫一個排序的VB過程?補充例題2:排序子過程2021/6/2826PrivateSubSort(a()Assingle)Dimi%,j%,p%,n%,temp!n=Ubound(a)Fori=1Ton-1p=iForj=i+1TonIfa(p)>a(j)Thenp=jNextjtemp=a(i)a(i)=a(p)a(p)=tempNextIEndSub2021/6/28278.7過程的嵌套和遞歸調用8.7.1過程的嵌套
在程序中調用一子過程,而在子過程中又調用另外的子過程,這種程序結構稱為過程的嵌套。過程的嵌套調用執(zhí)行過程如下圖:2021/6/28288.7.2過程的遞歸調用用自身的結構來描述自身,稱遞歸。例如,對階乘的定義:VisualBasic允許在一個Sub子過程和Function過程的定義內部調用自己,即遞歸Sub子過程和遞歸Function函數。例8.8編求階乘fac(n)=n!的遞歸函數2021/6/2829PrivateFunctionfac(nAsInteger)AsIntegerIfn=1Then fac=1Else fac=n*fac(n-1)EndIfEndFunctionPrivateSubForm_Click() Print“fac(4)=”;fac(4)EndSub程序的遞歸過程:2021/6/2830說明:遞歸處理一般用棧來實現,分遞推和回歸兩個過程,如上圖所示。遞推過程:每調用一次自身,把當前參數(形參、局部變量、返回地址等)壓入棧,直到遞歸結束條件成立。回歸過程:然后從棧中彈出當前參數,直到???。遞歸算法設計簡單,解決同一問題,使用遞歸算法消耗的機時和占據的內存空間要比使用非遞歸算法大。使用遞歸算法必須要滿足以下的遞歸條件:(1)存在遞歸結束條件及結束時的值;(2)能用遞歸形式表示,且遞歸向終止條件發(fā)展。2021/6/28318.8應用舉例8.8.1查找問題例8.11使用順序查找法,在一組數中查找某給定的數x算法設計:設一組數據存放在數組a(1)---a(n)中,待查找的數據放在x中,把x與a數組中的元素從頭到尾一一進行比較查找。用變量p表示a數組元素下標,p初值為1,使x與a(p)比較,如果x不等于a(p),則使p=p+1,不斷重復這個過程;一旦x等于a(p)則退出循環(huán);另外,如果p大于數組長度,循環(huán)也應該停止,則可由以下語句來實現它。ForP=1tonIFa(p)=xthenExitForNextP2021/6/2832下面編寫一查找函數Find(),若找到x則返回下標值,找不到返回0PrivateFunctionFind(a()AsSingle,xAsSingle)AsIntegerDimn%,p%,m%m=Lbound(a)n=Ubound(a)ForP=mtonIFa(p)=xthenExitForNextPIfp>nthenp=0Find=pEndFunction
2021/6/2833例8.12
使用折半查找法,在一批有序數列中查找給定的數x。分析:設n個有序數(從小到大)存放在數組a(1)----a(n)中,要查找的數為x。用變量bot、top、mid分別表示查找數據范圍的底部(數組下界)、頂部(數組的上界)和中間,mid=(top+bot)/2,折半查找的算法如下:(1)x=a(mid),則已找到退出循環(huán),否則進行下面的判斷;(2)x<a(mid),x必定落在bot和mid-1的范圍之內,即top=mid-1;(3)x>a(mid),x必定落在mid+1和top的范圍之內,即bot=mid+1;(4)在確定了新的查找范圍后,重復進行以上比較,直到找到或者bot<=top。2021/6/28348.8.2插入問題例8.13把一個給定數插到有序數列中,插入后數列仍然有序分析:設n個有序數(從小到大)存放在數組a(1)—a(n)中,要插入的數x。首先確定x插在數組中的位置p;(可由以下語句實現)ReDimPreservea(n+1)
'讓數組長度增加1,以便存放插入的數p=1dowhilex>a(p)andp<=np=p+1loop2021/6/2835a(p)—a(n)元素向后順移一個位置以空出a(p)元素放入x.。(可由以下語句實現)fori=ntopstep-1a(i+1)=a(i)nextia(p)=x將其寫成一插入函數(教材Pg.154)2021/6/2836VB提供了上百種內部函數(庫函數),要求掌握這些常用函數的功能及使用。調用方法:
函數名(參數列表)有參函數函數名無參函數說明:
(1)使用庫函數要注意參數的個數及其參數的數據類型(2)要注意函數的定義域(自變量或參數的取值范圍)例如:sqr(x)要求:x>=0(3)要注意函數的值域。如:exp(23773)的值就超出實數在計算機中的表示范圍。8.9常用內部函數2021/6/28371.數學函數常用的數學函數見P121表8-1所示
Abs(N)Cos(N)Sin(N)Exp(N)Log(N)Sqr(N)Rnd[(N)]Sgn(N)
說明:
(1)在三角函數中的自變量是以弧度為單位。如:sin300sin(3.14159/180*30)(2)Rnd函數返回0~1(包括0和不包括1)之間的雙精度隨機數。若要產生1-100的隨機整數:Int(Rnd*100)+1
提問:怎樣產生[N,M]區(qū)間的隨機數?
2021/6/28382.轉換函數常用的轉換函數見p123表8-4所示說明:(1)要區(qū)別兩個取整函數int()和fix()Fix(N)為截斷取整,即去掉小數后的數。
Int(N)不大于N的最大整數。
N>0與int(N)相同,當N<0時,int(N)與fix(N)-1相等。例如:Fix(9.59)=9,Int(9.59)=9Fix(-9.59)=-9,Int(-9.59)=-10
思考:如何實現四舍五入取整?(2)Asc("Abcd")
值為:65(只取首字母的Ascii值)
(3)Val("abc123")
值為:0,Val("1.2sa10")值為1.2
注意:Val()函數只將最前面的數字字符轉換為數值。2021/6/28
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025春耕農業(yè)產業(yè)鏈金融風險防控協(xié)議4篇
- 二零二四年物流行業(yè)融資擔保合同3篇
- 二零二五年度深海資源開發(fā)與保護合作協(xié)議范本3篇
- 2025年房地產項目房產證掛靠權轉讓協(xié)議2篇
- 2025年度建筑工程發(fā)包合同范本新實踐版2篇
- 二零二五年度存量房買賣合同(包含房屋權屬轉移及登記手續(xù))3篇
- 二零二五年度公共設施拆除產權補償協(xié)議書4篇
- 2025至2030年中國2端口屏幕分配器數據監(jiān)測研究報告
- 天文望遠鏡技術-深度研究
- 倫理道德與商業(yè)倫理教育-深度研究
- 人口老齡化背景下居民養(yǎng)老金融資產配置影響因素研究
- 人教版初中英語單詞大全七八九年級(帶音標) mp3聽力音頻下載
- 2024項目部安全管理人員安全培訓考試題及參考答案(模擬題)
- 《習近平法治思想概論(第二版)》 課件 2. 第二章 習近平法治思想的理論意義
- 2025年中國文玩電商行業(yè)發(fā)展現狀調查、競爭格局分析及未來前景預測報告
- 玩轉數和形課件
- 保定市縣級地圖PPT可編輯矢量行政區(qū)劃(河北省)
- 新蘇教版科學六年級下冊全冊教案(含反思)
- 天然飲用山泉水項目投資規(guī)劃建設方案
- 供方注冊指南-ZTE
- 2019年重慶市中考物理試卷(a卷)及答案
評論
0/150
提交評論