c語言程序設(shè)計第6章(000002)課件_第1頁
c語言程序設(shè)計第6章(000002)課件_第2頁
c語言程序設(shè)計第6章(000002)課件_第3頁
c語言程序設(shè)計第6章(000002)課件_第4頁
c語言程序設(shè)計第6章(000002)課件_第5頁
已閱讀5頁,還剩93頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本章要點:子過程(Sub)的定義與調(diào)用函數(shù)(Function)過程的定義與調(diào)用變量、過程的作用域參數(shù)的傳遞過程的嵌套與遞歸本章要點:子過程(Sub)的定義與調(diào)用函數(shù)(Function16.1子過程(Sub)的定義與調(diào)用6.1.1子過程的定義[Private|定義子過程的一般格式如下:Public|Friend][Static]Sub過程名([參數(shù)列表])語句塊[Exitsub][語句塊]EndSub6.1子過程(Sub)的定義與調(diào)用6.1.1子過程的2說明:(1)子過程以Sub開頭,以EndSub結(jié)束,而在Sub和EndSub之間的語句塊,稱為“過程體”或“子過程體”,它決定著子過程的功能;(2)Private表示只有在包含其聲明的模塊中的其他過程可以訪問該Sub過程;(3)Public表示Sub過程是公有過程,可以在程序的任何地方調(diào)用。缺省[Private|Public]時,系統(tǒng)默認為

Public;(4)Friend只能在類模塊中使用;6.1子過程的定義與調(diào)用說明:6.1子過程的定義與調(diào)用3(5)Static表示在調(diào)用期間保留Sub過程的局部變量的值。Static屬性對在Sub外聲明的變量不會產(chǎn)生影響,即使過程中也使用了這些變量。(6)過程名的命名規(guī)則與變量命名規(guī)則相同,在同一個模塊中,同一符號名不得既用作Sub過程名,又用作Function過程名。(7)參數(shù)列表中的參數(shù)稱為形式參數(shù)(簡稱形參),它可以是變量名或數(shù)組名,也可以是簡單變量,但不能是常量、數(shù)組元素、表達式;若有多個參數(shù)時,各參數(shù)之間用逗號分隔,形參沒有具體的值。6.1子過程的定義與調(diào)用(5)Static表示在調(diào)用期間保留Sub過程的局部變量的值4形式參數(shù)格式為:[ByVal]變量名[()][As數(shù)據(jù)類型](8)ExitSub語句可以提前結(jié)束過程調(diào)用,使執(zhí)行立即從一個Sub過程中退出。(9)Sub過程不能嵌套定義,但可以嵌套調(diào)用。6.1子過程的定義與調(diào)用形式參數(shù)格式為:6.1子過程的定義與調(diào)用56.1.2建立Sub過程建立一個子過程有如下兩種方法。1.利用菜單“工具”|“添加過程”命令定義具體方法如下:(1)進入代碼窗口,在左側(cè)顯示對象名的下拉框中選擇“通用”,在右側(cè)顯示過程的下拉框中選擇“聲明”,然后鍵入Sub及子程序名。(2)按Enter鍵后,VisualBasic系統(tǒng)會自動加上EndSub與子程序名后的一對括號,此時便可輸入子程序語句。6.1子過程的定義與調(diào)用6.1.2建立Sub過程6.1子過程的定義與調(diào)用62.利用代碼窗口直接定義6.1子過程的定義與調(diào)用2.利用代碼窗口直接定義6.1子過程的定義與調(diào)用7【例6-2】打印一個平行四邊形。PrivateSubtriangle(StrAsString,nAsInteger)Dimi%,j%Fori=1Tonprintspc(6-i);Forj=1TonPrintSpc(1);Str;NextjPrintNextiEndSub6.1子過程的定義與調(diào)用【例6-2】打印一個平行四邊形。6.1子過程的定義86.1.3調(diào)用Sub過程1.用Call語句調(diào)用Sub過程語法:Call過程名(實際參數(shù)表)說明:(1)實際參數(shù)的個數(shù)、類型和順序,應(yīng)該與被調(diào)用過程的形式參數(shù)相匹配,有多個參數(shù)時,用逗號分隔。(2)如果子程序不帶參數(shù),Call語句中子程序名后的一對括號可以省去,例如:

CallAdd1這是允許的。6.1子過程的定義與調(diào)用6.1.3調(diào)用Sub過程6.1子過程的定義與調(diào)用9【例6-3】編寫一個名為MyDay過程輸入,用戶輸入一個0~6的數(shù)字,在窗體上顯示對應(yīng)的星期。程序運行效果如圖6-1-3所示。6.1子過程的定義與調(diào)用查看代碼【例6-3】編寫一個名為MyDay過程輸入,用戶輸入一個10【例6-4】利用過程編寫求任意三角形面積的程序。(1)界面設(shè)計6.1子過程的定義與調(diào)用【例6-4】利用過程編寫求任意三角形面積的程序。6.111PrivateSubarea(X!,Y!,z!,s!)Dimp!p=(X+Y+z)/2s=Sqr(p*(p-X)*(p-Y)*(p-z))EndSub6.1子過程的定義與調(diào)用PrivateSubcmdJs_Click()Dima!,b!,c!,w!a=Val(txtA.Text)b=Val(txtB.Text)c=Val(txtC.Text)Ifa>b+cOrb>a+cOrc>a+bThenMsgBox"輸入的三條邊不能構(gòu)成一個三角形!"ElseCallarea(a,b,c,w)txtMj.Text=Str(w)EndIfEndSubPrivateSubarea(X!,Y!,z!,s122.把過程名作為一個語句來用語法:

過程名

[實參1[,實參2……]]它與Call語句的不同點是:去掉了Call關(guān)鍵字和實參列表的括號。如上例中可以改成:areaa,b,c,w6.1子過程的定義與調(diào)用2.把過程名作為一個語句來用6.1子過程的定義與調(diào)用136.2.1函數(shù)過程的定義定義函數(shù)過程的語法格式如下:[Public|Private][Static]Function函數(shù)名([<參數(shù)列表>])[As<類型>] <局部變量或常數(shù)定義> <語句塊> [函數(shù)名=返回值] [ExitFunction] <語句塊> [函數(shù)名=返回值]EndFunction6.2函數(shù)過程的定義與調(diào)用6.2.1函數(shù)過程的定義6.2函數(shù)過程的定義與調(diào)用14說明:(1)函數(shù)過程以Function開頭,以EndFunction結(jié)束,兩者之間是描述函數(shù)操作的語句塊為“函數(shù)體”。(2)函數(shù)名命名規(guī)則與變量名規(guī)則相同。但不能與系統(tǒng)的內(nèi)部函數(shù)或其他通用子過程同名,也不能與已定義的全局變量和本模塊中模塊級變量同名。(3)在函數(shù)體內(nèi),函數(shù)名可以當變量使用,函數(shù)的返回值就是通過對函數(shù)名的賦值語句來實現(xiàn)的。6.2函數(shù)過程的定義與調(diào)用說明:6.2函數(shù)過程的定義與調(diào)用15(4)如果函數(shù)體內(nèi)沒有給函數(shù)名賦值,則返回對應(yīng)類型的缺省值,數(shù)值函數(shù)返回0,字符串函數(shù)返回空字符串,變體型函數(shù)返回Empty。(5)As類型:是指函數(shù)返回值的類型,若省略,則函數(shù)返回變體類型值(Variant)。

(6)ExitFunction:表示退出函數(shù)過程,常常是與選擇結(jié)構(gòu)(If或SelectCase語句)聯(lián)用,即當滿足一定條件時,退出函數(shù)過程。(7)形參數(shù)列表:形參的定義與子過程完全相同。(8)函數(shù)過程內(nèi)部不得再定義Sub過程或Function過程。6.2函數(shù)過程的定義與調(diào)用(4)如果函數(shù)體內(nèi)沒有給函數(shù)名賦值,則返回對應(yīng)類型的缺省值,166.2.2建立函數(shù)過程1.用代碼窗口直接定義其步驟如下:(1)打開代碼窗口,在“對象”列表框中選擇“通用”選項。(2)在“過程”列表框中選擇“聲明”選項。(3)輸入Function和函數(shù)名。(4)按Enter鍵后,VisualBasic系統(tǒng)會自動加上EndFunction與函數(shù)名后的一對括號,此時便可輸入函數(shù)語句。6.2函數(shù)過程的定義與調(diào)用6.2.2建立函數(shù)過程6.2函數(shù)過程的定義與調(diào)用172.利用菜單“工具”|“添加過程”命令定義其步驟如下:(1)打開代碼窗口,選擇菜單“工具”|“添加過程”欄命令。打開“添加過程”對話框。(2)在“名稱”文本框中輸入函數(shù)名;在“類型”欄中選取“函數(shù)”定義函數(shù)過程;在“范圍”欄中若選取“公有的”則定義一個公共級全局函數(shù);若選取“私有的”,則定義一個標準模塊板/窗體板的局部函數(shù)。(3)單擊“確定”按鈕后,系統(tǒng)自動建立一個函數(shù)模板,之后就可以在其中編寫函數(shù)代碼。6.2函數(shù)過程的定義與調(diào)用2.利用菜單“工具”|“添加過程”命令定義6.2函數(shù)186.2.3調(diào)用函數(shù)過程函數(shù)過程返回一個值,這是與子過程的主要區(qū)別,其調(diào)用方式與標準函數(shù)調(diào)用一樣,作為表達式中的一個部分被引用。語法:函數(shù)名([實參列表])注意:必須給參數(shù)加上括號,即使沒有參數(shù)也不可省略括號;實際參數(shù)和形式參數(shù)對應(yīng)關(guān)系的要求與子過程相同。6.2函數(shù)過程的定義與調(diào)用6.2.3調(diào)用函數(shù)過程6.2函數(shù)過程的定義與調(diào)用19【例6-5】編寫一個程序,對輸入的成績進行評定,要求程序的評定在函數(shù)中完成,評定結(jié)果(字符串)為函數(shù)的返回值。6.2函數(shù)過程的定義與調(diào)用【例6-5】編寫一個程序,對輸入的成績進行評定,要求程序的20PrivateFunctionAppraise(ByValscore%)AsStringSelectCasescoreCase0To59Appraise="重修"Case60To100Appraise="通過"CaseElseAppraise="數(shù)據(jù)超出范圍!"EndSelectEndFunctionPrivateSubCommand1_Click()Text2=Appraise(Val(Text1))EndSub6.2函數(shù)過程的定義與調(diào)用PrivateFunctionAppraise(ByVa21【例6-6】編寫計算階乘的函數(shù)過程,當用戶單擊窗體時,利用下列近似公式計算

(直到最后一項小于10-7為止)。6.2函數(shù)過程的定義與調(diào)用PrivateSubForm_Click()Dimn!s=1:n=1:t=1Dot=1/Fact(n)s=s+tn=n+1LoopWhilet>=10^-7PrintsEndSub調(diào)用函數(shù)Fact的程序代碼如下:PrivateFunctionFact(x!)Dimp!p=1Forn=1Toxp=p*nNextFact=pEndFunction【例6-6】編寫計算階乘的函數(shù)過程,當用戶單擊窗體時,利226.3.1模塊概述VisualBasic應(yīng)用程序通常由3種模塊組成,即窗體模塊(Form)、標準模塊(Module)和類模塊(Class)。6.3變量、過程的作用域應(yīng)用程序窗體模塊標準模塊類模塊聲明部分通用過程事件過程全局聲明部分模塊層聲明部分通用過程模塊層聲明部分通用過程6.3.1模塊概述6.3變量、過程的作用域應(yīng)用程序窗23(1)窗體模塊窗體模塊是大多數(shù)

VisualBasic應(yīng)用程序的基礎(chǔ)。窗體模塊可以包含處理事件的過程、通用過程以及變量、常數(shù)、類型和外部過程的窗體級聲明。如果要在文本編輯器中觀察窗體模塊,則還會看到窗體及其控件的描述,包括它們的屬性設(shè)置值。寫入窗體模塊的代碼是該窗體所屬的具體應(yīng)用程序?qū)S玫?;它也可以引用該?yīng)用程序內(nèi)的其他窗體或?qū)ο蟆?.3變量、過程的作用域(1)窗體模塊6.3變量、過程的作用域24(2)標準模塊標準模塊(文件擴展名為.BAS)是應(yīng)用程序內(nèi)其他模塊訪問的過程和聲明的容器。它們可以包含變量、常數(shù)、類型、外部過程和全局過程的全局(在整個應(yīng)用程序范圍內(nèi)有效的)聲明或模塊級聲明。寫入標準模塊的代碼不必綁在特定的應(yīng)用程序上;如果不小心用名稱引用窗體和控件,則在許多不同的應(yīng)用程序中可以重用標準模塊。6.3變量、過程的作用域(2)標準模塊6.3變量、過程的作用域25(3)類模塊在VisualBasic中類模塊(文件擴展名為.CLS)是面向?qū)ο缶幊痰幕A(chǔ)??稍陬惸K中編寫代碼建立新對象。這些新對象可以包含自定義的屬性和方法。實際上,窗體正是這樣一種類模塊,在其上可安放控件、可顯示窗體窗口。6.3變量、過程的作用域(3)類模塊6.3變量、過程的作用域266.3.2變量的作用域1.局部變量

在過程內(nèi)部(如Command1_Click)使用Dim或者Static關(guān)鍵字來聲明的變量,只在聲明它們的過程中才能被訪問或改變該變量的值,別的過程不可訪問。所以可以在不同的過程中聲明相同名字的局部變量而互不影響。6.3變量、過程的作用域6.3.2變量的作用域6.3變量、過程的作用域27【例6-7】編寫一個程序,用來演示局部變量的作用范圍和生存期。程序界面由1個窗體、2個文本框、2個命令按鈕組成。6.3變量、過程的作用域【例6-7】編寫一個程序,用來演示局部變量的作用范圍和生存28PrivateSubcmdDim_Click()DimnAsIntegern=n+1txtDim.Text=nEndSubPrivateSubcmdSta_Click()StaticnAsIntegern=n+1txtSta.Text=nEndSub6.3變量、過程的作用域PrivateSubcmdDim_Click()6.3292.窗體/模塊級變量在“通用聲明”段中用Dim語句或用Private語句聲明的變量,可被本窗體/模塊的任何過程訪問。但其他模塊卻不能訪問該變量。聲明窗體/模塊級變量要先進入程序代碼窗口,單擊左側(cè)的下拉框并選擇“通用”,再單擊右側(cè)下拉框并選擇“聲明”。例如,在“通用聲明”段聲明如下變量:PrivatesAsStringDimaAsInteger,bAsSingle6.3變量、過程的作用域2.窗體/模塊級變量6.3變量、過程的作用域303.全局變量

全局變量也稱工程級變量,在窗體模塊或標準模塊的頂部的“通用”聲明段用Public或Global關(guān)鍵字聲明,它的作用范圍是整個應(yīng)用程序,即可被本應(yīng)用程序的任何過程或函數(shù)訪問。例如:PublicaAsIntegerGlobalbAssingle6.3變量、過程的作用域3.全局變量6.3變量、過程的作用域31【例6-8】編寫一個應(yīng)用程序,其由1個窗體模塊和1個標準模塊組成,界面由1個窗體及其中的3個文本框、3個標簽和2個命令按鈕組成。6.3變量、過程的作用域查看代碼【例6-8】編寫一個應(yīng)用程序,其由1個窗體模塊和1個標準模326.3.3過程的作用域◆在窗體或模塊中用Private定義的過程為窗體或模塊級過程,只能在定義它的窗體或模塊中調(diào)用。◆在窗體中用Public定義的過程,可以在其他窗體中調(diào)用,但必須在過程名前加上自定義過程所在的窗體名?!粼谀K中用Public定義的過程為全局級過程,可在任意窗體中調(diào)用。6.3變量、過程的作用域6.3.3過程的作用域6.3變量、過程的作用域336.4.1形參與實參的概念形式參數(shù)(簡稱形參)指出現(xiàn)在Sub和Function過程的定義中出現(xiàn)的變量名、數(shù)組名,過程被調(diào)用前,沒有分配內(nèi)存,其作用是說明自變量的類型和形態(tài)以及在過程中的角色。形參可以是:(1)除定長字符串變量之外的合法變量名;(2)后面跟()括號的數(shù)組名。6.4參數(shù)的傳遞6.4.1形參與實參的概念6.4參數(shù)的傳遞34例如定義了下面一個過程:SubSwap2(x%,y%,str$) …EndSub可以用下面的語句調(diào)用該過程:CallSwap2(a%,y%,"Student")6.4參數(shù)的傳遞過程定義:SubSwap2(x%,y%,str$)過程調(diào)用:CallSwap2(a%,y%,"Student")例如定義了下面一個過程:6.4參數(shù)的傳遞過程定義:Sub356.4.2按值傳遞參數(shù)按值傳遞參數(shù)(PassedByValue)時,是將實參變量的值復制一個到臨時存儲單元中,如果在調(diào)用過程中改變了形參的值,不會影響實參變量本身,即實參變量保持調(diào)用前的值不變.6.4參數(shù)的傳遞88實參x形參y在VisualBasic中,傳值方式通過關(guān)鍵字ByVal來實現(xiàn)。也就是說,在定義通用過程時,如果形參前面有關(guān)鍵字ByVal,則該參數(shù)用傳值方式傳遞。6.4.2按值傳遞參數(shù)6.4參數(shù)的傳遞88實參x形參36【例6-9】編寫一個程序,實現(xiàn)兩個整數(shù)的相加。SubAddTest(ByValm%,ByValn%) Dimsum% sum=m+n print"a+b=";sumEndSubPrivateSubCommand1_Click() a%=10:b%=20 CallAddTest(a,b)'傳值 Print"a=";a,"b=";bEndSub6.4參數(shù)的傳遞【例6-9】編寫一個程序,實現(xiàn)兩個整數(shù)的相加。6.4參376.4.3按地址傳遞參數(shù)

缺省或加“ByRef”關(guān)鍵字的為按地址傳遞參數(shù)。按地址傳遞參數(shù)時,把實參變量的地址傳送給被調(diào)用過程,形參和實參共用內(nèi)存的同一地址。在被調(diào)用過程中,形參的值一旦改變,相應(yīng)實參的值也跟著改變。這意味著實參與形參共用同一個內(nèi)存單元。6.4參數(shù)的傳遞8實參x形參y6.4.3按地址傳遞參數(shù)6.4參數(shù)的傳遞8實參x形參38【例6-10】通過下面程序觀察值傳遞和地址傳遞方式的區(qū)別。【例6-11】閱讀程序并寫出程序的運行結(jié)果。6.4參數(shù)的傳遞查看代碼查看代碼【例6-10】通過下面程序觀察值傳遞和地址傳遞方式的區(qū)別。396.4參數(shù)的傳遞實參x 實參y 實參y形參x 形參y 形參z3412420x=3*zy=2*z8z=x+y6.4參數(shù)的傳遞實參x 實參y 實參y形參x 形參406.4.4數(shù)組參數(shù)VB允許把數(shù)組作為形參出現(xiàn)在形參表中,語法為:形參數(shù)組名()[As數(shù)據(jù)類型]在傳送數(shù)組時,除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點:(1)形參數(shù)組只能按地址傳遞參數(shù),對應(yīng)的實參也必須是數(shù)組,且數(shù)據(jù)類型相同。(2)把一個數(shù)組的全部元素傳送給一個過程,應(yīng)將數(shù)組名分別寫入形參列表中,并略去數(shù)組的上下界,但括號不能省略。6.4參數(shù)的傳遞6.4.4數(shù)組參數(shù)6.4參數(shù)的傳遞41(3)在過程中不可以用Dim語句對形參數(shù)組進行聲明,否則會產(chǎn)生“重復聲明”的錯誤。但在使用動態(tài)數(shù)組時,可以用ReDim語句改變形參數(shù)組的維界,重新定義數(shù)組的大小。(4)被調(diào)過程可通過Lbound和Ubound函數(shù)確定實參數(shù)組的上、下界。(5)實參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實參數(shù)組共用一段內(nèi)存單元。(6)調(diào)用時形參數(shù)組m和實參數(shù)組n進行形實結(jié)合,它們共用一段內(nèi)存單元。6.4參數(shù)的傳遞(3)在過程中不可以用Dim語句對形參數(shù)組進行聲明,否則會產(chǎn)42【例6-12】編寫一個程序,用數(shù)組作參數(shù),計算方陣對角元素的和。它由一個窗體模塊構(gòu)成,其中包括一個自定義過程和一個命令按鈕的單擊事件過程。6.4參數(shù)的傳遞查看代碼【例6-12】編寫一個程序,用數(shù)組作參數(shù),計算方陣對角元素436.4.5對象參數(shù)在VB中除了用變量作參數(shù)外,還允許用窗體或控件作參數(shù),即允許用對象作參數(shù)。在某些情況下,使用對象參數(shù)可以簡化代碼,提高程序效率。用對象作為參數(shù)和用其他數(shù)據(jù)類型作為參數(shù)一樣,唯一的差別就是在形參表中,把形參變量的類型聲明為Control或Form。6.4參數(shù)的傳遞6.4.5對象參數(shù)6.4參數(shù)的傳遞44Functionf2(x)……f2=f3(x)+3……EndSub6.5.1過程的嵌套在程序中調(diào)用一子過程,而在子過程中又調(diào)用另外的子過程,這種程序結(jié)構(gòu)稱為過程的嵌套。6.5過程的嵌套與遞歸Subf1(x)……x=f2(xx)*3………EndSubSubCmdOk_Click()……Callf1(y)……EndSubFunctionf3(x)……f3=x*x……EndSubFunctionf2(x)6.5.1過程的嵌套6.5456.5.2過程的遞歸用自身的結(jié)構(gòu)來描述自身稱為遞歸,即一個過程調(diào)用過程本身,在遞歸調(diào)用中,一個過程執(zhí)行的某一步要用到它自身的上一步或上幾步的結(jié)果。例如:最典型的例子是對階乘運算可作如下定義:n!=n*(n-1)!(n-1)!=(n-1)*(n-2)!6.5過程的嵌套與遞歸6.5.2過程的遞歸6.5過程的嵌套與遞歸46【例6-13】編一個計算n!(n>1)的遞歸調(diào)用的函數(shù)。6.5過程的嵌套與遞歸fac(5)=5*fac(4)fac(4)=4*fac(3)fac(3)=3*fac(2)fac(2)=2*fac(1)fac(1)=1fac(2)=2*1fac(3)=3*2fac(4)=4*6fac(5)=5*24查看代碼【例6-13】編一個計算n!(n>1)的遞歸調(diào)用的函數(shù)。47【例6-14】編寫一個程序,求契比雪夫多項式。6.5過程的嵌套與遞歸查看代碼【例6-14】編寫一個程序,求契比雪夫多項式。6.5過48本章內(nèi)容結(jié)束,謝謝觀看本章內(nèi)容結(jié)束,謝謝觀看49本章要點:子過程(Sub)的定義與調(diào)用函數(shù)(Function)過程的定義與調(diào)用變量、過程的作用域參數(shù)的傳遞過程的嵌套與遞歸本章要點:子過程(Sub)的定義與調(diào)用函數(shù)(Function506.1子過程(Sub)的定義與調(diào)用6.1.1子過程的定義[Private|定義子過程的一般格式如下:Public|Friend][Static]Sub過程名([參數(shù)列表])語句塊[Exitsub][語句塊]EndSub6.1子過程(Sub)的定義與調(diào)用6.1.1子過程的51說明:(1)子過程以Sub開頭,以EndSub結(jié)束,而在Sub和EndSub之間的語句塊,稱為“過程體”或“子過程體”,它決定著子過程的功能;(2)Private表示只有在包含其聲明的模塊中的其他過程可以訪問該Sub過程;(3)Public表示Sub過程是公有過程,可以在程序的任何地方調(diào)用。缺省[Private|Public]時,系統(tǒng)默認為

Public;(4)Friend只能在類模塊中使用;6.1子過程的定義與調(diào)用說明:6.1子過程的定義與調(diào)用52(5)Static表示在調(diào)用期間保留Sub過程的局部變量的值。Static屬性對在Sub外聲明的變量不會產(chǎn)生影響,即使過程中也使用了這些變量。(6)過程名的命名規(guī)則與變量命名規(guī)則相同,在同一個模塊中,同一符號名不得既用作Sub過程名,又用作Function過程名。(7)參數(shù)列表中的參數(shù)稱為形式參數(shù)(簡稱形參),它可以是變量名或數(shù)組名,也可以是簡單變量,但不能是常量、數(shù)組元素、表達式;若有多個參數(shù)時,各參數(shù)之間用逗號分隔,形參沒有具體的值。6.1子過程的定義與調(diào)用(5)Static表示在調(diào)用期間保留Sub過程的局部變量的值53形式參數(shù)格式為:[ByVal]變量名[()][As數(shù)據(jù)類型](8)ExitSub語句可以提前結(jié)束過程調(diào)用,使執(zhí)行立即從一個Sub過程中退出。(9)Sub過程不能嵌套定義,但可以嵌套調(diào)用。6.1子過程的定義與調(diào)用形式參數(shù)格式為:6.1子過程的定義與調(diào)用546.1.2建立Sub過程建立一個子過程有如下兩種方法。1.利用菜單“工具”|“添加過程”命令定義具體方法如下:(1)進入代碼窗口,在左側(cè)顯示對象名的下拉框中選擇“通用”,在右側(cè)顯示過程的下拉框中選擇“聲明”,然后鍵入Sub及子程序名。(2)按Enter鍵后,VisualBasic系統(tǒng)會自動加上EndSub與子程序名后的一對括號,此時便可輸入子程序語句。6.1子過程的定義與調(diào)用6.1.2建立Sub過程6.1子過程的定義與調(diào)用552.利用代碼窗口直接定義6.1子過程的定義與調(diào)用2.利用代碼窗口直接定義6.1子過程的定義與調(diào)用56【例6-2】打印一個平行四邊形。PrivateSubtriangle(StrAsString,nAsInteger)Dimi%,j%Fori=1Tonprintspc(6-i);Forj=1TonPrintSpc(1);Str;NextjPrintNextiEndSub6.1子過程的定義與調(diào)用【例6-2】打印一個平行四邊形。6.1子過程的定義576.1.3調(diào)用Sub過程1.用Call語句調(diào)用Sub過程語法:Call過程名(實際參數(shù)表)說明:(1)實際參數(shù)的個數(shù)、類型和順序,應(yīng)該與被調(diào)用過程的形式參數(shù)相匹配,有多個參數(shù)時,用逗號分隔。(2)如果子程序不帶參數(shù),Call語句中子程序名后的一對括號可以省去,例如:

CallAdd1這是允許的。6.1子過程的定義與調(diào)用6.1.3調(diào)用Sub過程6.1子過程的定義與調(diào)用58【例6-3】編寫一個名為MyDay過程輸入,用戶輸入一個0~6的數(shù)字,在窗體上顯示對應(yīng)的星期。程序運行效果如圖6-1-3所示。6.1子過程的定義與調(diào)用查看代碼【例6-3】編寫一個名為MyDay過程輸入,用戶輸入一個59【例6-4】利用過程編寫求任意三角形面積的程序。(1)界面設(shè)計6.1子過程的定義與調(diào)用【例6-4】利用過程編寫求任意三角形面積的程序。6.160PrivateSubarea(X!,Y!,z!,s!)Dimp!p=(X+Y+z)/2s=Sqr(p*(p-X)*(p-Y)*(p-z))EndSub6.1子過程的定義與調(diào)用PrivateSubcmdJs_Click()Dima!,b!,c!,w!a=Val(txtA.Text)b=Val(txtB.Text)c=Val(txtC.Text)Ifa>b+cOrb>a+cOrc>a+bThenMsgBox"輸入的三條邊不能構(gòu)成一個三角形!"ElseCallarea(a,b,c,w)txtMj.Text=Str(w)EndIfEndSubPrivateSubarea(X!,Y!,z!,s612.把過程名作為一個語句來用語法:

過程名

[實參1[,實參2……]]它與Call語句的不同點是:去掉了Call關(guān)鍵字和實參列表的括號。如上例中可以改成:areaa,b,c,w6.1子過程的定義與調(diào)用2.把過程名作為一個語句來用6.1子過程的定義與調(diào)用626.2.1函數(shù)過程的定義定義函數(shù)過程的語法格式如下:[Public|Private][Static]Function函數(shù)名([<參數(shù)列表>])[As<類型>] <局部變量或常數(shù)定義> <語句塊> [函數(shù)名=返回值] [ExitFunction] <語句塊> [函數(shù)名=返回值]EndFunction6.2函數(shù)過程的定義與調(diào)用6.2.1函數(shù)過程的定義6.2函數(shù)過程的定義與調(diào)用63說明:(1)函數(shù)過程以Function開頭,以EndFunction結(jié)束,兩者之間是描述函數(shù)操作的語句塊為“函數(shù)體”。(2)函數(shù)名命名規(guī)則與變量名規(guī)則相同。但不能與系統(tǒng)的內(nèi)部函數(shù)或其他通用子過程同名,也不能與已定義的全局變量和本模塊中模塊級變量同名。(3)在函數(shù)體內(nèi),函數(shù)名可以當變量使用,函數(shù)的返回值就是通過對函數(shù)名的賦值語句來實現(xiàn)的。6.2函數(shù)過程的定義與調(diào)用說明:6.2函數(shù)過程的定義與調(diào)用64(4)如果函數(shù)體內(nèi)沒有給函數(shù)名賦值,則返回對應(yīng)類型的缺省值,數(shù)值函數(shù)返回0,字符串函數(shù)返回空字符串,變體型函數(shù)返回Empty。(5)As類型:是指函數(shù)返回值的類型,若省略,則函數(shù)返回變體類型值(Variant)。

(6)ExitFunction:表示退出函數(shù)過程,常常是與選擇結(jié)構(gòu)(If或SelectCase語句)聯(lián)用,即當滿足一定條件時,退出函數(shù)過程。(7)形參數(shù)列表:形參的定義與子過程完全相同。(8)函數(shù)過程內(nèi)部不得再定義Sub過程或Function過程。6.2函數(shù)過程的定義與調(diào)用(4)如果函數(shù)體內(nèi)沒有給函數(shù)名賦值,則返回對應(yīng)類型的缺省值,656.2.2建立函數(shù)過程1.用代碼窗口直接定義其步驟如下:(1)打開代碼窗口,在“對象”列表框中選擇“通用”選項。(2)在“過程”列表框中選擇“聲明”選項。(3)輸入Function和函數(shù)名。(4)按Enter鍵后,VisualBasic系統(tǒng)會自動加上EndFunction與函數(shù)名后的一對括號,此時便可輸入函數(shù)語句。6.2函數(shù)過程的定義與調(diào)用6.2.2建立函數(shù)過程6.2函數(shù)過程的定義與調(diào)用662.利用菜單“工具”|“添加過程”命令定義其步驟如下:(1)打開代碼窗口,選擇菜單“工具”|“添加過程”欄命令。打開“添加過程”對話框。(2)在“名稱”文本框中輸入函數(shù)名;在“類型”欄中選取“函數(shù)”定義函數(shù)過程;在“范圍”欄中若選取“公有的”則定義一個公共級全局函數(shù);若選取“私有的”,則定義一個標準模塊板/窗體板的局部函數(shù)。(3)單擊“確定”按鈕后,系統(tǒng)自動建立一個函數(shù)模板,之后就可以在其中編寫函數(shù)代碼。6.2函數(shù)過程的定義與調(diào)用2.利用菜單“工具”|“添加過程”命令定義6.2函數(shù)676.2.3調(diào)用函數(shù)過程函數(shù)過程返回一個值,這是與子過程的主要區(qū)別,其調(diào)用方式與標準函數(shù)調(diào)用一樣,作為表達式中的一個部分被引用。語法:函數(shù)名([實參列表])注意:必須給參數(shù)加上括號,即使沒有參數(shù)也不可省略括號;實際參數(shù)和形式參數(shù)對應(yīng)關(guān)系的要求與子過程相同。6.2函數(shù)過程的定義與調(diào)用6.2.3調(diào)用函數(shù)過程6.2函數(shù)過程的定義與調(diào)用68【例6-5】編寫一個程序,對輸入的成績進行評定,要求程序的評定在函數(shù)中完成,評定結(jié)果(字符串)為函數(shù)的返回值。6.2函數(shù)過程的定義與調(diào)用【例6-5】編寫一個程序,對輸入的成績進行評定,要求程序的69PrivateFunctionAppraise(ByValscore%)AsStringSelectCasescoreCase0To59Appraise="重修"Case60To100Appraise="通過"CaseElseAppraise="數(shù)據(jù)超出范圍!"EndSelectEndFunctionPrivateSubCommand1_Click()Text2=Appraise(Val(Text1))EndSub6.2函數(shù)過程的定義與調(diào)用PrivateFunctionAppraise(ByVa70【例6-6】編寫計算階乘的函數(shù)過程,當用戶單擊窗體時,利用下列近似公式計算

(直到最后一項小于10-7為止)。6.2函數(shù)過程的定義與調(diào)用PrivateSubForm_Click()Dimn!s=1:n=1:t=1Dot=1/Fact(n)s=s+tn=n+1LoopWhilet>=10^-7PrintsEndSub調(diào)用函數(shù)Fact的程序代碼如下:PrivateFunctionFact(x!)Dimp!p=1Forn=1Toxp=p*nNextFact=pEndFunction【例6-6】編寫計算階乘的函數(shù)過程,當用戶單擊窗體時,利716.3.1模塊概述VisualBasic應(yīng)用程序通常由3種模塊組成,即窗體模塊(Form)、標準模塊(Module)和類模塊(Class)。6.3變量、過程的作用域應(yīng)用程序窗體模塊標準模塊類模塊聲明部分通用過程事件過程全局聲明部分模塊層聲明部分通用過程模塊層聲明部分通用過程6.3.1模塊概述6.3變量、過程的作用域應(yīng)用程序窗72(1)窗體模塊窗體模塊是大多數(shù)

VisualBasic應(yīng)用程序的基礎(chǔ)。窗體模塊可以包含處理事件的過程、通用過程以及變量、常數(shù)、類型和外部過程的窗體級聲明。如果要在文本編輯器中觀察窗體模塊,則還會看到窗體及其控件的描述,包括它們的屬性設(shè)置值。寫入窗體模塊的代碼是該窗體所屬的具體應(yīng)用程序?qū)S玫?;它也可以引用該?yīng)用程序內(nèi)的其他窗體或?qū)ο蟆?.3變量、過程的作用域(1)窗體模塊6.3變量、過程的作用域73(2)標準模塊標準模塊(文件擴展名為.BAS)是應(yīng)用程序內(nèi)其他模塊訪問的過程和聲明的容器。它們可以包含變量、常數(shù)、類型、外部過程和全局過程的全局(在整個應(yīng)用程序范圍內(nèi)有效的)聲明或模塊級聲明。寫入標準模塊的代碼不必綁在特定的應(yīng)用程序上;如果不小心用名稱引用窗體和控件,則在許多不同的應(yīng)用程序中可以重用標準模塊。6.3變量、過程的作用域(2)標準模塊6.3變量、過程的作用域74(3)類模塊在VisualBasic中類模塊(文件擴展名為.CLS)是面向?qū)ο缶幊痰幕A(chǔ)??稍陬惸K中編寫代碼建立新對象。這些新對象可以包含自定義的屬性和方法。實際上,窗體正是這樣一種類模塊,在其上可安放控件、可顯示窗體窗口。6.3變量、過程的作用域(3)類模塊6.3變量、過程的作用域756.3.2變量的作用域1.局部變量

在過程內(nèi)部(如Command1_Click)使用Dim或者Static關(guān)鍵字來聲明的變量,只在聲明它們的過程中才能被訪問或改變該變量的值,別的過程不可訪問。所以可以在不同的過程中聲明相同名字的局部變量而互不影響。6.3變量、過程的作用域6.3.2變量的作用域6.3變量、過程的作用域76【例6-7】編寫一個程序,用來演示局部變量的作用范圍和生存期。程序界面由1個窗體、2個文本框、2個命令按鈕組成。6.3變量、過程的作用域【例6-7】編寫一個程序,用來演示局部變量的作用范圍和生存77PrivateSubcmdDim_Click()DimnAsIntegern=n+1txtDim.Text=nEndSubPrivateSubcmdSta_Click()StaticnAsIntegern=n+1txtSta.Text=nEndSub6.3變量、過程的作用域PrivateSubcmdDim_Click()6.3782.窗體/模塊級變量在“通用聲明”段中用Dim語句或用Private語句聲明的變量,可被本窗體/模塊的任何過程訪問。但其他模塊卻不能訪問該變量。聲明窗體/模塊級變量要先進入程序代碼窗口,單擊左側(cè)的下拉框并選擇“通用”,再單擊右側(cè)下拉框并選擇“聲明”。例如,在“通用聲明”段聲明如下變量:PrivatesAsStringDimaAsInteger,bAsSingle6.3變量、過程的作用域2.窗體/模塊級變量6.3變量、過程的作用域793.全局變量

全局變量也稱工程級變量,在窗體模塊或標準模塊的頂部的“通用”聲明段用Public或Global關(guān)鍵字聲明,它的作用范圍是整個應(yīng)用程序,即可被本應(yīng)用程序的任何過程或函數(shù)訪問。例如:PublicaAsIntegerGlobalbAssingle6.3變量、過程的作用域3.全局變量6.3變量、過程的作用域80【例6-8】編寫一個應(yīng)用程序,其由1個窗體模塊和1個標準模塊組成,界面由1個窗體及其中的3個文本框、3個標簽和2個命令按鈕組成。6.3變量、過程的作用域查看代碼【例6-8】編寫一個應(yīng)用程序,其由1個窗體模塊和1個標準模816.3.3過程的作用域◆在窗體或模塊中用Private定義的過程為窗體或模塊級過程,只能在定義它的窗體或模塊中調(diào)用?!粼诖绑w中用Public定義的過程,可以在其他窗體中調(diào)用,但必須在過程名前加上自定義過程所在的窗體名。◆在模塊中用Public定義的過程為全局級過程,可在任意窗體中調(diào)用。6.3變量、過程的作用域6.3.3過程的作用域6.3變量、過程的作用域826.4.1形參與實參的概念形式參數(shù)(簡稱形參)指出現(xiàn)在Sub和Function過程的定義中出現(xiàn)的變量名、數(shù)組名,過程被調(diào)用前,沒有分配內(nèi)存,其作用是說明自變量的類型和形態(tài)以及在過程中的角色。形參可以是:(1)除定長字符串變量之外的合法變量名;(2)后面跟()括號的數(shù)組名。6.4參數(shù)的傳遞6.4.1形參與實參的概念6.4參數(shù)的傳遞83例如定義了下面一個過程:SubSwap2(x%,y%,str$) …EndSub可以用下面的語句調(diào)用該過程:CallSwap2(a%,y%,"Student")6.4參數(shù)的傳遞過程定義:SubSwap2(x%,y%,str$)過程調(diào)用:CallSwap2(a%,y%,"Student")例如定義了下面一個過程:6.4參數(shù)的傳遞過程定義:Sub846.4.2按值傳遞參數(shù)按值傳遞參數(shù)(PassedByValue)時,是將實參變量的值復制一個到臨時存儲單元中,如果在調(diào)用過程中改變了形參的值,不會影響實參變量本身,即實參變量保持調(diào)用前的值不變.6.4參數(shù)的傳遞88實參x形參y在VisualBasic中,傳值方式通過關(guān)鍵字ByVal來實現(xiàn)。也就是說,在定義通用過程時,如果形參前面有關(guān)鍵字ByVal,則該參數(shù)用傳值方式傳遞。6.4.2按值傳遞參數(shù)6.4參數(shù)的傳遞88實參x形參85【例6-9】編寫一個程序,實現(xiàn)兩個整數(shù)的相加。SubAddTest(ByValm%,ByValn%) Dimsum% sum=m+n print"a+b=";sumEndSubPrivateSubCommand1_Click() a%=10:b%=20 CallAddTest(a,b)'傳值 Print"a=";a,"b=";bEndSub6.4參數(shù)的傳遞【例6-9】編寫一個

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論