vb過程絕對有用_第1頁
vb過程絕對有用_第2頁
vb過程絕對有用_第3頁
vb過程絕對有用_第4頁
vb過程絕對有用_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第六章過程6.1函數過程的定義與調用6.2子過程的定義與調用6.3參數傳遞6.4遞歸6.5綜合應用12例:已知的值。47,求Cm!(n-m)!n!Cmn=k1=1:k2=1:k3=1n=7:m=4Fori=1Tonk1=k1*iNextiFori=1Tomk2=k2*iNextiFori=1Ton-mk3=k3*iNextis=k1/k2/k3本章目錄3調用過程:調用Sprg1調用Sprg1調用Sprg2子過程:Sprg1子過程:Sprg2過程的引入:

使同類的操作不重復編寫,寫一次多次用把一項復雜的工作分成簡單的功能塊,分而治之過程:完成一段獨立功能,可供其他過程使用。本章目錄4Sub過程事件過程自定義子過程Function過程

內部函數(標準函數)自定義函數過程1)過程是一段程序代碼,是相對獨立的邏輯模塊。2)一個完整的VB應用程序由若干過程和模塊組成。Sub子過程:完成一定的操作和功能,無返回值。Function函數過程:完成一定的操作和功能,并且可將數據處理的結果返回。常用過程分類:本章目錄6.1函數過程的定義和調用5例6.1:已知多邊形各條邊的長度,計算多邊形的面積。計算多邊形面積,可將多邊形分解成若干個三角形。計算三角形面積的公式如下:本章目錄6定義函數過程area:Functionarea(x!,y!,z!)AsSingleDimc!c=1/2*(x+y+z)area=Sqrt(c*(c-x)*(c-y)*(c-z))EndFunctionSubcommand1_click()…輸入若干個三角形邊長

S=area(a,b,c)+area(c,d,e)+area(e,f,g)Msgbox("面積="&S)EndSub6.1函數過程的定義和調用調用函數過程本章目錄6.1.1函數過程的定義7

在窗體、模塊等的代碼窗口把插入點放在所有現有過程之外,直接輸入函數過程。定義函數過程的形式如下:[Public|Private]Function函數名(形參)[As類型]

變量聲明語句塊函數名=表達式EndFunction6.1函數過程的定義和調用本章目錄8Public全局函數過程,可被程序任何模塊調用Private僅供本模塊中的其它過程調用形參(或稱啞元)只能是變量或數組名(),僅表示參數的個數和類型,無值。例6.2

編寫一個求最大公約數的函數過程。

Functiongcd(m%,n%)AsIntegerIfm<nThent=m:m=n:n=tDowhilen<>0r=mModn:m=n:n=rLoopgcd=m

EndFunction6.1函數過程的定義和調用本章目錄6.1.2函數過程的調用9調用形式:函數過程名([參數列表])

參數列表(稱為實參或實元):必須與形參個數相同,位置與類型一一對應。可以是同類型的常量、變量、表達式。6.1函數過程的定義和調用本章目錄6.1函數過程的定義和調用

Sub

Form_Click()Dimx%,y%,z%x=124:y=24z=gcd(x,y)MsgBox("最大公約數是"&z)EndSub

程序運行流程Functiongcd(m%,n%)AsIntegerIfm<nThent=m:m=n:n=tDowhilen<>0r=mModn:m=n:n=rLoopgcd=mEndFunction10本章目錄11例6.3

編一函數,統計字符串中漢字的個數。分析:在VB中,字符以Unicode碼存放,每個漢字和英文是一個字符、占有兩個字節,區別是漢字的機內碼最高位為1,若利用Asc函數求其碼值為小于0(以補碼表示),而西文字符的最高位為0,Asc函數求其碼值為大于0。

6.1函數過程的定義和調用本章目錄6.2子過程的定義與調用126.2.1引例以下情況使用函數過程存在不便:不是為了獲得某個函數值,而是為了某種功能的處理。要獲得多個結果。VB中提供了使用更靈活的子過程。例6.4編一過程,對Label1控件進行移動,通過參數Tag的值(1或-1)決定移動方向。該過程不是為了計算獲得某個結果,而是進行對控件移動的處理。本章目錄6.2.2子過程的定義13子過程定義的方法類似函數過程,形式如下:[Public|Private]Sub

子過程名([參數列表])

局部變量或常數定義

語句

[ExitSub]

語句EndSub子過程名、形參同函數過程中對應項的規定,當無形參時不要括號。6.2子過程的定義與調用本章目錄1.子過程與函數過程的區別14

把某功能定義為函數過程還是子過程,沒有嚴格的規定。一般若程序有一個返回值時,函數過程直觀;當有多個返回值時,習慣用子過程。函數過程必須有返回值,函數名有類型。子過程名沒有值,也沒有類型,不能在子過程體內對子過程名賦值。

6.2子過程的定義與調用本章目錄2.參數問題15形參是過程與主調程序交互的接口,從主調程序獲得初值,或將計算結果返回給主調程序;不要將過程中所有使用過的變量均作為形參;形參沒有具體的值,只代表了參數的個數、位置、類型;形參只能是簡單變量、數組名,不能是常量、數組元素、表達式。6.2子過程的定義與調用本章目錄6.2子過程的定義與調用例6.5:找定冠詞的ProcThe子過程。

SubProcThe(ByVals$,ByRefCount%)……EndSub……CallProcThe(Text1.Text,n)……16本章目錄6.2.3子過程調用17子過程的調用是一句獨立的調用語句,有兩種形式:

Call

子過程名[(實參列表)]

子過程名([實參列表])用Call關鍵字時,若有實參,則實參必須用圓括號括起,無實參圓括號省略。注意:若實參要獲得子過程的返回值,則實參只能是變量(與形參同類型的簡單變量、數組名、結構類型),不能是常量、表達式,也不能是控件名。6.2子過程的定義與調用本章目錄18例6.6

分別編一個統計字符串S中定冠詞The出現個數的子過程和函數過程,并分別調用。處理方法:利用InStr函數反復在字符串S找The子串。分析:當定義好函數過程后,要改為子過程,只要將函數過程的返回結果作為子過程的形參,即在子過程中增加一個參數。6.2子過程的定義與調用本章目錄6.3參數傳遞196.3.1形參與實參在參數傳遞中,一般是按位置傳送,按實參的位置次序與形參的位置次序對應傳送,與參數名沒有關系。按位置傳送是最常用的參數傳遞方法,如在調用標準函數時,用戶根本不知道形參名,只要關心形參的個數、類型、位置,例如Mid函數形式:

Mid(字符串$,起始位%,取幾位%)調用語句:s=Mid("ThisisVB",9,2)則s中的結果為“VB”。本章目錄6.3.2傳地址與傳值20實參與形參的結合有傳地址(ByRef)和傳值(ByVal)兩種方法。傳地址方式當調用一個過程時,它將實參的地址傳遞給形參。因此在被調過程體中對形參的任何操作都變成了對相應實參的操作,實參的值就會隨過程體內對形參的改變而改變。傳值方式當調用一個過程時,系統將實參的值復制給形參,實參與形參斷開了聯系。在過程體內對形參的任何操作不會影響到實參。缺省關鍵字6.3參數傳遞本章目錄例6.7

編寫交換兩個數的過程,Swap1用傳值方式,Swap2用傳地址方式。21形參獲得實參的值形參獲得實參的地址6.3參數傳遞本章目錄22選用傳值還是傳地址一般進行如下考慮:要將被調過程中的結果返回給主調程序,則形參必須是傳址方式。這時實參必須是同類型的變量,不能是常量、表達式;不希望過程修改實參的值,則應選用傳值方式,減少各過程間的關聯。因為在過程體內對形參的改變不會影響實參;形參是數組都是地址傳遞。6.3參數傳遞本章目錄6.3.3數組參數的傳遞23例6.8

如下sum子過程求數組a各元素和、并改變數組各元素值:Functionsum%(ByRefx()AsInteger)Dimi%sum=0Fori=0ToUBound(x)

sum=sum+x(i):x(i)=2*x(i)NextiEndFunction6.3參數傳遞本章目錄24形參是數組要以數組名加圓括號表示,不要給出維數上界;多維數組,每維以逗號分隔。在過程中通過Ubound函數確定每維的上界。實參是數組要給出數組名(不需要圓括號)。當數組作為參數傳遞時,系統將實參數組的起始地址傳給過程,使形參數組也具有與實參數組相同的起始地址。13579形參數組實參數組6.3參數傳遞本章目錄6.4遞歸25用自身的結構來描述自身就稱為遞歸。最典型的例子是階乘運算,作如下的定義:遞歸過程在自身定義的內部調用自己。本章目錄26例6.9編fac(n)=n!的遞歸函數。Functionfac(nAsInteger)AsIntegerIfn=1Then fac=1Else fac=n*fac(n-1)EndIfEndFunction6.4遞歸本章目錄27遞推過程:每調用自身,當前參數壓棧,直到達到遞歸結束條件。回歸過程:不斷從棧中彈出當前的參數,直到棧空。遞歸算法設計簡單,但消耗的機時和占據的內存空間比非遞歸大,由此可見構成遞歸的結構如下:遞歸結束條件及結束時的值;能用遞歸形式表示,并且遞歸向終止條件發展。fac(2)=2*fac(1)fac(1)=1fac(4)=4*6fac(3)=3*2fac(2)=2*1fac(3)=3*fac(2)fac(4)=4*fac(3)6.4遞歸本章目錄28例6.10用遞歸求最大公約數。PublicFunctiongcd(mAsInteger,nAsInteger)AsIntegerIf(mModn)=0Thengcd=nElsegcd=gcd(n,mModn)EndIfEndFunction6.4遞歸本章目錄6.5變量的作用域29過程級變量在一個過程內用Dim或Static語句聲明的變量,只能在本過程中使用;模塊級變量在模塊內、任何過程外用Dim、Private語句聲明的變量,可被本模塊的任何過程訪問;全局變量在模塊級用Public語句聲明的變量,可被應用程序的任何過程或函數訪問。本章目錄6.5.1變量的作用域30例如,在下面一個標準模塊文件中不同級的變量聲明:

PublicPaAsinteger '全局變量

PrivateMbAsstring*10'窗體/模塊級變量

SubF1()DimFaAsinteger '過程級變量

…EndSubSubF2()DimFbAsSingle '過程級變量

EndSub6.5變量的作用域6.5.2靜態變量31靜態變量程序運行過程中可保留變量的值。聲明形式:Static變量名[AS類型]用Dim聲明的變量,每次調用過程時重新初始化。6.5變量的作用域本章目錄32例6.11

編寫程序,利用變量count統計單擊窗體的次數。PrivateSubForm_Click()Staticcount%count=count+1Print"已單擊窗體";count;"次"EndSubPrivateSubForm_Click()Dimcount%count=count+1Print"已單擊窗體";count;"次"EndSub6.5變量的作用域本章目錄6.6綜合應用331.數制轉換不同進制數之間的轉換,可通過編程來實現;也可通過VB提供的內部函數:十進制轉換為八進制函數(Oct)、轉換為十六進制函數(Hex)來實現。本章目錄34例6.12

編一函數,實現一個十進制整數轉換成二至十六任意進制的字符。分析:十進制正整數m轉換成r進制數,將m不斷除r取余數(若余數超過9,還要進行相應的轉換,例如10變成A,11變成B等),直到商為零,以反序得到結果,即最后得到的余數在最高位。6.6綜合應用本章目錄352.加密和解密信息加密是信息安全性的措施之一。信息加密有各種方法,最簡單的加密方法是將每個字母平移一個位置(稱為密鑰)。例如,后移5個位置,這時,A→F,B→G…

溫馨提示

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

評論

0/150

提交評論