第3章 VB程序語句與控制結(jié)構(gòu).doc_第1頁
第3章 VB程序語句與控制結(jié)構(gòu).doc_第2頁
第3章 VB程序語句與控制結(jié)構(gòu).doc_第3頁
第3章 VB程序語句與控制結(jié)構(gòu).doc_第4頁
第3章 VB程序語句與控制結(jié)構(gòu).doc_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章VB程序語句與控制結(jié)構(gòu)一個VB應用程序主要由用戶界面和響應各事件的程序代碼組成,程序代碼是應用程序的核心。本章首先介紹程序代碼設計的基礎知識,再通過一些典型的例子,使大家逐步掌握編程的思路和技巧。VB雖然是面向?qū)ο蟮某绦蛟O計語言,但在代碼設計中仍然支持結(jié)構(gòu)化程序設計的三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。本章將主要介紹數(shù)據(jù)的輸入與輸出、三種基本程序控制結(jié)構(gòu)及語句。3.1數(shù)據(jù)的輸入與輸出VB的輸入/輸出有多種形式,常用的輸入方式有:使用鍵盤輸入數(shù)據(jù)的函數(shù)InputBox以及文本框等控件。常用的輸出方式有:Print方法、MsgBox函數(shù)和過程以及圖形框、文本框、標簽等控件。有關控件的使用在其第六章中介紹,本節(jié)主要介紹InputBox函數(shù)、MsgBox函數(shù)與過程以及Print方法的使用。311 InputBox函數(shù)格式:InputBox(提示,標題,默認,x坐標位置,y坐標位置)功能:InputBox函數(shù)產(chǎn)生一個對話框,作為輸入數(shù)據(jù)的界面,等待用戶輸入內(nèi)容,當用戶單擊“確定”按鈕或按回車鍵,函數(shù)返回輸入的值,其值的類型為字符串(String)。說明:(1)“提示”:必選項。字符串表達式,在對話框中作為提示信息顯示,可為漢字。若要多行顯示,必須在每行行末加回車符Chr(13)和換行符Chr(10)符或VB符號常數(shù)vbCrLf。(2)“標題”:可選項。字符串表達式,在對話框的標題區(qū)顯示;若省略,默認為應用程序名。(3)“默認”:可選項。字符串表達式,當輸入對話框中無輸入時,則該默認值作為輸入的內(nèi)容。(4)“x坐標位置、y坐標位置”:可選項。整型表達式,確定對話框左上角相對于屏幕左上角的x、y坐標,單位為twip。該項省略時,對話框出現(xiàn)在屏幕水平、垂直中間的位置。【注意】各項參數(shù)次序必須一一對應,除了“提示”一項不能省略外,其余各項均可省略,處于中間的默認部分要用逗號占位符跳過。例如,運行如下代碼段,結(jié)果顯示如圖3-1所示,當單擊“確定”按鈕后,變量strName的值為“李林”。Dim strName as String*20Title = InputBox函數(shù)示例Msg1 = 請輸入你的姓名StrName=InputBox(Msg1,Title, ,200,200)圖3-1312 Msgbox函數(shù)與過程MsgBox用于輸出數(shù)據(jù),它會在屏幕上顯示一個對話框。在對話框中顯示消息,等待用戶單擊按鈕,并返回所選按鈕的整數(shù)值。有函數(shù)和過程兩種形式。MsgBox函數(shù)格式: 變量=MsgBox(提示,按鈕,標題)MsgBox過程格式: MsgBox 提示,按鈕,標題說明:(1)“提示”和“標題”的意義與InputBox函數(shù)中對應的參數(shù)相同。(2)“按鈕”:可選項。數(shù)值表達式,決定信息框按鈕的數(shù)目和類型及出現(xiàn)在信息框上的圖標類型。該數(shù)值表達式的值由4部分數(shù)值求和得到,它也可以用符號常量表示。其設置見表3.1。(3)MsgBox函數(shù)返回所選按鈕整數(shù)值的意義見表3.2(4)MsgBox過程與MsgBox函數(shù)的區(qū)別是:MsgBox過程沒有返回值,也不用圓括號“()”,所以常用于較簡單的信息顯示。其他用法與MsgBox函數(shù)相同。表3.1“按鈕”設置及意義類別符號常量按鈕值意義按鈕數(shù)目vbOkOnlyvbOkCancelvbAbortRetryIgnorevbYesNoCancelvbYesNovbRetryCancel012345只顯示“確定”按鈕。顯示“確定”和“取消”按鈕。顯示“終止”、“重試”和“忽略”按鈕。顯示“是”、“否”和“取消”按鈕。顯示“是”和“否”按鈕。顯示“重試”和“取消”按鈕。圖標類型vbCriticalvbQuestionvbExclamationvbInformation16324864顯示警示圖標,紅色STOP標志。顯示詢問圖標?。顯示警告消息圖標!。顯示信息圖標i。默認按鈕vbDefaultButton1vbDefaultButton2vbDefaultButton30256512第一個按鈕為默認按鈕。第二個按鈕為默認按鈕。第三個按鈕為默認按鈕。模式vbApplicationModalvbSystemModal04096應用程序模式系統(tǒng)模式表3.2MsgBox函數(shù)的返回值返回值符號常量被單擊的按鈕1vbOk確定2vbCancel取消3vbAbort終止4vbRetry重試5vbIgnore忽略6vbYes是7vbNo否例如,在代碼中加入以下語句,程序在運行中會打開圖3-2所示的消息框。Msg=”程序運行出錯,繼續(xù)嗎?”Title=”Msgbox演示程序”Resp=MsgBox(Msg,308,Title)If Resp=6 thenPrint“你選擇了是!”ElsePrint“你選擇了否!”End If圖3-2程序中,MsgBox函數(shù)的參數(shù)308也可以寫成符號常量的形式。因308=4+48+256,因而可將數(shù)字308寫成vbYesNo+vbCritical+vbDefaultButton2的常量表達式的形式;同樣,If語句也可寫成If Resp=vbYes then的形式。【例3.1】輸入圓的半徑,求圓的面積。(1)進入代碼窗口,編輯程序代碼如下:Private Sub Form_Click()Const Pi = 3.14定義常量PiDim r As Double, a as Doubler = InputBox(請輸入圓的半徑)a = Pi * r * rMsgBox(圓的面積為: & a )End Sub(2)運行程序,輸入半徑為5,輸入、輸出對話框如圖3-3所示。圖3-3313 Print方法Print方法常用于在屏幕上輸出信息。在本書第一章1.4.2節(jié)中已有介紹。例如,執(zhí)行如下代碼:a = 10:b=15c$ =“歡迎使用Visual Basic”Print“數(shù)值表達式a+b的值為:”;a+bPrintPrint“字符串變量c$的值為:”;c$運行結(jié)果如下:“數(shù)值表達式a+b的值為: 25“字符串變量c$的值為:歡迎使用Visual Basic【例3.2】 用Print方法輸出圖形。程序運行結(jié)果如圖3-4所示。Private Sub Form_Click()For i=1 to 5Print Tab(i);String(6-i,”)Next IEnd Sub圖3-4【注意】當Tab(i)中i的值小于當前位置的值時,重新定位在下一行的i列。例如,執(zhí)行以下語句:Print tab(5);“abcdefg”;tab(8);“1234567”運行結(jié)果如下:abcdefg1234567314打印機輸出Visual Basic除了可以在屏幕上輸出以外,還可以在打印機上輸出所需要的信息。1用PrintForm方法打印格式:窗體名.PrintForm功能:將指定窗體的信息傳送到打印機進行打印。說明:(1)缺省窗體名,則打印當前窗體的信息。(2)PrintForm方法不僅可以打印窗體上的文本,而且還可以打印出窗體上的任何可見的控件及圖形。若窗體中包含圖形,需要將輸出窗體的AutoReDraw屬性設置為True。2用Printer對象打印格式:Printer.Print 表達式列表功能:把“表達式列表”中的內(nèi)容輸出到打印機上。例如,下列語句行將字符串“歡迎使用Visual Basic”輸出到Windows系統(tǒng)的缺省打印機上。Printer.Print 歡迎使用Visual BasicPrinter對象包含多種屬性和方法用以控制打印的各種特性。Printer對象的屬性不能在屬性窗口中設置,只能在運行時通過程序代碼來設置。下面介紹一些Printer對象常用的屬性和方法。(1)Page屬性Page屬性用來保持和返回當前的頁號,格式為:Printer.Page每當打印完一頁后,Page屬性值自動增1。通常用Page屬性打印頁號,例如:Printer.Print 第; Printer.Page; 頁(2)NewPage方法NewPage方法用以結(jié)束 Printer 對象中的當前頁并前進到下一頁,也就是實現(xiàn)換頁操作,格式為:Printer.NewPage執(zhí)行NewPage方法可以強制使打印機前進到下一個打印頁,并將打印位置重置到新頁的左上角。調(diào)用 NewPage方法時,它將 Printer 對象的 Page 屬性加 1。(3)EndDoc 方法EndDoc方法用來結(jié)束文件打印,格式為:Printer.EndDoc執(zhí)行EndDoc方法表明打印操作的結(jié)束,并向打印機管理程序發(fā)送最后一頁的退出信號,并把Page屬性重置為1。(4)KillDoc方法KillDoc方法用于立即終止當前打印作業(yè),格式為:Printer.KillDoc執(zhí)行KillDoc方法將中斷Print函數(shù)的執(zhí)行,且清除打印緩沖區(qū)中的所有信息?!纠?.3】 編寫程序,實現(xiàn)連續(xù)打印“打印測試頁1”和“打印測試頁2”兩張測試頁。Private Sub Form_Click()Printer.Print 打印測試頁;Printer.PagePrinter.NewPagePrinter.Print 打印測試頁;Printer.PagePrinter.EndDocEnd Sub單擊窗體后,打印機打印兩頁,分別為“打印測試頁1”和“打印測試頁2”。3.2順序結(jié)構(gòu)順序結(jié)構(gòu)就是程序的各語句按出現(xiàn)的先后次序執(zhí)行。在Visual Basic中順序結(jié)構(gòu)的語句主要有賦值語句、輸入語句、輸出語句等。3.2.1賦值語句賦值語句是程序設計中最基本的語句,也是為變量和事件的屬性賦值的最主要的方法。賦值語句的一般形式為:變量名= 表達式或?qū)ο竺?屬性 = 表達式賦值語句的作用:先計算右邊表達式的值,然后賦給左邊的變量或控件屬性。例如:sum= 100把數(shù)值常量100賦給變量sumaver=sum/10將表達式sum/10的值賦給變量averText1.Text =”Hello!”為文本框顯示字符串Text1.Text=”清除文本框的內(nèi)容【注意】(1)表達式可以是任何類型的表達式,一般應與變量名的類型一致,當表達式的類型與變量的類型不一致時,作如下處理:若左邊是字符型變量,將右邊非字符型轉(zhuǎn)換成左邊的類型。例如:C$=123數(shù)值常量123轉(zhuǎn)換為字符型數(shù)據(jù)”123”賦給c若左邊是數(shù)值型變量,右邊表達式為數(shù)字字符串時,自動轉(zhuǎn)換成數(shù)值類型賦給左邊變量。若右邊表達式有非數(shù)字字符或空串時,則出現(xiàn)類型不匹配錯誤。例如:m%=”100”數(shù)字串”100”轉(zhuǎn)換為數(shù)值100賦給變量mm%=”a100”出現(xiàn)類型不匹配的錯誤m%=”出現(xiàn)類型不匹配的錯誤若左邊是邏輯型變量,右邊是數(shù)值型表達式,非0轉(zhuǎn)換為True,0轉(zhuǎn)換為False;反之,將邏輯型表達式的值賦給數(shù)值型變量時,True轉(zhuǎn)換為-1,F(xiàn)alse轉(zhuǎn)換為0。例如:Dim f as Booleanx%=10:y%=5f=x+yf中結(jié)果為Truef=x-10f中結(jié)果為Falsen%=xy表達式xy值為True,n中結(jié)果為-1n%=x=y表達式x=y值為False,n中結(jié)果為0不管表達式的值是什么類型,都可以直接賦給一個變體類型的變量。(2)賦值號與關系運算符等于都用“=”表示,但系統(tǒng)不會產(chǎn)生混淆,會根據(jù)所處的位置自動判斷是何種意義的符號。也就是在條件表達式中出現(xiàn)的是等號,否則是賦值號。例如:賦值語句a=b與b=a是兩個結(jié)果不相同的賦值語句,而在關系表達式中a=b與b=a兩種表示方法是等價的。(3)賦值號左邊只能是變量,不能是常量、符號常量、表達式。下列語句均為錯誤的賦值語句:5 = x + y左邊是常量vbcrlf=34左邊是符號常量x + y = 5左邊是表達式(4)不能在一條賦值語句中,同時給多個變量賦值。例如:要對x,y,z三個變量值賦初值1,如下面語句書寫語法上沒錯,但結(jié)果不正確:Dim x%, y%, z%x = y = z = 1執(zhí)行該語句前x,y,z的變量值默認是0,Visual Basic在編譯時,將右邊兩個“=”作為關系運算符處理,先進行y=z比較,結(jié)果為True(-1);接著True=1比較結(jié)果False(0);最后將False賦值給x,因此最后三個變量中的值仍為0。正確書寫應分別使用三條賦值語句完成,寫成:x=1y=1z=1或x=1:y=1:z=1書寫在同一行上(5)如下賦值語句形式很常用:sum=sum+x表示將變量sum、x中的值相加后再賦給sum,與循環(huán)結(jié)構(gòu)結(jié)合使用,起到累加作用。n=n+1表示將變量n的值加1后再賦給n,與循環(huán)結(jié)構(gòu)結(jié)合使用,起到計數(shù)器的作用。3.2.2順序結(jié)構(gòu)舉例【例3.4】輸入某位同學的三門課程的成績,求它們的平均分。程序代碼如下:Private Sub Form_Click()Dim s1!,s2!,s3!,aver!s1=InputBox(“輸入第一門課程的成績”)s2=InputBox(“輸入第二門課程的成績”)s3=InputBox(“輸入第三門課程的成績”)aver=(s1+s2+s3)/3print“aver=”;averEnd Sub33選擇結(jié)構(gòu)在人們所處理的問題中,常常需要根據(jù)某些給定的條件是否滿足來決定所執(zhí)行的操作。選擇結(jié)構(gòu)就是對給定條件進行判斷,從而選擇執(zhí)行不同分支,一般可由條件語句來完成。VB中的條件語句包括If語句和Select語句。331 If條件語句1ifThen語句語句格式:(1)If Then (2)If ThenEnd If語句功能:當?shù)闹禐門rue或非零時,執(zhí)行Then后面的語句(或語句塊),否則不做任何操作,實現(xiàn)單分支選擇結(jié)構(gòu)。其流程如圖3-5圖3-5說明:(1)表達式一般為關系表達式或邏輯表達式,也可為算術(shù)表達式。例如:If n=0 Then EndIf 年齡=35 and 職稱=”講師”Then n=n+1If x-5 Then print“x5”(2)格式(1)中的是單行語句,若要執(zhí)行多條語句,語句間用冒號分隔,且必須在一行上。格式(2)中的可以是一條或多條語句。例如,語句If xy Then x=x-5:y=y+5也可寫成If xy Thenx=x-5y=y+5End If【例3.5】 輸入x的值,并輸出其絕對值。程序代碼如下:Private Sub Command1_Click()Dim x!x = InputBox(請輸入一個數(shù))If x0 Thenx = -xPrint 絕對值是:; xEnd Sub2IfThenElse語句語句格式:(1)If Then Else (2)If ThenElseEnd If語句功能:當?shù)闹禐門rue或非零時,執(zhí)行Then后面的語句(或語句塊),否則執(zhí)行Else后面的語句(或語句塊),實現(xiàn)雙分支選擇結(jié)構(gòu)。其流程如圖3-6圖3-6例如:輸入一個整數(shù),判斷其奇偶性。程序代碼如下:Private Sub Form_Click()Dim x as integerx=InputBox(“請輸入一個整數(shù)”)Ifx mod 2=0 Then Print x;”是偶數(shù)”Else Print x;”是奇數(shù)”End Sub3IfThenElseIf語句語句格式:If ThenElseIf ThenElseEnd If語句功能:根據(jù)不同的表達式值確定執(zhí)行哪個語句塊,實現(xiàn)多分支選擇結(jié)構(gòu)。其流程如圖3-7圖3-7使用說明:先計算的值,若為真,則執(zhí)行,并跳過其他分支語句執(zhí)行If語句的后續(xù)語句(即End If后面的語句);若為假,則計算的值,依此類推,直到找到一個為真的條件時,才執(zhí)行相應的語句塊,然后執(zhí)行End If后面的語句。格式中的Else是可選項,表示若無任何表達式值為真時,則執(zhí)行;若無Else選項,且所有條件表達式值都不為真,則不執(zhí)行If語句中的任何語句塊。【注意】當If語句內(nèi)有多個表達式的值為真時,只執(zhí)行第一個為真的表達式后的語句塊?!纠?.6】在文本框中輸入若干字符,統(tǒng)計其中字母字符、數(shù)字字符以及其他字符的個數(shù),并顯示結(jié)果。程序代碼如下:Dim countX%,countY%,countZ%Private Sub Text1_KeyPress(KeyAscii As Integer)Dim c$c=chr(KeyAscii)將文本框中輸入的字符賦給變量cIf Ucase(c)=”A”And Ucase(c)=”0”And c=”9”ThencountY=county+1ElsecountZ=countZ+1End IfIf KeyAscii=13 Then當按回車鍵字符輸入完畢,顯示結(jié)果Print“字母字符有”;countX;”個”Print“數(shù)字字符有”;countY;”個”Print“其他字符有”;countZ;”個”End IfEnd Sub332 Select Case語句Select Case語句是多分支結(jié)構(gòu)的另一種表示形式,它可使程序代碼更加簡單、清晰、易讀。語句格式:Select CaseCaseCaseCase ElseEnd Select語句功能:根據(jù)條件表達式的值轉(zhuǎn)向相應的語句塊,實現(xiàn)多路分支。其流程如圖3-8。圖3-8使用說明:先求出條件表達式的值,然后從上到下跟各個Case子句中的表達式列表進行匹配,如果找到了相匹配的值,則執(zhí)行該子句下的語句塊。若有多個Case子句的值與條件表達式的值相匹配,則只執(zhí)行第一個與之匹配的Case子句后面的語句塊。如果沒有任何Case子句中的表達式列表與之匹配,則執(zhí)行Case Else子句中的語句塊。格式說明:(1)條件表達式可以是數(shù)值表達式或字符串表達式,一般為變量。(2)表達式列表用來描述條件表達式的可能取值情況,可以由多個表達式組成,表達式與表達式之間要用“,”隔開,必須與條件表達式的數(shù)據(jù)類型相同且有確定的值。表達式列表有以下三種形式:表達式或由逗號分隔的多個表達式例如:Case“A”Case 1,2,3Case a,b To 例如:Case -10 to 10Case“A”to“F”Casea to bIs 例如:Is =a+b【例3.7】某商店進行購物打折優(yōu)惠活動促銷,根據(jù)每位顧客一次性購物的消費額給予不同的折扣,具體方法如下:(1) 購物1000元以上的九五折優(yōu)惠,(2) 購物2000元以上的九折優(yōu)惠,(3) 購物3000元以上的八五折優(yōu)惠,(4) 購物5000元以上的八折優(yōu)惠。程序代碼如下:Private Sub Command1_Click()Dim x As Single, y As Singlex = InputBox(請輸入購物金額:)Select Case xCase Is 1000Print 不優(yōu)惠y = xCase Is 2000Print 九五折優(yōu)惠y = 0.95 * xCase Is 3000Print 九折優(yōu)惠y = 0.9 * xCase Is = 5000Print 八折優(yōu)惠y = 0.8 * xEnd SelectPrint 優(yōu)惠后應收款額為:; yEnd Sub333選擇結(jié)構(gòu)的嵌套將一個選擇結(jié)構(gòu)放在另一個選擇結(jié)構(gòu)內(nèi),稱為選擇結(jié)構(gòu)的嵌套。If語句的多分支格式實際上是一種If結(jié)構(gòu)的嵌套形式。選擇結(jié)構(gòu)的嵌套既可以是同一種結(jié)構(gòu)的嵌套,也可以是不同結(jié)構(gòu)之間的嵌套。例如可以在If結(jié)構(gòu)中又包含If語句,或在If結(jié)構(gòu)中包含Select語句等形式。例如:若x大于0,則y等于1;若x小于0,則y等于-1;否則,y等于0。語句如下:If x0 Then y=1 Else If x0方程有兩個不同實根s=sqr(disc)Print“x1=”;(-b+s)/(2*a)Print“x2=”;(-b-s)/(2*a)Case Is=0方程有兩個相同實根Print“The root is:”Print“x=”;-b/(2*a)Case Else方程沒有實根Print“No real root.”End SelectEnd IfEnd Sub334條件函數(shù)1IIF函數(shù)使用IIf函數(shù)也可以實現(xiàn)簡單的雙分支選擇結(jié)構(gòu)。語句格式:result = IIF(條件表達式,)語句說明:(1)“result”是函數(shù)的返回值:當條件表達式為真時,函數(shù)返回的值,當條件表達式為假時,函數(shù)返回的值。(2)和可以是任何表達式。例如:語句If xy Then max=x Else max=Y也可寫成:Max=IIf(xy,x,y)2Choose()函數(shù)使用Choose函數(shù)也可以實現(xiàn)簡單的多分支選擇結(jié)構(gòu)。語句格式:result=Choose(整數(shù)表達式,選項列表)語句說明:Choose函數(shù)根據(jù)整數(shù)表達式的值來決定返回選項列表中的某個值。若整數(shù)表達式值是1,則Choose函數(shù)會返回列表中的第1個選項。若整數(shù)表達式值是2,則會返回列表中的第2個選項,以此類推。若整數(shù)表達式的值小于1或大于列出的選項數(shù)目時,Choose函數(shù)返回Null。例如:c=Choose(x,”red”,”green”,”blue”)當x值為1時,返回“red”;當x值為2時,返回“green”;當x值為3時,返回“blue”;當x不在1-3之間,函數(shù)返回Null。3、Switch函數(shù)Switch函數(shù)稱開關函數(shù),計算一個條件表達式列表,并返回與該表中一個等于True的條件表達式相聯(lián)系的一個表達式的值。語句格式:Result=Switch(,)語句說明:當條件表達式1為True時,返回表達式1的值;當條件表達式2為True時,返回表達式2的值,依此類推。例如:y=switch(x0,1,x=0,0,x0,-1)34循環(huán)結(jié)構(gòu)在實際應用中,經(jīng)常遇到一些需要反復多次處理的問題,例如求若干個數(shù)之和、積等。重復執(zhí)行某一程序塊稱作循環(huán)。Visual Basic提供了多種不同風格的循環(huán)結(jié)構(gòu)語句,包括Do Loop、While Wend,F(xiàn)or Next,F(xiàn)or Each Next等,其中最常用的是For Next語句和Do Loop語句。341計數(shù)循環(huán)For循環(huán)又稱計數(shù)循環(huán),常用于循環(huán)次數(shù)預知的場合。語句格式如下:For = ToStep Next 說明:(1)參數(shù)、和都是數(shù)值型。(2)內(nèi)是一系列VB合法的語句,構(gòu)成循環(huán)體。(3)步長為可選參數(shù),如果沒有指定,則默認值為1。步長可以為正,也可以為負。若為正,則初值應小于或等于終值;若為負,則初值應大于或等于終值,這樣才能保證執(zhí)行循環(huán)體內(nèi)的語句;若為0,循環(huán)永遠不能結(jié)束(即出現(xiàn)死循環(huán))。(4)該語句的執(zhí)行過程如圖3-9所示:把“初值”賦給“循環(huán)變量”,僅被賦值一次。檢查循環(huán)變量的值是否超過終值,若是就結(jié)束循環(huán),執(zhí)行Next后的下一語句;否則執(zhí)行一次循環(huán)體。執(zhí)行Next語句,循環(huán)變量的值增加一個步長,轉(zhuǎn)繼續(xù)循環(huán)。圖3-9【例3.9】求1到100的和。Private Sub Command1_Click()Dim i As Integer, sum As Integersum = 0給變量sum賦初值0For i = 1 To 100sum = sum + i累加Next iPrint sumEnd Sub思考:若要將上例的求和問題改為求積,如求10!,應如何編寫代碼?【注意】(1)一般在循環(huán)體內(nèi)不要修改循環(huán)變量的值,否則會影響原有的循環(huán)控制狀況。例如以下程序段:For i=1 To 5If i Mod 2 = 0 Then i = i + 1Print i;Next i程序執(zhí)行打印結(jié)果為:1 3 5循環(huán)體執(zhí)行了3次,若沒有第二行,程序應執(zhí)行5次。(2)如果在循環(huán)體中沒有修改循環(huán)變量的值,則循環(huán)的次數(shù)可以從For語句中指定的參數(shù)直接計算出來:循環(huán)次數(shù)=Int(循環(huán)終值-循環(huán)初值)/步長)+1如:For i=1 To 10 Step 3Print i;Next i循環(huán)次數(shù)=int(10-1)/3)+1=4【例3.10】 求Fibonacci數(shù)列的前30個數(shù)。這個數(shù)列有如下特點:前兩個數(shù)為1,從第三個數(shù)開始,其值是前兩個數(shù)的和,即:F1=1 (n=1)F2=1 (n=2)Fn= Fn1+ Fn2(n3)程序如下:Private Sub Command1_Click()Dim i As IntegerDim f1 As Long, f2 As Long, fn As Longf1 = 1f2 = 1Print f1,Print f2,For i = 3 To 30f1,f2已知,從第三個數(shù)開始計算fn = f1 + f2f1 = f2f2 = fn更改f1,f2的值Print fn,If i Mod 4 = 0 Then Print打印4個數(shù)后換行打印NextEnd Sub運行結(jié)果如圖3-10:圖3-10342條件型循環(huán)條件型循環(huán)是根據(jù)某個條件決定循環(huán)的次數(shù)。常用的循環(huán)結(jié)構(gòu)有:While循環(huán)結(jié)構(gòu)及Do循環(huán)結(jié)構(gòu)。1. While循環(huán)結(jié)構(gòu)While循環(huán)結(jié)構(gòu)用WhileWend語句來實現(xiàn),語句格式如下:While Wend語句說明:(1)“條件表達式”可以是關系表達式、邏輯表達式或數(shù)值表達式。如果是數(shù)值表達式,值為0被作為False,非零值則為True。(2)語句的執(zhí)行過程是:先計算條件表達式的值,若為True,則執(zhí)行循環(huán)中的語句塊,遇到Wend語句時返回While語句繼續(xù)判斷條件表達式的值,若仍為真,則繼續(xù)執(zhí)行語句塊,重復上述過程直到條件表達式的值為False,則退出循環(huán)結(jié)構(gòu),執(zhí)行Wend語句的后續(xù)語句。循環(huán)環(huán)執(zhí)行過程如圖3-11。(3)如果條件一開始就不成立,則語句塊一次也不會被執(zhí)行。圖3-11例如,用While循環(huán)語句改寫例3.9,程序代碼如下:Private Sub Command1_Click()Dim i As Integer, sum As Integersum = 0 :i=1While i=100sum = sum + ii=i+1WendPrint sumEnd Sub2. Do循環(huán)結(jié)構(gòu)Do循環(huán)結(jié)構(gòu)的形式較靈活,可分為以下幾種:(1)先判斷條件的DoLoop循環(huán)格式一:Do WhileLoop語句執(zhí)行過程:先計算條件表達式的值,若為True,則執(zhí)行語句塊中的語句;若為False則退出循環(huán)結(jié)構(gòu)。循環(huán)環(huán)執(zhí)行過程如圖3-12。格式二:Do UntilLoop語句執(zhí)行過程和格式一基本相同,唯一不同的是,它在條件表達式為False時重復執(zhí)行語句塊,直到條件為True時退出循環(huán)結(jié)構(gòu)。循環(huán)環(huán)執(zhí)行過程如圖3-13。圖3-12圖3-13【例311】將10000元存入銀行,按3.25%的利率,試問多長時間就會連本帶利翻一番。程序代碼如下:Private Sub Form_Click()Dim year%,money!,original!,interest!original=10000money=originalInterest=3.25/100Do While money2*originalyear=year+1money=money+interest*money累計每過一年的連本帶利的金額LoopPrint“In”;year;”years,youll have”;moneyEnd Sub請讀者自己使用格式二改寫上述程序。(2)后判斷條件的DoLoop循環(huán)格式三:DoLoop While語句執(zhí)行過程:首先執(zhí)行語句塊中語句,然后計算條件表達式,如果條件表達式值為True,則繼續(xù)執(zhí)行語句塊,否則退出循環(huán)結(jié)構(gòu)。循環(huán)體至少執(zhí)行一次。循環(huán)環(huán)執(zhí)行過程如圖3-14。格式四:DoLoop Until格式四的執(zhí)行過程和格式三基本一樣,也是先執(zhí)行后判斷。唯一不同的是,它在條件表達式值為假時重復執(zhí)行語句塊,直到條件表達式值為真時退出循環(huán)結(jié)構(gòu)。循環(huán)環(huán)執(zhí)行過程如圖3-15。圖3-14圖3-15【例312】用輾轉(zhuǎn)相除法求兩正整數(shù)m,n的最大公約數(shù)。求最大公約數(shù)的算法如下:(1)對于已知兩數(shù)m,n,使得mn;(2)m除以n得余數(shù)r;(3)令mn,nr;(4)若r0,轉(zhuǎn)到(2)繼續(xù)執(zhí)行,直到r=0求得最大公約數(shù)為m,循環(huán)結(jié)束。程序代碼如下:Private Sub Form_Click()Dim m%,n%m = InputBox(輸入m)n = InputBox(輸入n)If mnt=mm=nn=tEnd Ifm1=mn1=nDor = m Mod nm = nn = rLoop while ( r 0)Print m1; ,; n1; 的最大公約數(shù)為; mEnd Sub(3)無條件循環(huán)格式:DoLoop重復執(zhí)行循環(huán)體,循環(huán)不會停止,除非在循環(huán)體中有Exit Do語句或在執(zhí)行時按下Ctrl+Break鍵。例如:Private Sub Form_Click()s=0i=0Doi=i+1s=s+iIf s=3000 Then Exit Do當s3000,執(zhí)行Exit Do語句退出循環(huán)LoopPrint i,sEnd Sub343循環(huán)結(jié)構(gòu)的嵌套在一個循環(huán)語句的循環(huán)體內(nèi)又包含另一個循環(huán)語句,稱為循環(huán)的嵌套。循環(huán)的嵌套既可以是同一種循環(huán)結(jié)構(gòu)的嵌套,也可以是不同循環(huán)結(jié)構(gòu)之間的嵌套。例如,可以在For循環(huán)中包含另一個For循環(huán),也可以在Do循環(huán)中包含一個For循環(huán)?!纠?13】輸出3-100之間的素數(shù)。素數(shù),就是一個大于2且只能被1和本身整除的整數(shù)。判斷某數(shù)m是否為素數(shù)的算法是:對于m從i=2,3,m-1判別m能否被i整除,只要有一個能整除,m就不是素數(shù),否則m是素數(shù)。程序代碼如下:Private Sub Form_Click()Dim m%,i%,k%,Flag As BooleanFor m=3 To 100Flag=TrueFor i=2 To m-1內(nèi)循環(huán)判斷m是否為素數(shù)If (m mod i)=0 Then Flag=FalseNext iIf Flag Thenk = k + 1If (k Mod 10) = 0 Then Print m Else Print m;每行顯示10個End IfNext mEnd Sub實際上m不可能被大于m的數(shù)整除,因此為減少循環(huán)次數(shù),可將內(nèi)循環(huán)語句改為:For i=2 To int(sqr(m)循環(huán)次數(shù)就會大大減少。【注意】(1)內(nèi)外循環(huán)不能交叉。例如,以下程序段是錯誤的:For i=1 to 10For i=1 to 10For j=1 to 10應改為:For j=1 to 10Next iNext jNext jNext i(2)兩個并列的循環(huán)結(jié)構(gòu)的循環(huán)變量可以同名,但嵌套結(jié)構(gòu)中的內(nèi)循環(huán)變量不能與外循環(huán)變量同名。例如:正確的程序段錯誤的程序段For i=1 to 10For i=1 to 10For i=1 to 10Next iFor i=1 to 10Next iNext iNext i35輔助控制語句351 End語句End語句的作用是使程序結(jié)束運行,它可以放在任何事件過程中。語句格式如下:End在過程、函數(shù)、分支等的結(jié)束部分都用到以End開頭的語句,這些語句一般只結(jié)束某個過程或語句塊。如End Sub、End If、End Function等。352 With語句語句格式:With End With語句功能:用于對單個對象或用戶自定義類型變量執(zhí)行一系列語句,而不需重復地給出對象名或用戶自定義類型變量名。使用說明:(1)語句格式中,是指單個對象或用戶自定義類型變量。(2)該語句可以嵌套。(3)使用With語句對某個對象

溫馨提示

  • 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

提交評論