第4章 程序控制結(jié)構(gòu)_第1頁
第4章 程序控制結(jié)構(gòu)_第2頁
第4章 程序控制結(jié)構(gòu)_第3頁
第4章 程序控制結(jié)構(gòu)_第4頁
第4章 程序控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

程序控制結(jié)構(gòu)計算機系信息教研室面向?qū)ο蟮某绦蛟O計思想,事件驅(qū)動的編程機制一個VB應用程序由若干個對象構(gòu)成各個對象的功能主要通過其事件過程完成系統(tǒng)根據(jù)當前發(fā)生的事件,驅(qū)動執(zhí)行與該事件相對應的事件過程代碼。事件過程代碼采用結(jié)構(gòu)化程序設計VB程序設計特點任何算法功能都可以通過由程序模塊組成的三種基本程序結(jié)構(gòu)的組合:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)來實現(xiàn)。4.1.1算法概述算法是解決問題的方法步驟。編制程序的過程首先要設計算法方法步驟

例:將兩個變量x和y的值進行交換,設x=10,y=20分析:不能直接進行交換必須借助一個中間變量暫存x的值。算法:

(1)

將x的值暫存在t中;

(2)

將y的值存入x中;

(3)

將t的值存入y中。比較三個變量A、B、C中的值,然后輸出其中最大的數(shù)。算法為:(1)設置一個變量Max。(2)若A>B,則Max←A;否則Max←B。(3)若C>Max,則Max←C。(4)輸出Max。用計算機編程解決問題的算法應具有的特點有窮性(操作步驟是有限的)確定性(每一步具有確定的操作內(nèi)容)有效性(每一步都有確定的結(jié)果)有數(shù)據(jù)輸入和結(jié)果輸出算法的表示方法語言描述法用計算機編程就是用計算機語言來表示算法圖形法對于較復雜的問題還要借助流程圖或N-S圖來表示算法流程圖也稱為框圖,它是用一些幾何圖形、流向線和文字說明來表示各種類型的操作。在流程圖中所用的基本圖形及其意義都是由國家頒布的標準(GBISO5807-85)規(guī)定的。圖形法

例1將兩個變量x和y的值進行交換,設x=10,y=20例24.1.3三種基本結(jié)構(gòu)表示

順序結(jié)構(gòu)程序的流程是按照一個方向進行的,一個入口,一個出口,中間有若干條依次執(zhí)行的語句。選擇結(jié)構(gòu)程序的流程出現(xiàn)一個或多個分支,按一定的條件選擇其中之一執(zhí)行,即選擇結(jié)構(gòu)也叫分支結(jié)構(gòu)。它有一個入口,一個出口。中間可以有兩條或多條分支。循環(huán)結(jié)構(gòu)程序流程是按一定的條件重復多次執(zhí)行一段程序,被重復執(zhí)行的程序段叫循環(huán)體。循環(huán)結(jié)構(gòu)的種類按退出循環(huán)的條件當型(While)循環(huán)結(jié)構(gòu)直到型(Until)循環(huán)結(jié)構(gòu)按循環(huán)體至少執(zhí)行的次數(shù)0次循環(huán)1次循環(huán)循環(huán)結(jié)構(gòu)也只有一個入口和一個出口。且只允許有限次的重復,不能無限循環(huán)。當型0次循環(huán)直到型1次循環(huán)4.2數(shù)據(jù)的輸入與輸出操作

4.2.1數(shù)據(jù)輸出——Print方法

4.2.2輸入框函數(shù)——InputBox()

4.2.3消息框——MsgBox()

4.2.1數(shù)據(jù)輸出

1Print方法2與Print方法有關的函數(shù)1Print方法object.Print{Spc(n)|Tab(n)}expressioncharposobject:窗體(form)、立即窗口(Debug)、圖片框(PictureBox)、打印機(Printer)等對象。如果省略“對象名”,則在當前窗體上輸出。

Expression:要打印的數(shù)值表達式或字符串表達式。

Charpos:逗號或分號,指定下個字符的插入點。逗號分隔,則按標準格式顯示數(shù)據(jù)項,以14個字符位置為單位把輸出行分成若干個區(qū)段,每區(qū)段輸出一個表達式的值。分號或空格作分隔符,則按緊湊格式輸出。

注意:每執(zhí)行一次print方法自動換行。如果要在同一行繼續(xù)顯示,需在末尾加上逗號或分號2.與Print方法有關的函數(shù)(1)Tab函數(shù)與Print#語句或Print方法一起使用,對輸出進行定位。格式:Tab[(n)]參數(shù)n可選。如果當前行上允許的輸出寬度(格數(shù))大于n,則Tab將輸出位置移動到第n列上;

如果n小于1,則Tab將輸出位置移動到第1列。 如果n大于輸出行的寬度width,則Tab函數(shù)使用以下公式計算下一個輸出位置:

NextPosition=nModwidth每個Tab函數(shù)對應一個輸出項,各輸出項之間用分號分隔。Tab使用舉例Print"Hello";Tab(10);"VisualBasic"'第二個字從第10列開始輸出Print"Hello";Tab;"VisualBasic"'如果省略參數(shù),光標移至下一個輸出區(qū)輸出結(jié)果為:

HelloVisualBasic HelloVisualBasic(2)Spc函數(shù)格式:Spc(n)在顯示或打印列表中的下一個表達式之前插入n個空白數(shù),n為0~32767之間的整數(shù)。Spc函數(shù)與輸出項之間用分號隔開。如果n小于輸出行的寬度,則下一個打印位置將緊接在數(shù)個已打印的空白之后。如果n大于輸出行的寬度,則Spc利用下列公式計算下一個打印位置:當前位置+(nMod行寬)Spc函數(shù)只表示兩個輸出項之間的間隔。各輸出項之間用分號分隔。Format函數(shù)格式:

Format(<數(shù)值表達式><格式字符串>)

用Format函數(shù)可以使數(shù)值按“格式字符串”指定的格式輸出。說明:①“#”表示一個數(shù)字占位符。#的個數(shù)決定了顯示串的長度。在格式字符串中“#”的位置上有數(shù)字存在,就顯示出來;否則,該位置就什么都不顯示。②“0”表示一個數(shù)字占位符,與#的功能相同,只是多余位以0補齊。③“.”表示小數(shù)點占位符。小數(shù)點與#或0結(jié)合使用,根據(jù)格式字符串的位置。根據(jù)格式串,小數(shù)部分多余的數(shù)字按四舍五入顯示,但不會改變變量的實際數(shù)值。④“,”表示千分位符號占位符。在格式字符串中插入逗號,起到“分位”作用。逗號可以放在小數(shù)點前的任何位置,但不能放在串首部。⑤%百分號。通常放在格式字符串的尾部,用來輸出百分數(shù)。⑥$美元符號。通常作為格式字符串的起始字符。⑦+正號、-負號。放在格式字符串的首部,為輸出數(shù)據(jù)添加正負號。

⑧E+E-表示用指數(shù)形式顯示數(shù)值。

【例4-3】用窗體事件過程試驗數(shù)值的格式化輸出。PrivateSubForm_Click()PrintFormat(12345.6,"000,000.00")PrintFormat(12345.678,"###,###.##")PrintFormat(12345.6,"#####")PrintFormat(12345.6,"###,##0.00")PrintFormat(12345.6,"$###,##0.00")PrintFormat(12345.6,"-###,##0.00")PrintFormat(0.123,"0.00%")PrintFormat(12345.6,"0.00E+00")EndSub4.2.2輸入框函數(shù)—InputBox()

變量名=InputBox(<提示信息>[,<標題>][,<默認>][,<x坐標>][,<y坐標>])

作用:在一對話框中顯示提示,等待用戶輸入正文或按下按鈕,并返回包含文本框中內(nèi)容,函數(shù)值的類型為String類型。

例如,要用InputBox函數(shù)給變量x賦值,可以用下面的賦值語句:X=Val(InputBox("請輸入xxx的成績","數(shù)據(jù)輸入",80))

1.<提示信息>:該項是必須有的。它是在InputBox對話框中作為提示用戶操作的信息,如上例中的“請輸入xxx的成績”。該項可以是字符常量、變量和字符串表達式。它的最大長度為1024個字符,若要顯示多行,必須將要顯示的信息通過字符連接符“+”或“&”組成字符串表達式,在要換行處加回車Chr(13)、換行Chr(10)控制符或使用系統(tǒng)常量vbCrLf。

2.<標題>:用于對話框標題區(qū)顯示的信息,如上例中的“數(shù)據(jù)輸入框”。該項是字符串表達式,若省略,則將應用程序名,即工程名作為對話框的標題。3.<默認>:輸入文本編輯區(qū)默認值,如上例中的80,如果用戶不輸入值而直接按回車鍵或單擊“確定”按鈕,則該值便作為函數(shù)的輸入值。該項為數(shù)值常量、字符串常數(shù)量或常量表達式。若省略,則相當于空字符串。4.<x坐標>、<y坐標>:確定對話框在屏幕上顯示的位置,為整型表達式,用來確定對話框左上角在屏幕上的位置,屏幕左上角的坐標為(0,0),向下為Y的正方向,向右為X的正方向。

注意:(1)各項參數(shù)次序必須一一對應,除第一項參數(shù)“提示信息”不能省略外,其余參數(shù)均可忽略,如果處于中間位置的參數(shù)省略,則其對應的符號不能省略。例如:省略除提示信息的參數(shù),則上例應改為:X=InputBox("請輸入xxx的成績",,80)(2)由InputBox函數(shù)返回的數(shù)據(jù)類型是字符類型數(shù)據(jù),如果要得到數(shù)值類型數(shù)據(jù),則必須用Val()函數(shù)進行類型轉(zhuǎn)換。4.2.3消息框——MsgBoxMsgBox函數(shù)在對話框中顯示信息,等待用戶單擊按鈕,并返回一個整數(shù)以標明用戶單擊了哪個按鈕。其語法格式為:[變量]=MsgBox(<提示>[,<按鈕>][,<標題>])<按鈕>設置值及其意義分組系統(tǒng)常數(shù)值描述按鈕數(shù)目vbOKOnly0只顯示

OK按鈕。VbOKCancel1顯示

OK及

Cancel按鈕。VbAbortRetryIgnore2顯示

Abort、Retry及

Ignore按鈕。VbYesNoCancel3顯示

Yes、No及

Cancel按鈕。VbYesNo4顯示

Yes及

No按鈕。VbRetryCancel5顯示

Retry及

Cancel按鈕。圖標類型VbCritical16顯示

CriticalMessage圖標。VbQuestion32顯示

WarningQuery圖標。VbExclamation48顯示

WarningMessage圖標。VbInformation64顯示

InformationMessage圖標。默認按鈕vbDefaultButton10第一個按鈕是缺省值。vbDefaultButton2256第二個按鈕是缺省值。vbDefaultButton3512第三個按鈕是缺省值。模式vbApplicationModal0應用程序強制返回;應用程序一直被掛起,直到用戶對消息框作出響應才繼續(xù)工作。vbSystemModal4096系統(tǒng)強制返回;全部應用程序都被掛起,直到用戶對消息框作出響應才繼續(xù)工作?!纠?-4】Msg="HopeWang。"&vbCrLf&"isagoodteacher。"Style=VbYesNo+VbQuestion+VbDefaultButton2a=MsgBox(Msg,Style,"詢問")MsgBox函數(shù)的返回值系統(tǒng)常數(shù)返回值描述VbOK1確定vbCancel2取消vbAbort3終止vbRetry4重試vbIgnore5忽略VbYes6是VbNo7否【例4-5】使用條件(If)語句,利用MsgBox函數(shù)的返回值作為不同操作的選擇:Ifa=vbYesThen '用戶按下”是”

MyString="你選擇的是“是”按鈕"Else '用戶按下”否”

MyString="你選擇的是“否”按鈕"Printmystring

Endif4.3選擇結(jié)構(gòu)

4.3.1IF語句4.3.2SelectCase4.3.1If語句

單行條件語句格式如下:

If<條件>Then<語句1>[Else<語句2>]

代碼舉例:a=inputbox(“請輸入字符:”)Ifa>=“0”anda<=“9”Thenprinta;”為數(shù)字!”If語句的Else部分是可選的,當該項省略時,簡化為:

If<條件>Then<語句1>它的功能是,如果“條件”為True,執(zhí)行“語句1”,否則執(zhí)行下一行語句。單行條件語句要作為一條語句書寫,其中語句塊1、語句塊2可以是一條語句也可是由冒號間隔的多條語句True邏輯表達式語句1語句2FalseIf語句執(zhí)行流程編程舉例輸入三個數(shù)a,b,c,輸出三者之中最小者。分析輸入三個數(shù)值;從中找出最小值;輸出結(jié)果。PrivateSubCommand1_Click()DimaasInteger,basIntegerDimcasInteger,minasIntegera=Val(InputBox("請輸入第1個數(shù):"))b=Val(InputBox("請輸入第2個數(shù):"))c=Val(InputBox("請輸入第3個數(shù):"))min=a'設a為最小值Ifb<minThenmin=b‘比較后保留最小值Ifc<minThenmin=cPrinta;"、";b;"與";c;"之中最小值是:";minEndSub

雙分支塊結(jié)構(gòu)的if…Then…Else語句單行結(jié)構(gòu)條件語句中,如果條件分支執(zhí)行的操作比較復雜,不能在一個邏輯行內(nèi)書寫完畢,可以使用塊結(jié)構(gòu)條件語句。塊結(jié)構(gòu)條件語句一般格式如下:If<條件>Then<語句塊1>[Else<語句塊2>]EndIf語句的執(zhí)行過程和單行結(jié)構(gòu)條件語句相同,即當條件的值為True(滿足條件)時執(zhí)行Then后面的<語句塊1>,否則執(zhí)行Else后面的<語句塊2>。

【例4-7】求x的絕對值。分析:問題可以描述為:l

輸入一個數(shù)值x。l

判斷x是正數(shù)還是負數(shù),取絕對值。l

輸出結(jié)果。PrivateSubCommand1_Click()DimxasIntegerx=Val(InputBox("請輸入1個數(shù):"))Ifx<0ThenPrint-xElse PrintxEndIfEndSubPrivateSubCommand2_Click()EndEndSub多分支塊結(jié)構(gòu)的if…Then…Else語句在雙分支塊結(jié)構(gòu)的if...Then...Else語句中,由于中間為語句塊,即多條語句。這就難免在某個語句塊中仍然存在有一個雙分支塊結(jié)構(gòu)的if...Then...Else語句。其格式如下:If<條件1>Then

If<條件2>Then<語句塊1> [Else<語句塊2>] EndIf[其它語句][Else<語句塊3>]EndIf

If<條件1>Then<語句塊1>[Else

If<條件2>Then<語句塊2>[Else<語句塊3>]EndIf[其它語句]EndIf【例4-8】從鍵盤輸入一個數(shù),判斷其為“大于零”、“等于零”或者“小于零”。分析:問題可以描述為:l

輸入一個數(shù)值x。l

判定其結(jié)果。PrivateSubCommand1_Click()DimxasIntegerx=Val(InputBox("請輸入1個數(shù):"))Ifx<0ThenPrint“該數(shù)為小于零的數(shù)”Else Ifx>0Then Print“該數(shù)為大于零的數(shù)”

Else Print“該數(shù)為等于零的數(shù)”

EndIfEndIfEndSubPrivateSubCommand2_Click()EndEndSub多分支塊結(jié)構(gòu)的if…Then…ElseIf語句在上面的多分支結(jié)構(gòu)中,其實屬于嵌套的if結(jié)構(gòu)(特點是有一個if就必然需要一個EndIf作為結(jié)束。)多分支塊結(jié)構(gòu)if…Then…ElseIf語句就是對上面的嵌套的一種改進,其格式如下:

If<條件1>Then<語句塊1>Elself<條件2>Then<語句塊2>………Elself<條件n>Then<語句塊n>[Else<語句塊n+1>]EndIf【例4-9】輸入一學生成績,評定其等級。方法是:90~100分為“優(yōu)秀”,80~89分為“良好”。,70~79分為“中等”,60~69分為“及格”,60分以下為“不合格”。

PrivateSubCommand1_Click()DimxasIntegerx=Val(InputBox("請輸入學生成績:"))Ifx>=90ThenPrint“優(yōu)秀”ElseIfx>=80ThenPrint“良好”ElseIfx>=70Then Print“中等”ElseIfx>=60ThenPrint“及格”ElsePrint“不及格”EndIfEndSubPrivateSubCommand2_Click()EndEndSub4.3.2SelectCase語句

有時程序在某種狀態(tài)下,會有多種可能選擇。具有多個分支時,使用情況語句更為簡潔。情況語句的一般格式為:SelectCase<測試表達式>[Case<表達式表列1>[<語句塊1>]][Case<表達式表列2>[<語句塊2>]][CaseElse[<語句塊n>]]EndSelect以SelectCase開頭,以EndSelect結(jié)束。功能是根據(jù)“測試表達式”的值,從多個語句塊中選擇符合條件的一個語句塊執(zhí)行。情況語句的執(zhí)行過程對“測試表達式”求值順序測試該值與哪一個Case子句中的“表達式表列”相匹配?如果找到了,則執(zhí)行該Case分支有關的語句塊,然后把控制轉(zhuǎn)移到EndSelect后面的語句如果沒有找到,則執(zhí)行CaseElse分支有關的語句塊,然后把控制轉(zhuǎn)移到EndSelect后面的語句。說明:1)“測試表達式”可以是數(shù)值表達式或字符串表達式,通常為變量。2)每個語句塊由一行或多行VB語句組成。3)“表達式表列”中的表達式必須與“測試表達式”的類型相同。4)“表達式表列”稱為域值,可以是下列形式之一:(1)<表達式1>[,<表達式2>]…各“表達式”值為“或”關系,即當測試表達式的值與它們中之一相同時,就執(zhí)行該Case分支的語句。例如:Case2,4,6,8表示測試表達式的值等于2or4or6or8時執(zhí)行該分支的語句。(2)<表達式1>To<表達式2>關鍵字To用于指定域值的范圍。若測試表達式的值落在<表達式1>至<表達式2>之間(包括<表達式1>和<表達式2>的值),則執(zhí)行該Case分支的語句。所以,要求<表達式1>的值≤<表達式2>的值。例如:Case1To10(3)Is<關系表達式>

關鍵字Is表示當測試值滿足“關系表達式”指定條件時,執(zhí)行該Case分支的語句。例如:CaseIs>10表示當“測試表達式”的值>10時CaseIs=5表示當“測試表達式”的值=5時在一個SelectCase語句中三種形式可以混合使用,例如:

CaseIs>min,5,6,13,Is<=maxCaseIs<“HAN”,“Mao”To“Tao”編程舉例利用InputBox函數(shù)從鍵盤上輸入一個0-6的整數(shù),然后在文本框中顯示用中文表示的星期幾。例如輸入0,顯示“星期天”,輸入1,顯示“星期一”等。PrivateSubCommand1_Click()DimxasIntegerx=Val(InputBox("請輸入一個整數(shù)"))SelectcasexCase1Text1.Text=”星期一”Case2Text1.Text=”星期二”Case3Text1.Text=”星期三”Case4Text1.Text=”星期四”Case5Text1.Text=”星期五”Case6Text1.Text=”星期六”

Case0Text1.Text=”星期日”

CaseElseText1.Text=”請輸入0-6之間的整數(shù)”EndSelectEndSub【例4-11】用SelectCase語句重寫例4-12中的過程Command1_Click(),并使用標簽(Label)來顯示判定的結(jié)果。PrivateSubCommand1_Click()DimxasIntegerx=Val(InputBox("請輸入學生成績:"))SelectCasexCaseIs>=90Label1.Caption="優(yōu)秀"CaseIs>=80Label1.Caption="良好"CaseIs>=70Label1.Caption="中等"CaseIs>=60Label1.Caption="及格"CaseElseLabel1.Caption="不及格"EndSelectEndSub3.4.1循環(huán)概念

3.4.2While…Wend語句

3.4.3Do…Loop語句3.4.4For…Next語句3.4.5嵌套循環(huán)與退出循環(huán)4.4循環(huán)結(jié)構(gòu)

為了解決某一問題,或求取某一計算結(jié)果,程序中往往反復地按某一模式進行操作。

問題1:計算1*2*3*4*……*n。用一個變量S代表值,可以寫成:S=1S=S*2S=S*3 共有n行語句……S=S*n 問題2:在一行上輸出60個“*”號。如果用Print方法,可以用60個“*”號組成一個字符串:print“****……**”60個“*”或使用60個語句:Print“*”;Print“*”; 共有60行 ……Print”*”循環(huán)結(jié)構(gòu)是一種重復執(zhí)行的程序結(jié)構(gòu)。它判斷給定的條件,如果條件成立,即為“真”(True),則重復執(zhí)行某一些語句,(稱為循環(huán)體);否則,即為“假”(False),則結(jié)束循環(huán)。通常循環(huán)結(jié)構(gòu)有“當型循環(huán)”(先判斷條件,后執(zhí)行循環(huán))和“直到型循環(huán)”(先執(zhí)行循環(huán),在判斷條件)兩種。在VisualBasic中,實現(xiàn)循環(huán)結(jié)構(gòu)的語句主要有3種:l

While…Wend語句l

Do…Loopl

For…Next

4.4.1While…Wend語句

While…Wend語句(當循環(huán)語句)根據(jù)某一條件進行判斷,決定是否執(zhí)行循環(huán)。其語句格式如下:

While<條件> <語句塊>Wend

上述格式中,“條件”為一布爾表達式,用以指定循環(huán)條件。執(zhí)行過程是:如果“條件”的值為True(非0),執(zhí)行由“語句塊”組成的循環(huán)體,當遇到Wend語句時,控制返回到While語句,并對“條件”進行測試,如果仍為True,則重復上述過程。如果“條件”為False,則不再執(zhí)行“語句塊”,而執(zhí)行Wend后面的語句【例4-12】使用循環(huán)在窗體上輸出10個“*”分析:在窗體上輸出“*”,其語句要用到Print“*”語句。但Print“*”只能輸出1個星號,如果要輸出10個則讓該語句重復執(zhí)行10次即可。所以,程序中要設置一個記錄Print“*”語句執(zhí)行次數(shù)的變量c。

【例4-13】從鍵盤上輸入一個數(shù)x,判定該數(shù)是否為質(zhì)數(shù)。

PrivateSubCommand1_Click()DimxAsInteger,flagAsBoolean,nAsIntegerx=val(InputBox("請輸入一個數(shù):"))flag=Truen=2Whilen<xAndflagIfxModn=0Thenflag=Falsen=n+1WendIfflagThenPrintx;"是一個素數(shù)"ElsePrintx;"不是一個素數(shù)"EndIfEndSub

使用While…Wend循環(huán)語句時,應注意:

(1)先對“條件”進行測試,然后才決定是否執(zhí)行循環(huán)體。因此,進入循環(huán)體之前應正確設置循環(huán)條件。

(2)循環(huán)體內(nèi)應該有修改循環(huán)條件的語句,使得循環(huán)體能正常執(zhí)行和正常終止。否則會出現(xiàn)死循環(huán),這是程序設計中容易出現(xiàn)的錯誤,應當盡力避免。

While…Wend語句是Basic語言中形式最簡單循環(huán)語句,我們用它引入了循環(huán)語句的概念和應用。更典型和更靈活的形式是Do循環(huán)語句,它完全可以代替While…Wend語句。

4.4.2Do…Loop語句Do…Loop循環(huán)語句也是根據(jù)條件決定循環(huán)的語句。Do…Loop語句具有很靈活的構(gòu)造形式:既能夠指定循環(huán)條件,也能夠指定循環(huán)結(jié)束條件;既可以構(gòu)成先判斷條件形式,也可以構(gòu)成后判斷條件形式。先判斷條件形式的Do……Loop語句語句格式如下:

Do[While|Until<條件>] [<語句塊>]Loop保留字While用于指定循環(huán)條件保留字Until用于指定循環(huán)結(jié)束條件先判斷條件形式的Do…Loop語句功能是,當指定的循環(huán)條件為True或直到指定的循環(huán)結(jié)束條件變?yōu)門rue之前重復執(zhí)行語句塊組成的循環(huán)體。進入循環(huán)體時,如果循環(huán)條件不成立或者循環(huán)結(jié)束條件成立,就不會執(zhí)行循環(huán)體的語句塊。這點和While…Wend語句一樣。DoWhileFalseTrue條件的值循環(huán)體

DoWhile…Loop循環(huán)結(jié)構(gòu)流程圖DoUntilTrueFalse條件的值循環(huán)體DoUntil…Loop循環(huán)結(jié)構(gòu)流程圖Do…Loop語句的先判斷條件格式的控制流程x初值為0,則下列循環(huán)語句執(zhí)行后,x的值等于(),執(zhí)行循環(huán)體的次數(shù)為()。

i=1dowhilex<20x=x+ii=i+2loop【例4-14】用DoWhile…Loop語句計算2n。PrivateSubCommand1_Click()n=Val(InputBox("請輸入n的值"))s=1c=1DoWhilec<=ns=s*2c=c+1LoopPrint"s=";sEndSub【例4-15】編程計算:S=1+2+3+…+100PrivateSubCommand1_Click()

s=0c=1DoUntilc>100s=s+cc=c+1LoopPrint"s=";sEndSub后判斷條件形式的Do…Loop語句

語句格式如下:

Do[<語句塊>]Loop[While|Until<條件>]

后判斷條件形式的Do…Loop語句與先判斷條件形式的區(qū)別是首先執(zhí)行循環(huán)體,然后測試循環(huán)條件或循環(huán)終止條件,決定是否繼續(xù)循環(huán)。所以,這種結(jié)構(gòu)的語句至少執(zhí)行一次循環(huán)體。DoWhileFalseTrue條件的值循環(huán)體Do…LoopWhile循環(huán)結(jié)構(gòu)流程圖DoUntilFalseTrue條件的值循環(huán)體Do…LoopUntil循環(huán)結(jié)構(gòu)流程圖【例4-16】用迭代法求x=求立方根的迭代公式為,當|xn+1-xn|<ε時,則xn+1為的近似值。

PrivateSubCommand1_Click()Consteps=0.000001DimX!,P!,Q!A=Val(InputBox("EnterA:"))Q=A

DoP=QQ=(2*P+A/P^2)/3LoopWhileAbs(Q-P)>epsPrint"Thecuberootof";A;"is";QEndSub4.4.4For…Next語句

For…Next語句,通常用于循環(huán)次數(shù)已知的程序結(jié)構(gòu)中。其一般格式如下:

For<控制變量>=<初值>To<終值>[Step<步長>][<循環(huán)體>]Next[<控制變量>]

說明:

(1)“控制變量”又稱為“循環(huán)控制變量”。它是一個數(shù)值變量,但不能是下標變量或記錄元素。

(2)“初值”、“終值”和“步長”均為數(shù)值表達式,它們的值可以是整數(shù)或?qū)崝?shù)。當控制變量為整型而它們?yōu)閷崝?shù)時,VB將對其舍入取整。當步長>O時,作遞增循環(huán),即應有終值≥初值;步長<0時,作遞減循環(huán),應有終值≤初值;步長為1時,可省略Step子句。步長不能為0,如果為0則為“死循環(huán)”。

(3)“循環(huán)體”由VB語句序列構(gòu)成。省略“循環(huán)體”時,F(xiàn)or語句依然執(zhí)行。For語句的執(zhí)行過程把“初值”賦給“控制變量”檢查“控制變量”是否超過“終值”如果超過就停止執(zhí)行“循環(huán)體”,跳出循環(huán),執(zhí)行Next后面的語句否則執(zhí)行一次“循環(huán)體”,然后把“控制變量”+“步長”的值賦給“控制變量”,重復上述過程。從流程圖可以看到,F(xiàn)or語句是先判斷條件的循環(huán),如果把For語句的“初值”設定成超過“終值”,F(xiàn)or語句根本不執(zhí)行循環(huán)體的語句塊,而直接執(zhí)行Next后面的語句。注意:這里所說的“超過”有兩種含義,即大于或小于。當步長為正值時,檢查控制變量是否大于終值;當步長為負值時,判斷控制變量是否小于終值。循環(huán)次數(shù)由初值、終值和步長三個因素決定,計算公式為:循環(huán)次數(shù)=Int((終值-初值)/步長+1)

For語句的執(zhí)行流程

TrueFalse控制變量賦初值控制變量>終值循環(huán)體控制變量=控制變量+步長步長大于0的For循環(huán)結(jié)構(gòu)TrueFalse控制變量賦初值控制變量<終值循環(huán)體控制變量=控制變量+步長步長小于0的For循環(huán)結(jié)構(gòu)1下列循環(huán)語句執(zhí)行后,循環(huán)體被執(zhí)行的次數(shù)為()。

ForI=1.3To5.6Step0.5PrintI;NextIA)8B)9C)7D)10B2x初值為0,則下列循環(huán)語句執(zhí)行后,x的值等于()。

Fori=1To10Step2x=x+iNextiA)25B)36C)24D)27A3下列循環(huán)語句執(zhí)行后,循環(huán)體執(zhí)行的次數(shù)為()。

Fori=1To10Step-2x=x+iNextIA)5次B)4次C)0次D)6次C【例4-17】

用For語句寫程序,在一行上輸出60個“*”號。Fori=1To60Print"*";Nexti【例4-18】求N!(N為自然數(shù))PrivateSubCommand1_Click()DimnAsInteger,xAsInteger,kAsLong

n=InputBox("Entern:")

k=1

Forx=1Tonk=k*xNextxPrintn;"!=";kEndSub4.4.4嵌套循環(huán)與退出嵌套循環(huán)循環(huán)體的語句塊中可以包含任何VB語句,當然也包括循環(huán)語句。也就是說,在一個循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)含有另一個循環(huán)結(jié)構(gòu),這就形成了嵌套循環(huán),又叫做多重循環(huán)。例雙重循環(huán)。PrivateSubCommand1_Click()Dimi%,j%

Fori=1To3

Forj=5To6 Printi,j NextjNextiEndSub例打印九九乘法表。PrivateSubCommand1_Click()DimIAsInteger,jAsIntegerPrint"九九乘法表"Print"----------------"Fori=1To9Forj=1ToiPrintj;"x";i;"=";j*i;Nextj

PrintNextiEndSub例打印三角形對于此類圖形,需要注意以下兩點:1)第一行第一個字符的定位(即確定它的輸出位置);2)每行之間所輸出內(nèi)容的列數(shù)與循環(huán)控制變量的對應關系。PrivateSubCommand1_Click()

FontSize=20DimiAsInteger,jAsIntegerFori=1To5 PrintTab(10-i);

Forj=1Toi*2-1Print"*";Nextj PrintNextiEndSub例求100到200之間的質(zhì)數(shù)之和。

PrivateSubCommand1_Click()DimxAsInteger,flagAsBool

溫馨提示

  • 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

提交評論