VB編書學習資源資料(中)_第1頁
VB編書學習資源資料(中)_第2頁
VB編書學習資源資料(中)_第3頁
VB編書學習資源資料(中)_第4頁
VB編書學習資源資料(中)_第5頁
已閱讀5頁,還剩166頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章VisualBasic控制結構

主要內(nèi)容4-1順序結構4-2選擇結構4-3循環(huán)結構4-4程序調(diào)試4-5小結

順序結構是程序設計中最簡單的一種結構,順序結構中的每一條語句都被執(zhí)行一次,而且只能被執(zhí)行一次。

4-1順序結構

【例4.1】交換兩個文本框中的內(nèi)容。在窗體上添加兩個文本框、兩個命令按鈕。程序運行時單擊“交換〞按鈕,那么將兩個文本框中的內(nèi)容進行交換,單擊“退出〞按鈕結束整個程序的運行。圖4-1交換文本框中的內(nèi)容(a)(b)編寫代碼PrivateSubCommand1_Click()DimtAsString

t=Text1.Text '將Text1中的內(nèi)容賦值給臨時變量t$

Text1.Text=Text2.Text

'將Text2中的內(nèi)容賦值給Text1

Text2.Text=t

'將t$中的內(nèi)容賦值給Text2EndSubPrivateSubCommand2_Click()EndEndSub

說明:〔1〕本例使用到程序設計中最根本的語句:賦值語句。賦值語句既可以給普通的變量賦值,如語句“t=Text1.Text〞,也可以給對象的屬性賦值,如將變量t中的內(nèi)容賦值給文本框Text2的Text屬性,可以用語句“Text2.Text=t〞實現(xiàn)。需要注意的是,本例中交換兩個文本框中的值時,需要借用一個臨時變量?!?〕本例包括兩個事件過程,其中Command1_Click()過程含有4條語句,該過程從第一條語句開始,由上到下按順序逐條執(zhí)行,因此是順序結構。選擇結構的流程是對條件進行判斷,根據(jù)判斷結果執(zhí)行相應語句,選擇結構也稱分支結構。4-2選擇結構【例4.2】單行If語句例如。輸入一個整數(shù),判斷該數(shù)是奇數(shù)還是偶數(shù)。在窗體上添加一個文本框、三個命令按鈕。運行程序時在輸入文本框中輸入數(shù)據(jù)后,單擊“判斷〞按鈕,在彈出的消息框中顯示奇、偶數(shù)的判斷結果。單擊“去除〞按鈕,可重新輸入數(shù)據(jù),單擊“退出〞按鈕,結束程序運行。4-2-1單行If語句編寫代碼PrivateSubCommand1_Click()

IfVal(Text1.Text)Mod2=0ThenMsgBoxText1.Text_&"是偶數(shù)"ElseMsgBoxText1.Text&"是奇數(shù)"

EndSubPrivateSubCommand2_Click()Text1.Text=""Text1.SetFocusEndSubPrivateSubCommand3_Click()EndEndSub說明:〔1〕Command1_Click事件代碼的執(zhí)行過程是:將輸入到文本框Text1中的數(shù)據(jù)轉(zhuǎn)換成數(shù)值型數(shù)據(jù)后,進行邏輯判斷,如果表達式Val(Text1.Text)Mod2的值等于0,即文本框中的值為偶數(shù),否那么為奇數(shù),最后通過彈出消息框輸出判斷結果。該過程的流程圖如下圖:開始輸出"偶數(shù)"輸出"奇數(shù)"NoYesVal(Text1.Text)Mod2=0?〔2〕語句輸出偶數(shù)或輸出奇數(shù)是根據(jù)條件有選擇地執(zhí)行,二者中只能選擇其中一個。代碼中分支的選擇是通過If語句實現(xiàn)的,當判斷條件式Val(Text1.Text)Mod2=0為“真〞時執(zhí)行Then后面的語句,為“假〞時執(zhí)行Else后面的語句?!?〕運行程序時應分別輸入一個偶數(shù)值或奇數(shù)值,以判斷輸出結果是否正確,不能只驗證其中一種情況〔偶數(shù)或奇數(shù)〕后就認為程序是正確的。【例4.3】在窗體上添加一個文本框、三個復選框和兩個命令按鈕。運行程序時,根據(jù)需要選擇不同復選框,然后單擊“確定〞按鈕,那么在文本框中顯示一個結果操作。單擊“取消〞按鈕,可以重新選擇。編寫代碼PrivateSubCommand1_Click()Dimstr1AsStringstr1="我的愛好是:"IfCheck1.Value=1Thenstr1=str1&Check1.CaptionIfCheck2.Value=1Thenstr1=str1&Check2.CaptionIfCheck3.Value=1Thenstr1=str1&Check3.CaptionText1.Text=str1EndSubPrivateSubCommand2_Click()Text1.Text=""Check1.Value=0Check2.Value=0Check3.Value=0EndSub說明:〔1〕【例4.2】、【例4.3】兩個例子的特點是將If語句都寫在同一行上,我們把這種形式的If語句稱為單行If語句,單行If語句的一般格式為:If表達式Then語句1[Else語句2]其中If、Then、Else是系統(tǒng)保存字。非0表達式語句10語句2【例4.4】編寫程序,求一元二次方程ax2+bx+c=0的實根〔要求方程的系數(shù)a≠0〕。程序運行時,在文本框中輸入方程的系數(shù),單擊“求解〞按鈕,根據(jù)判斷方程有無實根的情況輸出結果。4-2-2多行If語句編寫代碼PrivateSubCommand1_Click()DimaAsSingle,bAsSingle,cAsSingleDimdltAsSingle,x1AsSingle,x2AsSinglea=Val(Text1.Text)b=Val(Text2.Text)c=Val(Text3.Text)dlt=b*b-4*a*cIfdlt>=0Thenx1=Format((-b+Sqr(dlt))/(2*a),"#.#")x2=Format((-b-Sqr(dlt))/(2*a),"#.#")

MsgBox"方程的兩個實根為:"&"x1="&x1&","&"x2="&x2ElseMsgBox"方程無實根"EndIfEndSub說明:〔1〕多行If語句的一般形式是:If表達式Then語句組1 [Else 語句組2] EndIf 多行If語句的執(zhí)行過程是:如果“表達式〞的值為非0,那么執(zhí)行語句組1;否那么執(zhí)行語句組2。當執(zhí)行完語句組1或語句組2后,程序流程跳轉(zhuǎn)到語句EndIf的后面。〔2〕語句“EndIf〞是多行If語句的結束標志。在多行If語句中,即使省略Else子句,也要寫該結束標志。省略Else子句時的多行If語句形式為:If表達式Then語句組 EndIf〔3〕語句組可以由一條或多條語句組成,語句組不能與Then書寫在同一行,否那么VB會認為是一個單行If語句,單行If語句沒有EndIf。在If語句的Then或Else后面還可以包含另一If語句,這樣結構的If語句稱為If語句的嵌套。嵌套If語句的一般形式是:If表達式1Then[語句組1]If表達式2Then語句組2[Else 語句組3]EndIf[語句組4][Else[語句組5]If表達式3Then語句組6[Else語句組7 EndIf[語句組8]EndIf4-2-3IF語句的嵌套

內(nèi)層If語句內(nèi)層If語句外層If語句【例4.6】編寫程序。在文本框中輸入用戶密碼〔密碼為6666〕。假設正確,那么彈出密碼正確消息框。假設密碼不正確,那么顯示錯誤信息并詢問是否重試,允許在文本框中輸入密碼3次。窗體界面如下圖。編寫代碼PrivateSubForm_Load()Form1.Show Text1.SetFocus EndSubPrivateSubCommand1_Click()StatickAsIntegerIfText1.Text="6666"ThenMsgBox"歡送進入本系統(tǒng)!"Elsek=k+1Ifk=3ThenMsgBox"對不起,您無權使用本系統(tǒng)",,"密碼"Text1.Enabled=FalseElseText1.Text=""Text1.SetFocusMsgBox"密碼不正確,重試!,還有"&Str(3-k)&"次時機",,"信息"EndIfEndIfEndSub說明:〔1〕本例在If語句中又出現(xiàn)了另一個If語句,稱為If語句的嵌套。嵌套If語句既可以出現(xiàn)在Then局部,也可以出現(xiàn)在Else局部?!?〕當嵌套層數(shù)較多時,應注意嵌套的正確性。多個If語句,EndIf與它最接近的If配對?!?〕為了提高程序的可閱讀性,語句書寫時應采用鋸齒形。If…Then…ElseIf的一般形式是:If<表達式1>Then <語句組1>ElseIf<表達式2>Then <語句組2>ElseIf<表達式3>Then <語句組3>… [Else語句組n+1]EndIf

4-2-4If…Then…ElseIf語句

該語句的功能是根據(jù)不同表達式值決定執(zhí)行哪個語句組。如果“表達式1〞為True,那么執(zhí)行“語句組1〞;否那么如果“表達式2〞為True,那么執(zhí)行“語句組2〞…,該語句中不管有幾個分支,依次判斷各表達式,當某個表達式條件滿足時,執(zhí)行相應的語句,其余分支不再執(zhí)行。如果所有ElseIf子句的條件表達式均不滿足且有Else子句,那么執(zhí)行“語句組n+1〞,否那么什么也不執(zhí)行?!纠?.7】根據(jù)距離,計算運輸貨物的每噸運費。在窗體上添加2個標簽、2個文本框和2個命令按鈕。程序運行時,在Text1中輸入距離,單擊“計算運費〞按鈕,那么計算運輸貨物的每噸運費〔結果保存1位小數(shù)〕,并顯示在Text2中。如下圖。

要求:每噸運費的計算方法是:距離×單價×折扣。其中:單價為0.5。折扣為:距離<500折扣為1 500≦距離<1000 折扣為0.98 1000≦距離<1500 折扣為0.95 1500≦距離<2000 折扣為0.90 2000≦距離折扣為0.85

編寫代碼PrivateSubCommand1_Click()IfVal(Text1.Text)<500ThenText2.Text=Round(Val(Text1.Text)*0.5*1,1)ElseIfVal(Text1.Text)<1000ThenText2.Text=Round(Val(Text1.Text)*0.5*0.98,1)ElseIfVal(Text1.Text)<1500ThenText2.Text=Round(Val(Text1.Text)*0.5*0.95,1)ElseIfVal(Text1.Text)<2000ThenText2.Text=Round(Val(Text1.Text)*0.5*0.9,1)ElseText2.Text=Round(Val(Text1.Text)*0.5*0.85,1)EndIfEndSubPrivateSubCommand2_Click()Text1.Text=""Text1.SetFocusText2.Text=""EndSub說明:〔1〕當程序運行到If語句時,將測試條件Val(Text1.Text)<500是否成立,如果條件為True,那么執(zhí)行Then后面的語句。如果條件為False,那么依次測試每個ElseIf子句的條件式,當找到某個為True的條件時,那么執(zhí)行緊接在其后的Then語句。如果所有的ElseIf子句條件均為False,那么程序?qū)?zhí)行Else子句后面的語句。在執(zhí)行完某個Then子句或Else子句后,程序?qū)⑻D(zhuǎn)到EndIf語句后面繼續(xù)執(zhí)行其他語句?!?〕在多分支選擇結構中,ElseIf子句的數(shù)量沒有限制,可以根據(jù)需要設置多個條件判斷?!?〕多分支選擇結構中的ElseIf子句和Else子句都是可選項,如果省略這些子句,那么多分支選擇結構將簡化為簡單的多行If語句形式。〔4〕關鍵字ElseIf不能寫成ElseIf。SelectCase語句的一般形式是:SelectCase測試表達式Case表達式表1語句組1 Case表達式表2語句組2 …Case表達式表n語句組n[CaseElse語句組n+1]EndSelect4-2-5SelectCase語句(情況語句)程序流程圖語句塊n+1語句塊1語句塊2語句塊n條件2TF…...條件nTF條件1TF語句的功能是根據(jù)SelectCase后面的“測試表達式〞的值,依次判斷Case后面的“表達式表〞的值是否與測試表達式相匹配,假設匹配,那么執(zhí)行該Case后面的語句組,然后退出本SelectCase語句;假設所有的Case后面的“表達式表〞,其值與測試表達式均不匹配,那么執(zhí)行CaseElse后面的語句組后,程序跳轉(zhuǎn)到EndSelect語句后面繼續(xù)執(zhí)行其他語句。其中,“測試表達式〞可以是一個常量或變量,也可以是數(shù)值型表達式或字符型表達式。如語句SelectCase3、SelectCasex、SelectCasexMod2等均是合法的形式。Case后面的“表達式表〞其形式多樣化,以下均是合法的形式:〔1〕Case3 表示表達式的值為3時的分支〔2〕Case1,3,5 表示表達式的值為1或3或5時的分支〔3〕使用關鍵字To指定一個范圍例如:Case1To100 表示表達式的值為1至100之間時的分支例如:Case"a","A"To"Z"表示表達式的值為"a"或"A"至"Z"之間時的分支〔4〕使用關鍵字Is例如:CaseIs>90 表示表達式的值為大于90時的分支注意:在使用關鍵字Is定義條件時,只能用關系運算符定義簡單條件,不能使用邏輯運算符將兩個或多個條件組合在一起。例如:CaseIs>90AndIs<100是非法表達形式〔5〕混合形式例如:Case2,4,6,10To15,Is>20 表示表達式的值為2或4或6或10至15之間或大于20時的分支【例4.8】在窗體上添加標簽、文本框、命令按鈕和形狀控件。運行程序時,在文本框中輸入0至5之間的任一整數(shù),單擊“形狀〞命令按鈕后,在形狀控件上顯示相應的圖形。

編寫代碼PrivateSubCommand1_Click()DimaAsIntegera=Val(Text1.Text)SelectCaseaCase0Shape1.Shape=0 Case1Shape1.Shape=1 Case2 Shape1.Shape=2 Case3Shape1.Shape=3 Case4 Shape1.Shape=4 Case5 Shape1.Shape=5 CaseElse MsgBox"Wrong"EndSelectEndSub說明:〔1〕多分支結構是根據(jù)測試的條件,從不同的分支選項中選擇一個滿足條件的分支執(zhí)行。如本例是根據(jù)a的不同取值選擇不同的分支,當a的值分別為0,1,2,3,4,5時,將形狀控件的Shape屬性相應設為0,1,2,3,4,5,從而顯示不同的圖形形狀?!?〕一般情況下,Case子句的順序?qū)?zhí)行結果沒有影響,應注意的是,CaseElse子句必須放在所有的Case子句之后。如果在SelectCase語句中,所有的Case子句都沒有與“測試表達式〞相匹配的值且沒有CaseElse子句,那么程序不執(zhí)行任何操作。〔3〕SelectCase語句結構以SelectCase開始,以EndSelect結束。4-2-6IIF函數(shù)VB提供了For-Next循環(huán)〔計數(shù)循環(huán)〕、Do-Loop循環(huán)〔Do循環(huán)〕、While-Wend循環(huán)〔當循環(huán)〕等3種不同風格的循環(huán)語句。4-3循環(huán)結構【例4.10】計算1×2×3…×10的乘積,程序運行結果如下圖。4-3-1For循環(huán)語句

編寫代碼PrivateSubCommand1_Click()DimmulAsLong,iAsIntegermul=1Fori=1To10Step1mul=mul*iNextiText1.Text=mulEndSubFor—Next語句的執(zhí)行過程

mul=mul*i變量i賦初值1i<=10變量i加1YesNoFor<循環(huán)變量>=<初值>To<終值>[Step<步長>]循環(huán)體語句Next[<循環(huán)變量>]

For–Next循環(huán)的一般語法格式

步長為1時可省略步長可取正或負數(shù);步長為負數(shù)時應使終止值小于初始值。成對出現(xiàn)循環(huán)變量值介于初始值和終止值之間時反復執(zhí)行Yes

執(zhí)行循環(huán)體語句循環(huán)控制變量=循環(huán)控制變量+步長No

開始循環(huán)控制變量=初值循環(huán)控制變量<=終值?說明:〔1〕循環(huán)體語句執(zhí)行的次數(shù):次數(shù)=Fix((終止值-初始值)/步長)+1〔2〕可以使用ExitFor語句提前結束循環(huán)Fori=1To10Step2x=x+Int(Rnd*100)Ifx>300ThenExitForNextiPrintx【例4.11】編寫程序。顯示100至200之間能被3或被7整除的數(shù)。在窗體上按圖所示添加標簽、文本框〔Text1的MultiLine屬性設置為True,ScrollBars屬性設置為2-Vertical〕和命令按鈕。運行程序時,單擊“顯示〞按鈕,在文本框中顯示運行結果。編寫代碼PrivateSubCommand1_Click()DimiAsIntegerFori=100To200IfiMod3=0OriMod7=0ThenText1.Text=Text1.Text&i&vbCrLfEndIfNextiEndSub說明:〔1〕本例依次判斷100至200之間的每個數(shù)是否是3或7的倍數(shù),采用在循環(huán)體中完整地嵌套If…Then選擇結構來實現(xiàn)。循環(huán)體語句可以由一條或多條語句組成,語句的形式可以順序結構,也可以是選擇結構,還可以是循環(huán)結構,即在一個循環(huán)結構中嵌套另一個循環(huán)結構?!?〕語句中出現(xiàn)的vbCrLf是VB提供的符號常量,功能是實現(xiàn)回車換行操作,即在文本框中每連接一個i后回車換行輸出下一個i。【例4.12】編寫程序。在窗體的圖片框中統(tǒng)計輸出由4、5、6三個數(shù)組成的三位數(shù)的個數(shù)并顯示所有可能的三位數(shù)。程序運行結果如下圖。編寫代碼DimyAsInteger PrivateSubCommand1_Click()Fori=4To6Forj=4To6Fork=4To6x=i*100+j*10+ky=y+1IfyMod5=0ThenPicture1.Printx;Picture1.PrintElsePicture1.Printx;EndIfNextkNextjNextiEndSub說明:〔1〕在循環(huán)嵌套結構中,嵌套的層數(shù)可以根據(jù)需要而定,嵌套一層稱為二重循環(huán),嵌套二層稱為三重循環(huán)。二重循環(huán)嵌套示意圖如下所示。Fori=……Forj=……Nextj…Nexti注意:在循環(huán)嵌套結構中,內(nèi)、外層循環(huán)的控制變量不得使用相同的變量名,以免造成混亂。外層循環(huán)必須完全包含內(nèi)層循環(huán),不能交叉。內(nèi)層循環(huán)外層循環(huán)【例4.13】在窗體中“選修課程名稱〞下的List1列表框中有假設干門選修課名稱。程序運行時,選中List1中假設干個項,單擊“確認〞按鈕那么把選中的工程移到“我所選修的課程有〞下的List2列表框中,單擊“重選〞按鈕,那么可以重新選擇。編寫代碼PrivateSubCommand1_Click()Dimi%Fori=0ToList1.ListCount–1IfList1.Selected(i)=TrueThenList2.AddItemList1.List(i)EndIfNextiEndSubPrivateSubCommand2_Click()List2.ClearEndSub說明:〔1〕循環(huán)次數(shù)由列表框1中的列表項總數(shù)確定,每執(zhí)行一次循環(huán),判斷當前列表項的Selected屬性是否選中,假設選中,那么該工程添加到列表框2中顯示?!?〕語句List2.Clear的作用是清空列表框2中的內(nèi)容。形式1:

Do

While|Until<條件表達式>

<語句塊>[ExitDo]<語句塊>

Loop4-3-2Do…Loop循環(huán)語句DoWhile|Until…Loop循環(huán)語句的執(zhí)行過程是:當指定的循環(huán)條件為“真〞或直到指定的循環(huán)條件變?yōu)椤罢妯曋?,重復?zhí)行循環(huán)體語句,否那么不執(zhí)行。關鍵字While是當循環(huán)條件為“真〞時執(zhí)行循環(huán)體語句,關鍵字Until是當循環(huán)條件變?yōu)椤罢妯曋皥?zhí)行循環(huán)體語句。形式2:Do

<語句塊>[ExitDo]<語句塊>LoopWhile|Until<條件>Do…LoopWhile|Until循環(huán)語句的執(zhí)行過程是:不管循環(huán)條件是否成立,先執(zhí)行一次循環(huán)體語句,然后再判斷循環(huán)條件,關鍵字While是當循環(huán)條件為“真〞時再次執(zhí)行循環(huán)體語句,關鍵字Until是當循環(huán)條件變?yōu)椤罢妯曋霸俅螆?zhí)行循環(huán)體語句?!纠?.14】分別用Do-Loop語句的不同形式計算1×2×3…×10的乘積的程序。

編寫代碼PrivateSubCommand1_Click()i=1mul=1DoWhilei<=10mul=mul*ii=i+1LoopText1.Text=mulEndSub編寫代碼PrivateSubCommand2_Click()i=1mul=1DoUntili>10mul=mul*ii=i+1LoopText1.Text=mulEndSub編寫代碼PrivateSubCommand3_Click()

i=1mul=1Domul=mul*ii=i+1LoopWhilei<=10Text1.Text=mulEndSub編寫代碼PrivateSubCommand4_Click()

i=1mul=1Domul=mul*ii=i+1LoopUntili>10Text1.Text=mulEndSub當循環(huán)語句格式如下:While<條件><語句組>Wend

當循環(huán)語句的執(zhí)行過程是:當條件為True時,執(zhí)行循環(huán)體內(nèi)的語句組,當遇到Wend語句時,控制回到While語句繼續(xù)測試條件是否為True,當條件為False時,控制跳出While…Wend,執(zhí)行Wend語句的下一條語句。4-3-3當循環(huán)語句【例4.16】使用“輾轉(zhuǎn)相除法〞求兩個自然數(shù)m,n的最大公約數(shù)。程序運行后,分別在兩個文本框中輸入數(shù)據(jù)后,單擊“最大公約數(shù)〞按鈕,在標簽中顯示相應的計算結果。程序運行結果如下圖?!窘馕觥坑谩拜氜D(zhuǎn)相除法〞求兩個自然數(shù)的最大公約數(shù)的算法思想:(1)對于兩個數(shù)m,n,使得m>n;(2)計算m除以n的余數(shù)r;(3)假設r=0,那么n即為所求的最大公約數(shù),否那么執(zhí)行步驟(4);(4)執(zhí)行m=n〔將原來的除數(shù)b作為新的被除數(shù)m〕和n=r〔將原來的余數(shù)r作為新的除數(shù)n〕,再重復執(zhí)行步驟(2)。編寫代碼PrivateSubCommand1_Click()Dimm%,n%,t%,r%m=Val(Text1.Text)n=Val(Text2.Text)Ifm<>0Andn<>0Then Ifm<nThent=m:m=n:n=tr=mModnWhiler<>0 m=nn=rr=mModnWendLabel3.Caption="最大公約數(shù)為:"&nElseMsgBox"除數(shù)不能為0"EndIfEndSub以上介紹了三種循環(huán)語句的形式,它們的共同特點是重復執(zhí)行一個語句系列(循環(huán)體),不同點是控制重復次數(shù)的時機和方法不一樣。For循環(huán)語句是根據(jù)循環(huán)控制變量的初值、終值和步長決定循環(huán)的執(zhí)行次數(shù),Do-Loop和當循環(huán)語句是根據(jù)是否滿足指定的條件決定是否執(zhí)行或結束循環(huán)。在實際應用中,應根據(jù)不同的需要采用適宜的形式,原那么是語句結構清晰,簡單易懂?!纠?.16】從鍵盤上輸入一個正整數(shù),判斷該數(shù)是否為素數(shù)。在窗體上添加一個標簽、一個文本框和兩個命令按鈕。程序運行時,單擊“判斷〞按鈕,那么判斷并顯示輸入的數(shù)是否為素數(shù)。單擊“顯示素數(shù)〞按鈕,那么顯示3至輸入的數(shù)之間所有素數(shù)。如下圖。(a)單擊“判斷”按鈕時的結果(b)單擊“顯示素數(shù)”按鈕后的結果【解析】要判斷一個自然數(shù)n〔n≥3〕是否為素數(shù),可以根據(jù)素數(shù)的定義,用2、3、…、n-1分別去除n,如果其中有能整除n的數(shù),那么n就不是素數(shù),否那么n是素數(shù)。實際上判斷n是否為素數(shù),只要依次用2、3、…、之間的整數(shù)去除n〔用反證法可證明〕,如果n不能被其中任一數(shù)整除,那么n就為素數(shù)。用這種算法判斷素數(shù),可減少循環(huán)次數(shù),提高程序運行效率。編寫代碼DimnAsIntegerPrivateSubForm_Load()Form1.ShowText1.SetFocusEndSubPrivateSubCommand1_Click()

Dimn%,i%,k%n=Val(Text1.Text)k=Int(Sqr(n))Fori=2Tok

IfnModi=0ThenExitForNextiIfi>kThenMsgBoxn&"是素數(shù)",,"判斷素數(shù)“ElseMsgBoxn&"不是素數(shù)"EndIfEndSubPrivateSubCommand2_Click()

Dimn%,j%,k%n=Val(Text1.Text)Forj=3Ton

k=Int(Sqr(j))Fori=2TokIfjModi=0ThenExitForNextiIfi>kTheny$=y$&""&jEndIfNextjMsgBoxy,,"顯示素數(shù)"EndSub程序的測試、調(diào)試過程就是查找、排除、修改程序中錯誤的過程,常常需要反復屢次進行,直至運行結果正確為止。4-4程序調(diào)試代碼編輯、編譯錯誤

代碼運行錯誤邏輯錯誤4-4-1錯誤類型VB提供了方便的程序調(diào)試工具,幫助我們排除各種錯誤。1.程序代碼顏色說明2.設置斷點3.使用“調(diào)試〞工具欄4-4-2調(diào)試方法程序結構要清晰代碼書寫要有層次VB中的程序是由多個過程組成的,過程之間要有分割線或空行。程序代碼中用到的變量名、過程名、自定義函數(shù)名、對象名等名稱,在命名時應采用“見名知意〞的原那么,以方便理解程序。參加必要的注釋輸入、輸出語句4-4-3培養(yǎng)良好的程序設計風格本章主要介紹了程序控制流程中的三種根本結構:順序結構、選擇結構和循環(huán)結構。順序結構是程序設計中最根本的一種結構,順序結構中的語句依次被執(zhí)行;選擇結構是根據(jù)是否滿足指定的條件來控制程序的執(zhí)行流向;循環(huán)結構是重復地執(zhí)行程序中某些語句的過程。VB提供了形式多樣的實現(xiàn)選擇結構、循環(huán)結構的語句,并可以相互嵌套使用,掌握了這些語句,就可以編寫較為復雜的VB程序。4-5小結第5章數(shù)組主要內(nèi)容5-1數(shù)組的根本概念5-2靜態(tài)數(shù)組與動態(tài)數(shù)組的使用5-3數(shù)組的根本操作5-4控件數(shù)組的概念與使用5-5用戶自定義數(shù)據(jù)類型的建立所謂數(shù)組,就是由一組〔假設干個〕類型相同〔VB也支持類型不同〕的相關變量結合在一起而構成的集合。數(shù)組中的每一個變量稱為數(shù)組元素,每一個數(shù)組元素在內(nèi)存中獨占一個內(nèi)存單元。作為同一數(shù)組中的元素,它們使用一個統(tǒng)一的數(shù)組名,只是通過不同的下標區(qū)分該數(shù)組中每個數(shù)組元素。只有一個下標的數(shù)組稱為一維數(shù)組,如a(1)、b(10)。有兩個下標的數(shù)組稱為二維數(shù)組,如a(1,3)、c(2,2)。5-1數(shù)組的根本概念在計算機中,聲明數(shù)組后,數(shù)組占據(jù)一片內(nèi)存空間,用一個統(tǒng)一的名字〔聲明數(shù)組時所定義的數(shù)組名〕表示這片存儲空間,存儲空間中每個存儲單元分別存放數(shù)組中的一個數(shù)組元素,數(shù)組元素的下標就是用來表示數(shù)組元素在內(nèi)存空間中存儲單元的位置。在使用數(shù)組時,應先對數(shù)組進行聲明后再使用,所謂“聲明〞數(shù)組,就是對數(shù)組名、數(shù)組維數(shù)、數(shù)組元素個數(shù)、數(shù)組元素的數(shù)據(jù)類型進行定義。在聲明時確定了數(shù)組維數(shù)、大小的數(shù)組稱為靜態(tài)數(shù)組。5-2靜態(tài)數(shù)組5-2-1一維數(shù)組所謂一維數(shù)組是指只具有一個下標的數(shù)組,其聲明形式如下:Dim|Private|Public|Static數(shù)組名(下標)[As數(shù)據(jù)類型]

該語句聲明了數(shù)組的應用范圍、數(shù)組名稱、維數(shù)、數(shù)組元素個數(shù)及數(shù)據(jù)類型。說明:(1)用關鍵字Dim|Private建立局部數(shù)組〔在事件過程或通用過程中用Dim或Private關鍵字聲明數(shù)組〕;用關鍵字Dim|Private建立模塊級數(shù)組〔在模塊的通用聲明段中用Dim或Private關鍵字聲明數(shù)組〕;用關鍵字Public建立全局數(shù)組〔在標準模塊中用關鍵字Public聲明數(shù)組〕;用關鍵字Static建立局部數(shù)組〔在事件過程或通用過程中用Static關鍵字聲明數(shù)組〕。(2)數(shù)組名的命名規(guī)那么與變量的命名相同。(3)下標必須為一個常量,不可以為變量或表達式。下標的形式為:[下界To]上界。下界和上界定義了數(shù)組元素下標的取值范圍,下界是所聲明數(shù)組的第一個元素的下標而上界那么是數(shù)組的最后一個元素的下標,它們的值不得超過Long數(shù)據(jù)類型的范圍。數(shù)組中所包含的數(shù)組元素個數(shù)為:上界-下界+1。假設省略[下界To],那么系統(tǒng)默認的下界為0。(4)假設希望下標從1開始,可在模塊的通用局部使用OptionBase語句將設為1。其使用格式是:OptionBase0|1(5)As數(shù)據(jù)類型:聲明數(shù)組的數(shù)據(jù)類型,如果省略,那么默認數(shù)組元素的類型為變體型。5-2-2二維數(shù)組所謂二維數(shù)組是指有兩個下標的數(shù)組,其聲明形式如下:Dim|Private|Public|Static數(shù)組名(下標1,下標2)[As數(shù)據(jù)類型]

說明:(1)聲明二維數(shù)組中除下標個數(shù)不同外,其他參數(shù)含義同一維數(shù)組。下標1的取值范圍為:下界1To上界1下標2的取值范圍為:下界2To上界2(2)二維數(shù)組在邏輯結構上可以看作是具有行和列的二維表格。例如:Dimarr(0To3,0To4)AsLong該語句聲明了一個名為arr的二維數(shù)組,它包括4行5列共20個長整型數(shù)組元素,各元素邏輯結構排列如下:

arr(0,0)arr(0,1)arr(0,2)arr(0,3)arr(0,4)arr(1,0)arr(1,1)arr(1,2)arr(1,3)arr(1,4)arr(2,0)arr(2,1)arr(2,2)arr(2,3)arr(2,4)arr(3,0)arr(3,1)arr(3,2)arr(3,3)arr(3,4)動態(tài)數(shù)組指在聲明數(shù)組時未給出數(shù)組的大小(省略括號中的下標),當要使用它時,隨時用ReDim語句重新指出數(shù)組大小。形式如下: ReDim數(shù)組名(下標[,下標2…])[As類型]例:SubForm_Click()Dimx()AsSingle …n=Inputbox(“輸入n〞〕ReDimx(n)…EndSub5-3動態(tài)數(shù)組說明:(1)在窗體層、標準模塊或過程中,用Public語句、Private或Dim語句、Dim或Static語句聲明一個沒有下標的數(shù)組〔括號不能省略〕,即維數(shù)為空的數(shù)組;(2)Dim、Static、Public聲明語句是說明性語句,可出現(xiàn)在過程內(nèi)或通用聲明段;ReDim語句是執(zhí)行語句,只能出現(xiàn)在過程內(nèi);(3)在過程中可屢次使用ReDim來改變數(shù)組元素的個數(shù);(4)ReDim中的下標可以是常量,也可以是有了確定值的變量。如:n=InputBox(“輸入n的值〞) ReDimArr(n)

(5)靜態(tài)數(shù)組在程序編譯時分配存儲單元,動態(tài)數(shù)組在運行時分配存儲單元。應用數(shù)組可以解決批量數(shù)據(jù)的處理問題,尤其是將數(shù)組與循環(huán)控制結構結合起來,可以實現(xiàn)一些復雜問題的求解,提高程序的編程效率。數(shù)組的根本操作包括數(shù)組元素的引用、輸入、復制、輸出等內(nèi)容。 5-4數(shù)組的根本操作一維數(shù)組元素的引用引用形式:數(shù)組名(下標)其中:下標可以是常量、整型變量或表達式。例如:設有下面的數(shù)組A(10)、B(10)AsInteger那么下面的語句都是正確的。A(1)=B(2)+B(1)+5'取數(shù)組元素運算A(i)=B(i)'下標使用變量A(i+2)=B(i+1) '下標使用表達式注意:引用數(shù)組時不能下標越界5-4-1數(shù)組元素的引用

二維數(shù)組元素的引用數(shù)組名([下標1,下標2〕下標1指定元素在二維表中所在的行,下標2指定元素在二維表中所在的列。例如:a(1,2)=10a(i+2,j)=a(2,3)*2在程序中常常通過二重循環(huán)來操作使用二維數(shù)組元素。

1.使用InputBox函數(shù)及For循環(huán)語句

例如:

Fori=1To4Forj=1To5

s(i,j)=InputBox("輸入s("&i&","&j&")的值")

NextjNexti5-4-2數(shù)組元素的輸入2.使用Array函數(shù)

Dim

a

AsVariant

a=Array("abc","def","67")

Fori=0ToUBound(a)

Picture1.Printa(i);"";

Nexti說明:(1)Array函數(shù)用來為數(shù)組元素賦值,即把一個數(shù)據(jù)集讀入某個數(shù)組。其格式為:數(shù)組變量名=Array〔數(shù)組元素值〕數(shù)組變量名是預先定義的數(shù)組名,在“數(shù)組變量名〞之后沒有括號。其類型只能是Variant。(2)利用Array函數(shù)對數(shù)組各元素賦值時,一定要注意下標的下界。一般情況下,默認的下界為0,因此數(shù)組元素的下標從0開始;如果用OptionBase語句把下界指定為1,那么下標從1開始;(3)在定義數(shù)組變量時,只給出數(shù)組名,不給出括號和最大下標值,它與普通的變量名沒有任何區(qū)別;(4)所建立的數(shù)組的元素個數(shù)不能預先指定,只能由Array函數(shù)括號內(nèi)的參數(shù)個數(shù)決定,也可通過函數(shù)Ubound獲得。VB有兩個內(nèi)置函數(shù)可以檢測數(shù)組各維的上下界:LBound(數(shù)組名[,維])返回數(shù)組指定維的下界缺省狀態(tài)下,指定的維默認為1UBound(數(shù)組名[,維])返回數(shù)組指定維的上界5-4-3數(shù)組元素的復制單個數(shù)組元素可以像簡單變量一樣從一個數(shù)組復制到另一個數(shù)組。二維數(shù)組中的元素可以復制到另一個二維數(shù)組中某個元素,也可以復制到一個一維數(shù)組中的某個元素,反之亦然。如果要復制整個數(shù)組,那么使用For循環(huán)語句。DimaAsVariant,b()AsVariant,i%a=Array(1,2,3,4,5)b=aReDimb(UBound(a))Fori=0ToUBound(a)b(i)=a(i)Nexti等價說明:將數(shù)組a中各個元素的值對應地賦值給b數(shù)組5-4-4數(shù)組元素的輸出

數(shù)組元素的輸出可以用Print方法實現(xiàn)例如:輸出方陣a中的下三角元素Fori=0To4Forj=0ToIa(i,j)=i*5+jPrinta(i,j);"";NextjPrint '換行

Nexti5-4-5ForEach…Next語句ForEach…Next語句語法格式:ForEach變量名In數(shù)組 循環(huán)體 [ExitFor] ……Next[變量名]是一個數(shù)組名,沒有括號和上下界說明:(1)“變量名〞是一個Variant型變量,它是為循環(huán)提供的,并在ForEach…Next語句中重復使用,它實際上代表的是數(shù)組中的每個元素。(2)“數(shù)組〞是一個數(shù)組名,沒有括號和上下界。(3)用ForEach…Next語句對數(shù)組元素進行處理時,它所重復執(zhí)行的次數(shù)由數(shù)組中元素的個數(shù)確定。(4)與For…Next語句一樣,在循環(huán)體中可以使用ExitFor隨時退出循環(huán)。 5-4-6應用實例

【例5.5】求極值運算。對隨機產(chǎn)生的10個100~500之間的正整數(shù),求最大數(shù)或最小數(shù)。編寫代碼OptionBase1Dimarr(10)AsIntegerPrivateSubCommand1_Click()DimmaxAsIntegerLabel1.Caption=""RandomizeFori=1To10

arr(i)=Int(Rnd*401)+100Label1.Caption=Label1.Caption&arr(i)&""Nextimax=arr(1)Fori=2To10Ifarr(i)>maxThenmax=arr(i)NextiLabel2.Caption="最大數(shù)為:"&maxEndSub【例5.6】使用“冒泡法〞對一組數(shù)據(jù)排序。在窗體上添加名稱為Text1、Text2、Text3三個文本框控件數(shù)組,下標均為從0至9。程序運行時,單擊“產(chǎn)生隨機數(shù)〞按鈕,就會產(chǎn)生10個3位數(shù)的隨機數(shù),并放入Text1數(shù)組中;單擊“升序排列數(shù)據(jù)〞按鈕,將按升序排列這10個數(shù),并放入Text2數(shù)組中。單擊“降序排列數(shù)據(jù)〞按鈕,將按降序排列這10個數(shù),并放入Text3數(shù)組中。程序運行界面如下圖?!窘馕觥棵芭莘ㄅ判蚴歉鶕?jù)相鄰兩個數(shù)據(jù)元素間的相互比較、交換進行的一種方法排序方法。采用“冒泡法〞對包含n個數(shù)據(jù)的數(shù)組a按升序排列,其根本過程如下:(1)從最后一個元素開始向前掃描,依次比較相鄰兩個元素的值,如果a(n)<a(n-1),那么交換它們的值;然后比較a(n-1)、a(n-2);依次類推,直至比較到第1個數(shù)為止,第一趟掃描結束后,最小的數(shù)據(jù)移動到最前面的位置〔如同水中的氣泡,較輕的氣泡不斷浮出水面,冒泡法排序因此得名〕;(2)對后n-1個數(shù)據(jù)進行第二趟冒泡排序,結果使次小數(shù)移動到第2個位置;(3)重復上述過程,直到在一趟掃描過程中沒有發(fā)生數(shù)據(jù)位置的交換為止。對于每一趟掃描,也可以從第一個數(shù)開始向后比較,大數(shù)向后不斷移動,直至比較到第n個數(shù)為止,第一趟掃描結束后,最大的數(shù)據(jù)移動到最后面的位置。編寫代碼OptionBase0Dimarr(9)AsIntegerPrivateSubCommand1_Click()RandomizeFori=0To9 Text1(i)=Int(Rnd()*899)+100NextFori=0To9 arr(i)=Val(Text1(i).Text)NextiEndSubPrivateSubCommand2_Click()'升序排列數(shù)據(jù)DimiAsInteger,jAsInteger,tAsIntegerFori=1To9Forj=9ToiStep-1Ifarr(j)<arr(j-1)Thent=arr(j)arr(j)=arr(j-1)arr(j-1)=tEndIfNextjNextiFori=0To9'輸出Text2(i).Text=arr(i)NextiEndSubPrivateSubCommand3_Click()'降序排列數(shù)據(jù)DimiAsInteger,jAsInteger,tAsIntegerFori=9To1Step-1Forj=0Toi-1Ifarr(j)<arr(j+1)Thent=arr(j+1)arr(j+1)=arr(j)arr(j)=tEndIfNextjNextiFori=0To9 '輸出Text3(i).Text=arr(i)NextiEndSub控件數(shù)組:由一組相同類型的控件組成。它們共用一個控件名,具有相同的屬性,建立時系統(tǒng)給每個元素賦一個唯一的索引號(Index)。引用控件數(shù)組中各控件對象的方法是:控件數(shù)組名〔索引號〕5-5控件數(shù)組5-5-1控件數(shù)組的建立(1)在窗體上添加所需控件,進行屬性設置;(2)選中該控件,執(zhí)行“復制〞命令;(3)執(zhí)行“粘貼〞命令,彈出一個對話框,詢問是否建立控件數(shù)組,單擊“是〞將建立控件數(shù)組,在窗體左上角顯示一個控件,這是控件數(shù)組中的第二個控件。單擊“否〞那么不建立控件數(shù)組;(4)執(zhí)行假設干次“粘貼〞命令可以建立所需個數(shù)的控件數(shù)組中的控件。

控件數(shù)組共享同樣的事件過程,通過返回的下標值區(qū)分控件數(shù)組中的各個元素。

例如:PrivateSub

cmdName_Click(Index

AsInteger)

If

Index

=3then'處理第四個命令按鈕的操作

EndIf…EndSub例如:建立含有四個命令按鈕的控件數(shù)組,當單擊某個命令按鈕,分別顯示不同的圖形或結束操作。

PrivateSubCommand1_Click(IndexAsInteger)SelectCaseIndex

Case0……"畫直線"Case1……"畫矩形“Case2……"畫圓“CaseElseEndEndSelectEndSub【例5.9】設計一個窗體,模擬“撥號面板〞。窗體上添加一個名稱為Text1的文本框控件〔最多可接收11個字符〕和一個名稱為Command1的命令按鈕數(shù)組〔含有Command1(0)~Command1(9)10個數(shù)組元素〕,命令按鈕數(shù)組的下標和按鈕的數(shù)字鍵標題相對應。再添加一個名稱為Timer1的計時器控件〔初始狀態(tài)Enabled屬性為False,Interval屬性為1000〕和兩個名稱分別為Command2、Command3的命令按鈕,其標題分別為“重撥〞和“結束〞。程序運行后,單擊數(shù)字鍵按鈕,所撥數(shù)字顯示在文本框中;單擊“重撥〞按鈕,再現(xiàn)原來的撥號過程;單擊“結束〞按鈕,結束程序。程序運行界面如下圖。5-5-2控件數(shù)組應用實例編寫代碼DimsAsString,iAsIntegerPrivateSubCommand1_Click(IndexAsInteger)Text1.Text=Text1.Text&IndexEndSubPrivateSubCommand2_Click()s=Text1.TextText1.Text=""i=1Timer1.Enabled=TrueEndSubPrivateSubTimer1_Timer()Text1.Text=Text1.Text&Mid(s,i,1)i=i+1Ifi>Len(s)ThenExitSubEndSubPrivateSubCommand3_Click()EndEndSub5-6-1

用戶自定義數(shù)據(jù)類型形式如下:[Public|Private]Type

自定義數(shù)據(jù)類型名數(shù)據(jù)類型元素名As類型名數(shù)據(jù)類型元素名As類型名…EndType

5-6用戶自定義數(shù)據(jù)類型(也稱記錄類型)一組不同類型變量的集合。相當于C語言中的結構類型。說明:

(1)自定義類型一般在標準模塊(.BAS)中定義,默認是Public;在窗體中建立必須是Private。(2)自定義類型中的元素類型可以是字符串,但應是定長字符串;(3)不要將自定義類型名和該類型的變量名混淆,前者表示了如同Integer、Single等的類型名,后者VB根據(jù)變量的類型分配所需的內(nèi)存空間,存儲數(shù)據(jù);(4)自定義類型一般和數(shù)組結合使用,簡化程序的編寫。例如:定義了一個有關學生信息的自定義類型。

TypeStudTypeNoAsInteger '學號NameAsString*20'姓名SexAsString*1 '性別Mark(1To4)AsSingle'

4門課程成績TotalAsSingle '總分

EndType5-6-2建立

用戶自定義數(shù)據(jù)類型【例5.11】輸入學生成績表中學生的學號、姓名、3科成績等數(shù)據(jù)項,并顯示學生成績信息。在窗體上添加兩個框架,標題分別為“輸入信息〞和“學號姓名數(shù)學英語語文〞;在框架Frame1中添加文本框控件數(shù)組Text1〔Index為0-4〕,在框架Frame2中添加文本框控件Text2;再添加兩個命令按鈕。程序運行界面如下圖。5-6-3用戶自定義類型應用實例編寫代碼PrivateTypestusnumAsString*6snameAsString*8score(1To3)AsSingleEndTypePrivateSubCommand1_Click()'輸入成績DimsAsstu'定義記錄變量s.snum=Text1(0).Texts.sname=Text1(1).Texts.score(1)=Text1(2).Texts.score(2)=Text1(3).Texts.score(3)=Text1(4).Text

Text2.Text=Text2.Text&s.snum&Space(4)&s.sname&_Str(s.score(1))&Space(4)&Str(s.score(2))&Space(4)&_

Str(s.score(3))+vbCrLfEndSub5-7小結本章介紹了數(shù)組的根本概念和使用。在程序設計中,將一組排列有序的數(shù)據(jù)組織在一起,用一個統(tǒng)一的名稱表示,這些有序數(shù)據(jù)的集合稱為數(shù)組。引進數(shù)組后,可以解決批量數(shù)據(jù)處理問題,可以更方便靈活地組織和使用數(shù)據(jù),特別是將數(shù)組與循環(huán)結構結合在一起,可以編寫出功能強大的程序。本章通過典型實例詳細介紹了一維數(shù)組、二維數(shù)組及控件數(shù)組的聲明和使用方法。第6章過程主要內(nèi)容6-1Sub過程

6-2

Function過程

6-3參數(shù)的傳遞

6-4靜態(tài)變量

6-1-1Sub過程的定義Sub過程的定義格式:[Private|Public][Static]Sub

子程序名

([形參列表])

語句塊

[ExitSub]

[語句塊]EndSub6-1Sub過程關鍵字Private和Public和Static只能選其一;使用Private,表示該過程是私有的局部過程,只能被該過程所在的窗體或標準模塊中的其他過程所調(diào)用;使用Public,表示該過程是公共的全局過程,可被應用程序中的任何窗體或任何標準模塊中的過程所調(diào)用;格式說明:選用關鍵字Static,表示Sub過程也是私有過程,即它只能被本模塊的其它過程調(diào)用,而不能被其他模塊中的過程調(diào)用,但這時過程中的局部變量都是“Static〞型的,即在每次調(diào)用過程時,過程中的局部變量的值保持不變VB默認所有標準模塊中的子程序是Public。格式說明:6-1-2Sub過程的建立通用過程既可以在窗體模塊中建立,也可以標準模塊中建立。6-1-3Sub過程的調(diào)用第二種形式:子程序名[實參列表]

第一種形式:Call子程序名[(實參列表)]

假設帶有實參,那么實參必須用括號括起6-1-4通用過程和事件過程在VB中的Sub子過程分為:事件過程和通用過程

事件過程:窗體事件的語法PrivateSubForm_事件名(參數(shù)列表)<語句組>EndSub控件事件的語法PrivateSub

控件名_事件名(參數(shù)列表)

<語句組>EndSub

通用過程的格式為:[Private|Public][Static]Sub過程名[(參數(shù)表)]語句塊EndSub[Private|Public][Static]

Function函數(shù)名

[(形參列表)][As類型]

語句組1

函數(shù)名=函數(shù)返回結果ExitFunctionEndFunction定義函數(shù)過程的一般格式為函數(shù)體在函數(shù)體內(nèi)至少對函數(shù)名賦值一次6-2Function過程

說明:〔1〕函數(shù)名:命名規(guī)那么與變量名規(guī)那么相同。但不能與系統(tǒng)的內(nèi)部函數(shù)或其它通用子過程同名,也不能與已定義的全局變量和本模塊中模塊級變量同名?!?〕在函數(shù)體內(nèi),函數(shù)名可以當變量使用,函數(shù)的返回值就是通過對函數(shù)名的賦值語句來實現(xiàn)的,在函數(shù)過程中至少要對函數(shù)名賦值一次?!?〕AS類型:是指函數(shù)返回值的類型,假設省略,那么函數(shù)返回變體類型值〔Variant〕?!?〕ExitFunction:表示退出函數(shù)過程,常常是與選擇結構〔If或SelectCase語句〕聯(lián)用,即當滿足一定條件時,退出函數(shù)過程?!?〕形參數(shù)列表:形參的定義與子過程完全相同。

函數(shù)過程的調(diào)用同標準函數(shù)調(diào)用,其形式為:函數(shù)過程名([實參列表])注意:

實參列表中的個數(shù)必須與形參個數(shù)相同,位置與類型一一對應。可以是同類型的常量、變量、表達式。函數(shù)調(diào)用只能出現(xiàn)在表達式中,其功能是求得函數(shù)的返回值。函數(shù)過程的調(diào)用參數(shù)傳送:指主調(diào)過程的實參傳遞給被調(diào)過程的形參。

1.形參與實參2.實際參數(shù)和形式參數(shù)的傳送方式按位置傳送方式指名參數(shù)傳送方式6-3參數(shù)傳送6-3-1形式參數(shù)與實際參數(shù)

傳址:

形參得到的是實參的地址,當形參值的改變同時也改變實參的值;傳值:

形參得到的是實參的值,形參值的改變不會影響實參的值。6-3-2

傳值與傳地址例:兩個變量的交換。SubSwap1(ByValx%,ByValy%)t%=x:x=y:y=tEndSubPrivateSubCommand1_Click()a%=10:b%=20:Swap1a,b '傳值Print"A1=";a,"B1=";b

a=10:b=20:

Swap2a,b

'傳址

Print"A2=";a,"B2=";bEndSubSubSwap2(x%,y%)t%=x:x=y:y=tEndSub數(shù)據(jù)傳遞的幾點說明:1.參數(shù)的數(shù)據(jù)類型2.按值傳遞參數(shù)形參是實參的一個副本3.按地址傳遞參數(shù)形參、實參共用內(nèi)存單元4.子過程執(zhí)行一系列操作,函數(shù)過程返回一個值注意:如果實參是常量〔系統(tǒng)常量、符號常量〕或者表達式,那么無論定義時使用值傳遞還是地址傳遞,都是按值傳遞將常量或者表達式的計算值傳遞給形參。6-3-3數(shù)組參數(shù)的傳遞VisualBasic允許把數(shù)組作為實參傳送到過程中。數(shù)組作參數(shù)是通過傳地址方式傳送的。在傳送數(shù)組時,除遵守參數(shù)傳送的一般規(guī)那么外,還應注意以下幾點:1.把一個數(shù)組的全部元素傳送給一個過程,應將數(shù)組名分別寫入形參列表中,并略去數(shù)組的上下界,但括號不能省略。PrivateSubSort(a()Assingle)……EndSub其中形參“a()〞即為整個數(shù)組2.被調(diào)過程可通過Lbound和Ubound函數(shù)確定實參數(shù)組的上、下界。3.當用數(shù)組作形參時,對應的實參必須也是數(shù)組,且類型要一致。4.實參和形參結合是按地址傳遞,即形參數(shù)組和實參數(shù)組共用一段內(nèi)存單元。例如:定義了實參數(shù)組b(1to8),給它們賦了值,調(diào)用Sort()過程的形式如下:

Sortb()或CallSort(b())調(diào)用時形參數(shù)組a和實參數(shù)組b虛實結合,共用一段內(nèi)存單元,如下所示。因此在Sort()過程中改變數(shù)組a的各元素值,也就相當于改變了實參數(shù)組b中對應的元素的值。

b(1)b(2)b(3)b(4)b(5)b(6)b(7)b(8)a(1) a(2)a(3)a(4)a(5)a(6)a(7)a(8)參數(shù)為數(shù)組時虛實結合示意圖

1.確定自定義的過程是子過程還是函數(shù)過程函數(shù)過程名有值,子過程名無值。2.過程中形參的個數(shù)和傳遞方式確實定過程中參數(shù)的作用是實現(xiàn)過程與調(diào)用者的數(shù)據(jù)通信。(1)從主調(diào)程序獲得初值,值傳遞。(2)將結果返回給主調(diào)程序,地址傳遞。3.實參與形參結合時對應問題個數(shù)、類型、位置、次序一一對應。形參是值傳遞,對應實參可以是表達式、常量、數(shù)組元素。形參是地址傳遞,對應實參只能是簡單變量。數(shù)組、記錄類型、對象只能是地址傳遞。使用過程本卷須知可選參數(shù):在定義一個過程時,在形參表中參加Optional,可將局部形式參數(shù)定義成可選參數(shù)??勺儏?shù):用ParamArray關鍵字指明時,過程將能夠接受任意個數(shù)的參數(shù)。這種具有可變參數(shù)的過程需要用關鍵字ParamArray來定義,一般格式為:Sub過程名(ParamArray數(shù)組名())其中“數(shù)組名〞是形式參數(shù),只有名字和括號,沒有上下界。由于省略了變量類型,“數(shù)組〞的類型默認為Variant類型。6-3-4可選參數(shù)與可變參數(shù)對象參數(shù):可向過程傳遞對象,包括窗體和控件。窗體參數(shù)控件參數(shù):6-3-5對象參數(shù)局部變量除了用Dim語句聲明外,還可以用Static語句將變量聲明為靜態(tài)變量,它在程序運行過程中可保存變量的值。靜態(tài)變量的定義形式6.4靜態(tài)變量

第7章多窗體的程序設計主要內(nèi)容7-1多窗體的建立7-2多窗體的執(zhí)行與保存7-3SubMain過程7-1多窗體的建立

多重窗體是指一個應用程序中有多個并列的普通窗體,每個窗體可以有自己的界面和程序代碼,完成不同的功能。1.添加窗體“工程〞|“添加窗體〞|“新建〞2.窗體語句Load語句:將窗體裝入到內(nèi)存,此時窗體并沒有顯示出來。

形式:Load窗體名稱Unload語句:從內(nèi)存中卸載窗體形式:Unload窗體名稱如果關閉窗體自己,可用

Me代替窗體名,即: UnloadMe3.窗體方法Show方法:顯示一個窗體〔使用Show方法把窗體裝入內(nèi)存,并顯示出來〕 [窗體名稱.]ShowHide方法:隱藏窗體,并沒有從內(nèi)存中刪除 [窗體名稱.]Hide

4.不同窗體間數(shù)據(jù)的存取存取控件的屬性另一窗體名.控件名.屬性如為form2窗體上的Label1的Cap

溫馨提示

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

評論

0/150

提交評論