版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
關(guān)于過程調(diào)用與參數(shù)傳遞知識要點(diǎn)1、過程的基本概念2、sub過程定義格式定義方法窗體事件的執(zhí)行順序3、Function過程(定義格式、定義方法)第2頁,共50頁,星期六,2024年,5月7.3過程調(diào)用7.3.1事件過程的調(diào)用7.3.2調(diào)用Sub過程7.3.3調(diào)用Function過程7.3.4調(diào)用其它模塊中的公有過程第3頁,共50頁,星期六,2024年,5月
事件過程由一個(gè)發(fā)生在VisualBasic中的事件來自動調(diào)用或者由同一模塊中的其它過程顯式調(diào)用。
請看示例。p1317.3.1事件過程的調(diào)用第4頁,共50頁,星期六,2024年,5月Sub過程和function過程必須在事件過程或其他過程中顯式調(diào)用,否則過程代碼就永遠(yuǎn)不會被執(zhí)行。在調(diào)用程序時(shí),程序執(zhí)行到調(diào)用某通用過程的語句后,系統(tǒng)就會將控制轉(zhuǎn)移到被調(diào)用的過程。在被調(diào)用的過程中,從第一條sub或function語句開始,依次執(zhí)行其中的所有語句,當(dāng)執(zhí)行到endsub或endfunction語句后,返回到主調(diào)程序的斷點(diǎn),并從斷點(diǎn)處繼續(xù)程序的執(zhí)行。7.3.2調(diào)用Sub過程第5頁,共50頁,星期六,2024年,5月主調(diào)程序
調(diào)用過程AEndSub過程AEndSub調(diào)用Sub通用過程流程第6頁,共50頁,星期六,2024年,5月Sub子過程的調(diào)用(1)用Call語句調(diào)用Sub過程語法:Call過程名(實(shí)在參數(shù)表)
實(shí)在參數(shù)的個(gè)數(shù)、類型和順序,應(yīng)該與被調(diào)用過程的形式參數(shù)相匹配,有多個(gè)參數(shù)時(shí),用逗號分隔。如果被調(diào)用的過程是一個(gè)無參過程,則括號可以省略.第7頁,共50頁,星期六,2024年,5月PrivateSubCommand1_Click()DimaAsInteger,bAsIntegera=Val(Text1.Text):b=Val(Text2.Text)Calladd(a,b)EndSub例:PrivateSubadd(xAsInteger,yAsInteger)s=x+yText3.Text=sEndSub調(diào)用add子過程第8頁,共50頁,星期六,2024年,5月PrivateSubCommand1_Click()DimaAsInteger,bAsIntegera=Val(Text1.Text):b=Val(Text2.Text)s=a+bText3.Text=sEndSub等價(jià)于:第9頁,共50頁,星期六,2024年,5月例7-2編寫一個(gè)找出任意一個(gè)正整數(shù)的因子的程序PrivateSubCommand1_Click()DimIntaAsInteger,StAsStringInta=Text1.Text
CallFactor(Inta,St)Text2.Text=StEndSubPrivateSubFactor(ByValNAsInteger,SAsString)DimIAsIntegerForI=1ToN-1IfNModI=0ThenS=S&Str(I)NextIEndSub第10頁,共50頁,星期六,2024年,5月(2)把過程名作為一個(gè)語句來用語法:過程名[實(shí)參1[,實(shí)參2……]]它與(1)的不同點(diǎn)是:去掉了關(guān)鍵字call和實(shí)參列表的括號PrivateSubCommand1_Click()DimaAsInteger,bAsIntegera=Val(Text1.Text):b=Val(Text2.Text)
adda,bEndSubPrivateSubadd(xAsInteger,yAsInteger)s=x+yText3.Text=sEndSub第11頁,共50頁,星期六,2024年,5月練一練:使用第2種調(diào)用方式修改例7.2。
PrivateSubCommand1_Click()DimIntaAsInteger,StAsStringInta=Text1.TextFactorInta,StText2.Text=StEndSubPrivateSubFactor(ByValNAsInteger,SAsString)DimIAsIntegerForI=1ToN-1IfNModI=0ThenS=S&Str(I)NextIEndSub第12頁,共50頁,星期六,2024年,5月課堂練習(xí)2:編寫一個(gè)實(shí)現(xiàn)兩數(shù)交換的程序,要求程序中定義一個(gè)交換兩數(shù)的通用過程。PrivateSubcommand1_click()
Dima%,b%a=text1.textb=text2.textcallswap(a,b)
text1.text=atext2.text=bEndSubPrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X:X=Y:Y=TempEndSub第13頁,共50頁,星期六,2024年,5月
調(diào)用Function過程的方法與調(diào)用VisualBasic內(nèi)部函數(shù)方法相同。即在表達(dá)式中寫出它的名稱和相應(yīng)的實(shí)在參數(shù):
Function過程名([實(shí)在參數(shù)表])1)調(diào)用Function過程與調(diào)用Sub過程不同,必須給參數(shù)加上括號,即使調(diào)用無參函數(shù),括號也不能缺??;
2)VisualBasic也允許像調(diào)用Sub過程那樣調(diào)用Function過程。(即使用call語句和把函數(shù)名當(dāng)作一個(gè)語句使用。)7.3.3調(diào)用Function過程第14頁,共50頁,星期六,2024年,5月例7-3編寫程序,求兩個(gè)正整數(shù)的最大公約數(shù)。PrivateSubForm_Click()DimNAsInteger,MAsInteger,GAsIntegerN=InputBox("輸入N")M=InputBox("輸入M")
G=Gcd(N,M)PrintN;"和";M;"的最大公約數(shù)是:";GEndSubPrivateFunctionGcd(ByValAAsInteger,ByValBAsInteger)AsIntegerDimRAsIntegerR=AModBDoWhileR<>0A=B:B=R:R=AModBLoopGcd=BEndFunction第15頁,共50頁,星期六,2024年,5月1.調(diào)用窗體模塊中的公有過程
CallForm1.ExamSub([實(shí)參表])2.調(diào)用標(biāo)準(zhǔn)模塊中的公有過程
CallCommonSub(實(shí)在參數(shù))或CallModule2.CommonSub([實(shí)參表])
7.3.4調(diào)用其它模塊中的公有過程(了解)第16頁,共50頁,星期六,2024年,5月課堂練習(xí)在調(diào)用過程中,下述說明中正確的是()A)只能使用Call語句調(diào)用Sub過程B)調(diào)用Sub過程時(shí),實(shí)在參數(shù)必須用括號括起來C)在表達(dá)式中調(diào)用Function過程時(shí),可以不用括號把實(shí)在參數(shù)括起來D)Function過程也可用Call語句調(diào)用第17頁,共50頁,星期六,2024年,5月課堂練習(xí)在VisualBasic中,以下說法正確的是()A)過程的定義可以嵌套,但過程的調(diào)用不能嵌套B)過程的定義不可以嵌套,但過程的調(diào)用能嵌套C)過程的定義和過程的調(diào)用均可以嵌套D)過程的定義和過程的調(diào)用均不可以嵌套第18頁,共50頁,星期六,2024年,5月課堂練習(xí)在語句PublicSubSort(IAsInteger)中,I是一個(gè)按()傳遞的參數(shù)A)地址B)值C)變量D)常量第19頁,共50頁,星期六,2024年,5月7.4參數(shù)的傳遞(重點(diǎn)、難點(diǎn))7.4.1形參與實(shí)參7.4.2按值傳遞參數(shù)7.4.3按地址傳遞參數(shù)7.4.4數(shù)組參數(shù)7.4.5對象參數(shù)第20頁,共50頁,星期六,2024年,5月
在調(diào)用一個(gè)有參數(shù)的過程時(shí),首先進(jìn)行的是“形實(shí)結(jié)合”,即按傳值傳遞或按地址傳遞方式,實(shí)現(xiàn)調(diào)用程序和被調(diào)用的過程之間的數(shù)據(jù)傳遞。PrivateSubcommand1_click()
Dima%,b%a=text1.textb=text2.textcallswap(a,b)
text1.text=a
text2.text=bEndSubPrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X
X=Y
Y=TempEndSub實(shí)參形參7.4.1形參與實(shí)參第21頁,共50頁,星期六,2024年,5月1.形參
出現(xiàn)在Sub過程和Function過程的形參表中的變量名、數(shù)組名稱之為形式參數(shù),過程被調(diào)用之前,并未為其分配內(nèi)存,其作用是用來接收傳送給子過程的數(shù)據(jù)
形參可以是:
1)除定長字符串變量之外的合法變量名;
2)后面跟有左、右圓括號(注意:不含下標(biāo))的數(shù)組名。
第22頁,共50頁,星期六,2024年,5月2.實(shí)參
實(shí)際參數(shù)是指包含在過程調(diào)用的實(shí)參表中的變量,數(shù)組等。其作用是將它們的數(shù)據(jù)(數(shù)值或地址)傳送給Sub或Function過程與其對應(yīng)的形參變量。
實(shí)參可以是常量、表達(dá)式、有效的變量名、數(shù)組名組成。
如calltest(x^2,true,a,st)算術(shù)表達(dá)式第23頁,共50頁,星期六,2024年,5月
參數(shù)傳遞是按對應(yīng)“位置”結(jié)合而不是按名字結(jié)合,即第一個(gè)實(shí)參與第一形參結(jié)合,第二個(gè)實(shí)參與第二個(gè)形參結(jié)合,依此類推。3、參數(shù)傳遞(虛實(shí)結(jié)合)
參數(shù)傳遞指主調(diào)過程的實(shí)參(調(diào)用時(shí)已有確定值和內(nèi)存地址的參數(shù))傳遞給被調(diào)過程的形參,參數(shù)的傳遞有兩種方式:按值傳遞、按地址傳遞。形參前加“ByVal”關(guān)鍵字的是按值傳遞,缺省或加“ByRef”關(guān)鍵字的為按地址傳遞。第24頁,共50頁,星期六,2024年,5月例:PrivateSubcommand1_click()
Dima%,b%a=text1.textb=text2.textcallswap(a,b)
text1.text=a
text2.text=bEndSubPrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X
X=Y
Y=TempEndSub實(shí)參形參第25頁,共50頁,星期六,2024年,5月
說明:(1)形參表和實(shí)參表中的對應(yīng)變量名可以不必相同。Privatesubexamsub(xasinteger,yassingle)…….EndsubPrivatesubform_click()dimxasinteger,yassingle…….Callexamsub(y,x)Endsub第26頁,共50頁,星期六,2024年,5月形參實(shí)參變量變量、常數(shù)、表達(dá)式、數(shù)組元素、對象數(shù)組數(shù)組(2)形參與實(shí)參的個(gè)數(shù)必須相同,對應(yīng)位置的參數(shù)類型必須一致。對應(yīng)關(guān)系如下表第27頁,共50頁,星期六,2024年,5月
按值傳遞時(shí),系統(tǒng)分配臨時(shí)的變量單元給形參。系統(tǒng)僅把實(shí)參的值復(fù)制一份,然后把這個(gè)副本再傳給形參。被調(diào)過程執(zhí)行時(shí),對形參的任何改變,都不會影響實(shí)參變量。結(jié)論:按值傳遞,形參變,相應(yīng)的實(shí)參不變。7.4.2按值傳遞參數(shù)第28頁,共50頁,星期六,2024年,5月分析下列程序的值
PrivateSubCommand1_Click()DimMAsInteger,NAsIntegerM=15:N=20CallValue_Change(M,N)PrintM,NEndSubPrivateSubValue_Change(ByValXAsInteger,ByValYAsInteger)X=X+20Y=X+YPrint“X=“;X,”Y=“;YEndSub1520返回地址1520MNXY100010021004100510031520返回地址3555MNXY10001002100410051003第29頁,共50頁,星期六,2024年,5月結(jié)論:按地址傳遞參數(shù),形參變,相應(yīng)的實(shí)參也跟著變7.4.3按地址傳遞參數(shù)
按地址傳遞參數(shù)是把實(shí)參變量的地址傳給形參,即系統(tǒng)并不分配臨時(shí)的變量單元給形參,而是形參與實(shí)參共用同一存儲單元,因此,被調(diào)過程執(zhí)行時(shí),形參變量的任一變化,實(shí)參也相應(yīng)改變。按地址傳遞參數(shù)可節(jié)省內(nèi)存,執(zhí)行效率高,但也可能對程序運(yùn)行產(chǎn)生某些干擾。第30頁,共50頁,星期六,2024年,5月分析下列程序的值PrivateSubCommand1_Click()DimMAsInteger,NAsIntegerM=15:N=20
CallValue_Change(M,N)PrintM,NEndSubPrivateSubValue_Change(XAsInteger,byvalueYAsInteger)X=X+20Y=X+YPrint“X=“;X,”Y=“;YEndSubX=35y=55M=35N=20第31頁,共50頁,星期六,2024年,5月1520返回地址1000(地址)20MNXY100010021004100510033520返回地址1000(地址)55MNXY10001002100410051003第32頁,共50頁,星期六,2024年,5月PrivateSubForm_Click()DimsumAsInteger,iAsIntegerFori=5To1Step-1sum=sum+fact(i)NextiPrint"sum=";sumEndSub編寫程序計(jì)算5!+4!+3!+2!+1!的值調(diào)用函數(shù),循環(huán)變量作為實(shí)參PublicFunctionfact(nAsInteger)AsIntegerfact=1DoWhilen>0fact=fact*nn=n-1LoopEndFunction按地址傳遞參數(shù)產(chǎn)生不良干擾的示例:(1)循環(huán)變量作為實(shí)參Why?如何修改?結(jié)果:120正確結(jié)果應(yīng)為:153第33頁,共50頁,星期六,2024年,5月參數(shù)數(shù)據(jù)類型轉(zhuǎn)換的例子PrivateSubForm_Click()DimSasSingleS=125.5CallConvert((S),”12”+”.5”)EndSub如果為CallConvert((S),”125a”)呢?PrivateSubConvert(Inx
As
Integer,Sing
As
Single)Inx=Inx*2Sing=Sing+23Print“Inx+”;Inx,”sing=”;SingEndSub第34頁,共50頁,星期六,2024年,5月PrivateSubForm_Click()Dimv1AsInteger,v2AsInteger,v3AsIntegerv1=2:v2=3:v3=4Printv1+v2+v3*f(v1,v2,v3)EndSubPublicFunctionf(aAsInteger,bAsInteger,cAsInteger)a=a+10b=b+10c=c+10f=a+b+cEndFunction調(diào)用函數(shù)語句,實(shí)參是傳地址的。實(shí)參變量又出現(xiàn)在表達(dá)式中結(jié)果是571,而非161。why?(2)實(shí)參出現(xiàn)在表達(dá)式中第35頁,共50頁,星期六,2024年,5月
因?yàn)樵趐rint語句中,計(jì)算表達(dá)式時(shí),優(yōu)先執(zhí)行函數(shù)調(diào)用。調(diào)用結(jié)束時(shí)f=39,而v1,v2,v3的值也變了,不是2,3,4而是12,13,14所以結(jié)果是:12+13+14*39=571第36頁,共50頁,星期六,2024年,5月PrivateSubForm_Click()Dimv1AsInteger,v2AsInteger,v3AsIntegerv1=2:v2=3:v3=4V4=v1+v2+v3*f(v1,v2,v3)Printv4EndSub修改成賦值語句結(jié)果為161
因?yàn)閳?zhí)行賦值語句時(shí),計(jì)算右側(cè)表達(dá)式的值不是首先調(diào)用函數(shù),而是按從左到右的順序進(jìn)行的,即計(jì)算2+3+4*39第37頁,共50頁,星期六,2024年,5月如果修改成:PrivateSubForm_Click()Dimv1AsInteger,v2AsInteger,v3AsIntegerv1=2:v2=3:v3=4V4=v1+v2+v3*f((v1,v2,v3)*1.0)Printv4EndSub這是一個(gè)非整型的()也叫實(shí)型表達(dá)式
結(jié)果又是571了,因?yàn)橛?jì)算實(shí)型表達(dá)式時(shí)優(yōu)先調(diào)用函數(shù)第38頁,共50頁,星期六,2024年,5月
結(jié)論:函數(shù)調(diào)用的優(yōu)先級是不確定的,與諸多因素有關(guān)。編程時(shí)盡量不把按地址傳遞的實(shí)參變量放在函數(shù)調(diào)用的前面,可能會使算術(shù)表達(dá)式的值難以預(yù)料。第39頁,共50頁,星期六,2024年,5月
形參數(shù)組只能是按地址傳遞的參數(shù)。對應(yīng)實(shí)參必須也是數(shù)組且數(shù)據(jù)類型必須和形參數(shù)組的數(shù)據(jù)類型相一致。7.4.4數(shù)組參數(shù)第40頁,共50頁,星期六,2024年,5月對數(shù)組作形參作幾點(diǎn)說明:
1)如果形參數(shù)組的類型是變長字符串型,則對應(yīng)的實(shí)參數(shù)組的類型也必須是變長字符串型。第41頁,共50頁,星期六,2024年,5月Privatesubform_click()Dimarray(5)asstring*8Callchangedim(array)EndsubPrivatesubchangedim(a()asstring)DimiasintegerRedimpreservea(7)Fori=1to7a(i)=iNextIEndsub形參是變長數(shù)組
錯誤:實(shí)參是定長數(shù)組第42頁,共50頁,星期六,2024年,5月Privatesubform_click()Dimarray(5)asstring*10Callchangedim(array)EndsubPrivatesubchangedim(a()asstring*8)DimiasintegerRedimpreservea(7)Fori=1to7a(i)=iNextIEndsub形參是定長數(shù)組實(shí)參也是定長數(shù)組2)如果形參數(shù)組的類型定長字符串型,則對應(yīng)的實(shí)參數(shù)組的類型也必須是定長字符串型,但長度可以不同。第43頁,共50頁,星期六,2024年,5月3)調(diào)用過程時(shí),只要把傳遞的數(shù)組名放在實(shí)參表中即可,數(shù)組名后面不跟圓括號。Privatesubform_click()Dimarray(5)asstring*8Callchangedim(array)Endsub第44頁,共50頁,星期六,2024年,5月4)在過程中不可以用dim語句對形參數(shù)組進(jìn)行聲明,否則將產(chǎn)生“重復(fù)聲明”的錯誤,但是使用動態(tài)數(shù)組時(shí),可以用redim語句改變形參數(shù)組的維界,重新定義數(shù)組的大小。當(dāng)控制返回調(diào)用程序時(shí),對應(yīng)參數(shù)的維界也跟著發(fā)生變化。第45頁,共50頁,星期六,2024年,5月Privatesubform_click()Dimarray()asinteger,iasintegerRedimarray(5)Print“調(diào)用前數(shù)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年租賃合同具體條款與條件
- 2025年度建筑材料綠色生產(chǎn)技術(shù)合同3篇
- 2025年測繪技術(shù)成果保密及許可使用合同3篇
- 2025年度5G通信基礎(chǔ)設(shè)施建設(shè)與運(yùn)維服務(wù)合同3篇
- 2024智能語音識別系統(tǒng)開發(fā)合同
- 2024年鋼筋施工勞務(wù)合作協(xié)議版
- 家電知識培訓(xùn)課件下載
- 2024年甲乙雙方關(guān)于保險(xiǎn)合同的合同
- 2024茶葉品牌專屬訂購銷售協(xié)議樣本版B版
- 中國美術(shù)學(xué)院《經(jīng)濟(jì)社會系統(tǒng)仿真實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東省公立醫(yī)療機(jī)構(gòu)基本醫(yī)療服務(wù)價(jià)格項(xiàng)目修訂表
- 《激光原理及應(yīng)用》全套課件
- 2022年河南省公務(wù)員錄用考試《行測》真題及答案解析
- 北京市海淀區(qū)2023-2024學(xué)年高三上學(xué)期期末考試+歷史 含答案
- 急診心律失常的治療
- 2024ESC心房顫動管理指南解讀
- 工廠車間安全培訓(xùn)試題附答案(完整版)
- 專項(xiàng)11-三角形中角度計(jì)算-經(jīng)典小題(30道)
- 2024年航空職業(yè)技能鑒定考試-航空乘務(wù)員危險(xiǎn)品考試近5年真題附答案
- 強(qiáng)制執(zhí)行解除申請書模板
- 第五單元《圓》(大單元教學(xué)設(shè)計(jì))-2024-2025學(xué)年六年級上冊數(shù)學(xué)人教版
評論
0/150
提交評論