VB計算機語言基礎(chǔ)第五章過程資料_第1頁
VB計算機語言基礎(chǔ)第五章過程資料_第2頁
VB計算機語言基礎(chǔ)第五章過程資料_第3頁
VB計算機語言基礎(chǔ)第五章過程資料_第4頁
VB計算機語言基礎(chǔ)第五章過程資料_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VB計算機語言基礎(chǔ)第五章過程資料maincontents

子過程的定義與調(diào)用

函數(shù)過程的定義與調(diào)用

參數(shù)傳遞重點過程的遞歸調(diào)用難點變量的作用范圍驗證哥德巴赫猜想:任一大于2的偶數(shù)都可寫成兩個質(zhì)數(shù)之和。過程(Procedure)是一組能夠完成特定功能的代碼,以一個名字來標識,用這個名字來調(diào)用。

過程的兩個重要作用:以大化小使程序具有清晰的模塊化結(jié)構(gòu),便于多個程序員的協(xié)同工作。編寫具有通用性的獨立過程,便于重復調(diào)用,從而簡化程序。過程分為:自定義子過程、函數(shù)過程、事件過程

自定義子過程:由程序員自己編寫,用來求解特定重復任務(wù)的子過程。

子過程的調(diào)用及返回:

5.1子過程的定義與調(diào)用子過程的程序定義:Sub<子過程名>[(形式參數(shù)表)] <程序語句> [ExitSub] '需要時提前退出子過程

<程序語句>EndSub子過程的調(diào)用:使用Call關(guān)鍵字調(diào)用-Call過程名(實際參數(shù)表)例:callt(1,2)

直接調(diào)用-

過程名實際參數(shù)表例:t1,2PrivateSubHello()'定義名為Hello的無參數(shù)子過程

MsgBox"您好!五一節(jié)快樂!"EndSubPrivateSubForm_Click()

CallHello

'調(diào)用名為Hello的無參數(shù)子過程EndSub例5.1無參數(shù)的“節(jié)日問候”通用子過程PrivateSubCommand1_Click()

CallHello(Text1,Text2,Text3) 'CallHelloText1,Text2,Text3 EndSubPrivateSubHello(name1AsString,job1As String,festivalAsString)DimaAsString,bAsStringa="您好!值此"b="來臨之際,向您和您的全家致以親切的問候。"MsgBoxname1&job1&a&festival&bEndSub例5.2帶參數(shù)的“節(jié)日問候”子過程SubMain()子過程SubMain()是標準模塊中一個具有特殊作用的子過程,通常用于創(chuàng)建應(yīng)用程序的初始化條件。每個工程只能有一個SubMain()子過程。這個通用子過程可以設(shè)置在應(yīng)用程序啟動時首先被調(diào)用。SubMain()x=InputBox("請輸入密碼:","密碼") Ifx="12345"ThenForm1.ShowElseMsgBox("密碼不正確,即將關(guān)閉程序")EndSub1.函數(shù)過程與自定義子過程的區(qū)別:

函數(shù)執(zhí)行完后將得到一個返回值,而子過程只是執(zhí)行一系列動作,沒有返回值。2.函數(shù)過程的定義:

Function<函數(shù)過程名>(形式參數(shù)表)[As函數(shù)類型]

程序代碼

函數(shù)過程名=返回值表達式

……EndFunction5.2函數(shù)過程的定義與調(diào)用PrivateSubForm_Click()Dima!,b!,c!a=Val(InputBox("第一個數(shù):","輸入"))b=Val(InputBox("第二個數(shù):","輸入"))

c=MaxValue(a,b)Print"較大的數(shù)值=";cEndSubFunctionMaxValue(x!,y!)AsSingle

MaxValue=IIf(x>y,x,y)EndFunction例5.3根據(jù)鍵盤輸入的兩個數(shù)值,調(diào)用MaxValue函數(shù)求得其中較大的一個調(diào)用函數(shù)過程時應(yīng)注意:函數(shù)過程的調(diào)用方式與標準函數(shù)相同,作為表達式中的一個部分被引用。引用時參數(shù)表必須放在括號內(nèi)所使用的參數(shù)的個數(shù)、位置和類型必須與函數(shù)中的聲明一致。形式參數(shù)

定義子過程和函數(shù)過程時,通常都會包括須從外部獲取的參數(shù),這些參數(shù)也稱為形式參數(shù)。在過程被調(diào)用前,形式參數(shù)既不占有實際的存儲空間,也沒有值。實際參數(shù)

在調(diào)用子過程或函數(shù)過程時,必須把要處理的數(shù)據(jù)提供給被調(diào)用的過程。這些數(shù)據(jù)稱為實際參數(shù),將實際參數(shù)傳遞給形式參數(shù),由被調(diào)用的過程來處理。

CallPost(6,8)'

實際參數(shù)

SubPost(xAsSingle,yAsSingle)'形式參數(shù)5.3參數(shù)傳遞參數(shù)的傳遞方式按地址傳遞(ByRef)

這是默認的參數(shù)傳遞方式。在被調(diào)用過程中對形式參數(shù)所做的任何修改,也就是對實際參數(shù)的修改。按值傳遞(ByVal) 如果在過程定義時,形式參數(shù)前面用關(guān)鍵字ByVal界定,就是按值傳遞方式。被調(diào)用過程運行期間形式參數(shù)的任何變化,對實際參數(shù)不會產(chǎn)生任何影響。PrivateSubForm_Click()DimaAsSingle,bAsSingle,cAsSinglea=InputBox("第一個直角邊的值:")b=InputBox("第二個直角邊的值:")

CallHypotenuse(a,b)Print"兩直角邊分別為:";a;bEndSubPrivateSubHypotenuse(x!,y!)DimcAsSinglex=x^2:y=y^2c=Sqr(x+y)Print"直角三角形斜邊的值=";c EndSub例5.4計算直角三角形的斜邊按地址傳遞(ByRef)PrivateSubForm_Click()DimaAsSingle,bAsSingle,cAsSinglea=InputBox("第一個直角邊的值:")b=InputBox("第二個直角邊的值:")

CallHypotenuse(a,b)Print"兩直角邊分別為:";a;bEndSubPrivateSubHypotenuse(ByValx!,ByValy!)DimcAsSinglex=x^2:y=y^2c=Sqr(x+y)Print"直角三角形斜邊的值=";c EndSub例5.4計算直角三角形的斜邊按值傳遞(ByVal)數(shù)組參數(shù)只能按地址傳遞,而不能按值傳遞。在過程定義時,若以數(shù)組作為過程的參數(shù),則形式參數(shù)表中的數(shù)組名后要有一對空的圓括號表示。例:PrivateSubsum(x()AsInteger)

而在過程調(diào)用時,實際參數(shù)表中的數(shù)組可以只用數(shù)組名表示,圓括號可以省略。數(shù)組作為參數(shù)傳遞PrivateSubForm_Click()Dima%(9),s%Print"數(shù)組各元素的值為:"Fori=0To9a(i)=Int(Rnd*10)Printa(i);NextiPrintPrint“總和為:";sum(a)EndSub例5.5利用sum子過程求數(shù)組各元素的和Functionsum%(x%())Fori=LBound(x)ToUBound(x)sum=sum+x(i)NextiEndFunction驗證哥德巴赫猜想:任一大于2的偶數(shù)都可寫成兩個質(zhì)數(shù)之和。實例練習分析:(1)取出從起始數(shù)至終止數(shù)的每個數(shù)i(2)對每一個i,取2至i/2的每一個數(shù)j,分別判斷j和i-j是否同時為素數(shù)(3)如果同為素數(shù),則輸出主過程:PrivateSubCommand1_Click()Dimi%,j%a=Val(Text1):b=Val(Text2)IfaMod2<>0Thena=a+1Fori=aTobStep2 …NextiEndSubForj=2Toi/2IfPrimeMagic(j)AndPrimeMagic(i-j)ThenPicture1.Printi&"="&j&"+"&i-j&"";ExitForEndIfNextj函數(shù)過程:PublicFunctionPrimeMagic(a%)AsBooleanDimtAsBooleant=True ‘定義并豎起標旗Fori=2ToSqr(a)IfaModi=0Then ‘如果有一個i能整除at=False ‘則倒下標旗,表示a不是一個素數(shù)ExitForEndIfNextiIft=TrueThen ‘根據(jù)標旗,返回True或FalsePrimeMagic=TrueElsePrimeMagic=FalseEndIfEndFunction5.4過程的遞歸調(diào)用1)遞歸的概念在過程自身結(jié)構(gòu)內(nèi)部來調(diào)用自身,稱為遞歸調(diào)用2)遞歸的分類直接遞歸:一個過程在執(zhí)行時直接調(diào)用過程本身間接遞歸:過程A在執(zhí)行時調(diào)用過程B,而過程B又調(diào)用過程A例:有如下子過程Sub1SubSub1()

……EndSubSubSub1()…Y=Sub1(n)…EndSub進行如下形式的調(diào)用SubForm_Click()…CallSub1…EndSubSubSub1()…Y=Sub1(n)…EndSub①②③④⑤⑥⑦⑧⑨——過程的嵌套調(diào)用例

用遞歸的方法計算Fac(n)=n!分析:根據(jù)階乘的定義改寫成遞歸的形式:

n!=n*(n-1)!(n-1)!=(n-1)*(n-2)!

……1!=1由此得到遞歸公式如下:

注意:遞歸的結(jié)束條件為n=0或1時,n!=1主調(diào)過程OptionExplicitPrivateSubForm_Click()DimF%,x%x=InputBox("")F=Fac(x)Printx;"!=";FEndSub函數(shù)過程FunctionFac%(nAsInteger)Ifn=0Orn=1ThenFac=1ElseFac=n*Fac(n-1) EndIfEndFunctionxn①Fac(4)=4*Fac(3)②Fac(3)=3*Fac(2)

③Fac(2)=2*Fac(1)

Fac(1)=1

Fac(2)=1*2

Fac(3)=1*2*3

Fac(4)=1*2*3*4

遞推回歸函數(shù)過程FunctionFac%(n%)Ifn=0Orn=1ThenFac=1ElseFac=n*Fac(n-1) EndIfEndFunction思考:若缺少該語句,程序運行結(jié)果將如何?

使用遞歸算法必須要注意以下兩點:設(shè)定遞歸結(jié)束條件及結(jié)束時的值能用遞歸形式表示,并且遞歸向結(jié)束條件發(fā)展運行下面的程序,當單擊窗體之后,窗體上顯示內(nèi)容是什么?PrivateSubForm_Click()Test2EndSubPrivateSubTest(x%)x=x*2+1Ifx<6ThenCallTest(x)EndIfx=x*2+1Me.PrintxEndSub①第一次調(diào)用2xx=2*2+1=5<6CallTest(x)②

第二次調(diào)用5xx=5*2+1=11>6x=11*2+1=23Printx23x=23*2+1=47Printx47斐波那契數(shù)列問題“如果1對兔子每月能繁殖1對小兔子,而每對小兔在它出生后的第3個月里,又能繁殖1對小兔子,假定在不發(fā)生死亡的情況下,由1對初生的兔子開始,1年后能繁殖成多少對兔子?”函數(shù)表達式:

斐波那契數(shù)列問題求解PrivateSubForm_Click()Printfibonacci(12)EndSubFunctionfibonacci(xasinteger)Ifx=1orx=2then

fib=1Else

fibonacci=fibonacci(x-1)+fibonacci(x-2)EndIfEndFunctionDim語句——自動變量作用范圍取決于其聲明的位置Static語句——靜態(tài)變量作用范圍只在于它定義的過程中,但過程結(jié)束后,變量值保存Private語句——模塊級變量只能在窗體/模塊的通用聲明段聲明(過程外),作用范圍是窗體/模塊中的所有過程Public語句——全局變量只能在窗體/模塊的通用聲明段聲明(過程外),變量有效范圍從聲明點算起,生存期是整個應(yīng)用程序5.5變量的作用范圍VisualBasic應(yīng)用程序的模塊化結(jié)構(gòu)應(yīng)用程序工程文件(.vbp)窗體模塊(.frm)文件類模塊(.cls)文件標準模塊(.bas)文件事件過程(sub)子過程(sub)函數(shù)過程(Function)子過程(sub)函數(shù)過程(Function)作用范圍局部變量窗體/模塊級變量全局變量窗體標準模塊聲明方式DimStaticDimPrivatePublic聲明位置在過程中窗體/模塊的通用聲明段窗體/模塊的通用聲明段能否被本模塊的其他過程存取不能能能能否被其他模塊存取不能不能能,但在變量名前加窗體名能DimxAsInteger,yAsIntegerPrivateSubCommand1_Click()DimResultAsSinglex=10:Result=x-yPrintResultEndSubPrivateSubCommand2_Click()DimResultAsSingle y=20:Result=x+y PrintResultEndSub思考:先單擊Command1,再單擊Command2,輸出?分析:①先單擊Command1X=10Result=10-0=10②再單擊Command2,

溫馨提示

  • 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

提交評論