第6章-過程課件_第1頁
第6章-過程課件_第2頁
第6章-過程課件_第3頁
第6章-過程課件_第4頁
第6章-過程課件_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章過程第6過程過程概述將程序分割成較小的邏輯部件就可以簡化程序設計任務。稱這些部件為過程。過程可用于壓縮重復任務,例如,壓縮頻繁的計算。例如:求1!+2!+…+n!求1!+2!+3!+…+N!DimiAsIntegerDimjAsIntegersum=0n=InputBox(請輸入一個數(shù)N)Fori=1Tonk=1Forj=1Toik=k*jNextjsum=sum+kNextiPrint"1!+2!+3!+..."&n&"!"&"="&sum一般的方法PublickAsLongPublicSubfact(ByRefnAsInteger)k=1Forj=1Tonk=k*iNextEndSub求階乘的過程n=InputBox("請輸入一個數(shù)n")sum=0Fori=1TonCallfact(i)sum=sum+kNextPrint"1!+2!+3!+..."&n&"!"&"="&sum調(diào)用過程求1!+2!+…n!DimnAsIntegerDimsumAsLongDimiAsInteger1/1!+2/2!+…N/N!PrivateSubCommand2_Click()n=Val(InputBox("請輸入一個數(shù)n"))sum=0Fori=1TonCallfact(i)sum=sum+i/kNext

Print"1/1!+2/2!+..."&n&"/"&n&"!"&"="&sumEndSub用過程編程有兩大好處:1:過程可使程序劃分成離散的邏輯單元,每個單元都比無過程的整個程序容易調(diào)試。2:一個程序中的過程,往往不必修改或只需稍作改動,便可以成為另一個程序的構(gòu)件。VB中有兩類過程,一類是事件過程,另—類是通用過程。事件過程是由系統(tǒng)提供的、不需要用戶創(chuàng)建。通用過程是由用戶根據(jù)自己的需要定義和編寫的、可供事件過程多次調(diào)用的程序段。通用過程又可分為:Sub子過程Function過程(函數(shù)過程)6.2SUB子過程的定義與調(diào)用Sub子過程格式:[Private|Public][Static]Sub過程名[(參數(shù)表)]語句組[ExitSub]語句組EndSub其創(chuàng)建方法有兩種:一是在代碼窗口中直接按規(guī)定的格式編寫;二是利用VB的過程添加工具生成過程框架,然后編寫過程體??梢詫⒆舆^程放入標準模塊、類模塊和窗體模塊中。按照缺省規(guī)定,所有模塊中的子過程為Public(公用的),這意味著在應用程序中可隨處調(diào)用它們。2:使用《添加過程》對話框創(chuàng)建過程:打開代碼窗口工具菜單添加過程事例:編寫求N的累加和的SUB過程PrivateSubCommand2_Click()Text1.Text=""Text2.Text=""Text1.SetFocusEndSubPublicsAsIntegerPublicSubsumzr(nAsInteger)DimiAsIntegers=0Fori=1Tons=s+iNextEndSubPrivateSubCommand1_Click()Callsumzr(Val(Text1.Text))Text2.Text=sEndSubPublicSubsumzr(nAsInteger,sAsInteger)DimiAsIntegers=0Fori=1Tons=s+iNextEndSubPrivateSubCommand1_Click()DimnAsInteger,sAsIntegerCallsumzr(Val(Text1.Text),s)Text2.Text=sEndSub3:過程的調(diào)用使用Call語句格式:CALL<過程名>(實際參數(shù))直接使用過程名格式:<過程名>[實際參數(shù)]

過程編寫事例:

該過程的功能是讓計算機發(fā)出”梆梆梆”的聲音,發(fā)聲次數(shù)由調(diào)用過程時傳遞的參數(shù)控制.該過程帶有一個形式參數(shù).Subbeepsound(nAsInteger)DimiAsIntegerDimjAsDoubleFori=1TonBeepForj=1To100000NextjNextiEndSub分析該過程的作用范圍?注意過程創(chuàng)建的方法、創(chuàng)建的位置、參數(shù)的使用調(diào)用beepsound過程PrivateSubCommand1_Click()Callbeepsound(Val(Text1.Text))EndSub注意調(diào)用格式PrivateSubCommand1_Click()beepsoundVal(Text1.Text)EndSub例6.4SubMyMove(ByValTag%)Label1.Left=Label1.Left+Tag*100Label1.Top=Label1.Top+Tag*100EndSub

'事件過程調(diào)用MyMove:PrivateSubCommand1_Click()Dimk%IfRnd>0.5Thenk=1Elsek=-1MyMove(k)EndSub事例:編寫求N!的SUB過程PublicSubfact(nAsInteger,sAsLong)DimiAsIntegers=1Fori=1Tons=s*iNextEndSub事例:編程計算1!+2!+…+n!PrivateSubCommand1_Click()DimiAsInteger,sAsLong,sumAsLongFori=1ToVal(Text1.Text)Callfact(i,s)sum=sum+sNextText2.Text=sumEndSubVisualBasic包含內(nèi)部的函數(shù),如Sqr、Cos或Chr。此外,還可用Function語句編寫自己的Function過程。1:函數(shù)過程的語法是[Public|Private][Static]Function函數(shù)名([形參表])[As數(shù)據(jù)類型]語句組[函數(shù)名=表達式][ExitFunction]語句組 [函數(shù)名=表達式]EndFunction與Sub過程一樣,F(xiàn)unction過程也是一個獨立的過程,可讀取參數(shù)、執(zhí)行一系列語句并改變其參數(shù)的值。與子過程不同,F(xiàn)unction過程可返回一個值到調(diào)用的過程。6.1Function過程事例:編寫求N!的FUNCTION過程PublicKAsLongFunctionFACT(NAsInteger)AsLongK=1ForI=1ToNK=K*INextIFACT=KEndFunctionPrivateSubCommand1_Click()DimNAsIntegerDimSAsLongN=Val(Text1.Text)S=FACT(N)Text2.Text=SEndSub2Function過程的調(diào)用格式:變量名=Function過程名([參數(shù)列表])PrivateSubCommand1_Click()DimPRAsBoolean,MAsLongM=Val(Text1.Text)PR=Prime(M)IfPR=TrueThenPicture1.PrintStr(M)+"是素數(shù)"IfPR=FalseThenPicture1.PrintStr(M)+"不是素數(shù)"EndSubOptionExplicitPrivateFunctionPrime(MAsLong)AsBooleanDimiAsIntegerPrime=True'向函數(shù)名賦值IfM>2ThenFori=2ToSqr(M)IfMModi=0ThenPrime=False:ExitForNextEndIfEndFunction注意調(diào)用格式,分析函數(shù)返回值的傳遞例編寫求1+2+3+…..+N的函數(shù)過程PublicmAsLongFunctionfuncsum(nAsInteger)AsLongm=0Fori=1Tonm=m+iNextfuncsum=mEndFunctionPrivateSubCommand2_Click()DimnAsIntegerDimsumAsLongn=Val(Text1.Text)sum=funcsum(n)Text2.Text=sumEndSub分別用SUB過程和FUNCTION過程計算

S=1!+2!+…+N!PrivateSubForm_Load()Label1.Caption="輸入一個數(shù)N"Label2.Caption="1!+2!+...+N!="Text1.Text=""Text2.Text=""Command1.Caption="計算"EndSubOptionExplicitPublicSubFACT(nAsInteger,sAsLong)DimiAsIntegers=1Fori=1Tons=s*iNextEndSub該過程可以放在標準模塊中PrivateSubCommand1_Click()DimnAsInteger,sAsLongDimiAsInteger,sumAsLongn=Val(Text1.Text)Fori=1TonCallFACT(i,s)sum=sum+sNextText2.Text=sumEndSub調(diào)用過程計算階乘累加和分別用SUB過程和FUNCTION過程計算

S=1!+2!+…+N!PublicFunctionfact1(nAsInteger)AsLongDimiAsInteger,sAsLongs=1Fori=1Tons=s*iNextfact1=sEndFunction注意函數(shù)過程如何才能實現(xiàn)返回值到調(diào)用過程PrivateSubCommand1_Click()DimnAsInteger,iAsIntegerDimxAsLongDimsumAsLongn=Val(Text1.Text)Fori=1Tonx=fact1(i)sum=sum+xNextText2.Text=sumEndSubFunctionArea(x!,y!,z!)AsSingleDimc!c=(x+y+z)/2Area=Sqrt(c*(c-x)*(c-y)*(c-z))EndFunction例6.1'在事件過程中輸入數(shù)據(jù),分別調(diào)用計算三角形面積的函數(shù)過程,然后顯示總面積SubForm_Click()Dima!,b!,c!,d!,e!,f!,g!,s1!,s2!,s3!a=InputBox("輸入a"):b=InputBox("輸入b"):c=InputBox("輸入c")d=InputBox("輸入d"):e=InputBox("輸入e"):f=InputBox("輸入f")g=InputBox("輸入g")s1=Area(a,b,c)s2=Area(c,d,e)s3=Area(e,f,g)MsgBox("多邊形面積="&s1+s2+s3)EndSub

Functiongcd%(ByValm%,ByValn%)Ifm<nThent=m:m=n:n=tr=mModnDoWhile(r<>0)m=n:n=r:r=mModnLoopgcd=nEndFunction例6.2輾轉(zhuǎn)相除法是利用以下性質(zhì)來確定兩個正整數(shù)a和b的最大公因子的:1.a÷b,令r為所得余數(shù)(0≤r<b)。若r=0,算法結(jié)束;b即為答案。2.互換:置a←b,b←r,并返回第一步。傳遞參數(shù)的方式有兩種:6.3參數(shù)的傳遞按地址傳遞參數(shù)按值傳遞參數(shù)形式參數(shù)與實際參數(shù)sub過程和function函數(shù)過程中的參數(shù)稱為形式參數(shù)(簡稱形參)在程序中調(diào)用sub過程和function函數(shù)過程時的參數(shù)稱為實際參數(shù)(簡稱實參)

1.按位置傳送

按位置傳送就是實參的次序與形參的次序應匹配,位置次序一一對應。2.傳值與傳址ByVal:可選項。表示該參數(shù)按值傳遞。此時實參的值不隨形參值的變化而變化。

ByRef:可選項。表示該參數(shù)按地址傳遞。此時實參的值隨形參值的變化而變化,ByRef是VisualBasic的默認選項。

CallArea(50,20)SubArea(Length,Width)按地址傳遞參數(shù)是把實參變量的內(nèi)存地址傳遞給形參變量。在定義過程時,用ByRef說明的形參,或缺省傳遞方式說明,都是按地址傳遞。PublicFunctionf1(ByRefxAsInteger)AsIntegerx=x*xf1=xEndFunctionPrivateSubCommand1_Click()DimnAsIntegerDimsAsIntegern=Val(Text1.Text)s=f1(n)Print"s=";sPrint"n=";nEndSub由于參數(shù)按地址傳遞,過程中對形式參數(shù)的改變將改變實際參數(shù)的值,?程序的輸出結(jié)果是????例如,編寫一個交換兩變量值的函數(shù)過程Swap:PrivateFunctionSwap(xAsInteger,yAsInteger)DimtmpAsIntegertmp=x:x=y:y=tmpEndFunction‘編寫窗體的Click事件過程,調(diào)用該函數(shù)過程:PrivateSubForm_Click()DimaAsInteger,bAsIntegera=10:b=15Print"調(diào)用交換函數(shù)過程前:a=";a,"b=";bSwapa,bPrint"調(diào)用交換函數(shù)過程后:a=";a,"b=";bEndSub分析參數(shù)傳遞方式對實際參數(shù)的影響按值傳遞參數(shù)按值傳遞參數(shù)是把實參變量的值傳遞給形參變量,實參變量的值在過程調(diào)用前后保持不變。定義過程時用ByVal關(guān)鍵字指出參數(shù)是按值來傳遞的。例如:SubFun(ByValxasInteger)……EndSubPublicFunctionf2(ByValx)x=x*xf2=xEndFunctionPrivateSubCommand1_Click()DimnAsIntegerDimsAsIntegern=Val(Text1.Text)s=f2(n)Print"s=";sPrint"n=";nEndSub由于參數(shù)按值傳遞,過程中對形式參數(shù)的改變不會改變實際參數(shù)的值,?程序的輸出結(jié)果是????例如,把上面調(diào)用交換變量值的函數(shù)過程Swap修改為按值傳遞參數(shù):PrivateFunctionSwap(ByValxAsInteger,ByValyAsInteger)DimtmpAsIntegertmp=x:x=y:y=tmpEndFunctionPrivateSubForm_Click()DimaAsInteger,bAsIntegera=10:b=15Print"調(diào)用交換函數(shù)過程前:a=";a,"b=";bSwapa,b'按值傳遞參數(shù)Print"調(diào)用交換函數(shù)過程后:a=";a,"b=";bEndSub分析參數(shù)傳值方式對實際參數(shù)的影響???顯示按值傳遞參數(shù)沒有能實現(xiàn)兩變量值的交換。本章作業(yè)分析1PublicSubmysub4(xAsInteger)x=3*x-1Ifx<5Thenx=x+9PrintxEndSubPrivateSubForm_Click()x=1mysub43+XPrintxEndSub注意調(diào)用過程是把3+X的值4傳遞給形式參數(shù)X,而非將實際參數(shù)X傳遞個形式參數(shù)X,請分析輸出結(jié)果將調(diào)用過程改為:PrivateSubForm_Click()DimxAsIntegerx=1

mysub4xPrintxEndSub分析結(jié)果???PrivateSubForm_Click()DimbAsInteger,yAsIntegerCallMy

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論