VisualBasic的基本控制結(jié)構(gòu)_第1頁
VisualBasic的基本控制結(jié)構(gòu)_第2頁
VisualBasic的基本控制結(jié)構(gòu)_第3頁
VisualBasic的基本控制結(jié)構(gòu)_第4頁
VisualBasic的基本控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

優(yōu)選VisualBasic的基本控制結(jié)構(gòu)當(dāng)前1頁,總共71頁。24.1順序結(jié)構(gòu)當(dāng)前2頁,總共71頁。4.1順序結(jié)構(gòu)

順序結(jié)構(gòu)是程序設(shè)計(jì)中最基本、最簡單的結(jié)構(gòu),在此結(jié)構(gòu)中,程序按照語句出現(xiàn)的先后順序依次執(zhí)行。順序結(jié)構(gòu)是任何程序的基本結(jié)構(gòu),即使在選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中也包含有順序結(jié)構(gòu)。語句1語句n當(dāng)前3頁,總共71頁。4.1順序結(jié)構(gòu)

【例4.1】單擊窗體,在窗體上輸出兩行不同格式的文字。新建工程,在窗體的Click事件中添加以下代碼:PrivateSubForm_Click()Form1.FontSize=12Form1.ForeColor=vbRedForm1.Print"您好"Form1.FontSize=16Form1.ForeColor=vbBlueForm1.Print"歡迎學(xué)習(xí)VisualBasic"EndSub當(dāng)前4頁,總共71頁。54.2選擇結(jié)構(gòu)當(dāng)前5頁,總共71頁。4.2選擇結(jié)構(gòu)

選擇結(jié)構(gòu)是根據(jù)某個(gè)條件決定執(zhí)行哪部分程序,可以用If語句或SelectCase語句實(shí)現(xiàn)。其中If語句根據(jù)分支的多少分為單分支、雙分支和多分支If語句。SelectCase語句使程序只能根據(jù)某一個(gè)條件的不同取值來決定執(zhí)行哪部分程序。大部分情況下兩種語句間可以相互替換。當(dāng)前6頁,總共71頁。1.If…Then語句(單分支語句)語句格式如下:

(1)If<條件表達(dá)式>Then<語句塊>EndIf(2)If<條件表達(dá)式>Then<語句>

其中條件表達(dá)式可以是任意類型的,語句塊可以是一條或多條語句。若用簡單的形式(2)表示,則只能有一條語句或語句間用冒號分隔,并且必須寫在同一行上。該語句的作用是當(dāng)條件表達(dá)式的值為True或非0數(shù)值時(shí),執(zhí)行Then后面的語句塊(或語句),否則跳過此語句,直接執(zhí)行If語句后面的語句。4.2.1If語句條件表達(dá)式語句塊FalseTrue當(dāng)前7頁,總共71頁。2.If…Then…Else語句(雙分支結(jié)構(gòu))

語句格式如下:(1)If<條件表達(dá)式>Then

<語句塊1>

Else

<語句塊2>

EndIf(2)If<條件表達(dá)式>Then<語句1>Else<語句2>

該語句的作用是當(dāng)條件表達(dá)式的值為非零(True)時(shí),執(zhí)行Then后面的語句塊1(或語句1),否則執(zhí)行Else后面的語句塊2(或語句2)。4.2.1If語句條件表達(dá)式語句塊1語句塊2TrueFalse當(dāng)前8頁,總共71頁。例:計(jì)算分段函數(shù)y的值。PrivateSubCmdCalculate_Click()DimxAsSingle,yAsSinglex=Val(Text1.Text) ‘輸入

Ifx<0Theny=5*x+Exp(x)-2Elsey=2*Sqr(x+7)-6EndIfText2.Text=Cstr(y)‘輸出EndSubcmdCalculateText1當(dāng)前9頁,總共71頁。4.2.1If語句3.If…Then…ElseIf語句(多分支結(jié)構(gòu))當(dāng)要處理的實(shí)際問題有多個(gè)條件時(shí),就要用到該語句結(jié)構(gòu)。語句格式如下:

If<條件表達(dá)式1>Then<語句塊1>ElseIf<條件表達(dá)式2>Then<語句塊2>…[Else<語句塊n+1>]EndIf

該語句的執(zhí)行過程是:如果“條件表達(dá)式1”的值為True,則執(zhí)行“語句塊1”;如果“條件表達(dá)式2”的值為True,則執(zhí)行“語句塊2”;……;如果所有的ElseIf子句后面的條件表達(dá)式都不為True,則執(zhí)行Else后面的“語句塊n+1”,Else是可選項(xiàng)。對于整個(gè)塊結(jié)構(gòu)條件語句,“語句塊1”、“語句塊2”、……“語句塊n+1”中只能有一塊被執(zhí)行。當(dāng)前10頁,總共71頁。If…Then…ElseIf多分枝結(jié)構(gòu)流程圖條件1語句塊1語句塊2語句塊n語句塊n+1條件2條件nTrueTrueTrueFalseFalseFalse當(dāng)前11頁,總共71頁。4.2.1If語句【例4.2】輸入三個(gè)互不相同的整數(shù),將其中的最大值存入變量max中并顯示?!纠?.3】用鍵盤輸入一字符,判斷該字符是小寫字母、大寫字母、數(shù)字字符還是其他字符,并作相應(yīng)的顯示。當(dāng)前12頁,總共71頁。4.2.1If語句

4.If語句的嵌套

If語句的嵌套是指If或Else后面的語句塊中又包含If語句。下面是常見的雙分支選擇結(jié)構(gòu)中的嵌套If結(jié)構(gòu)的形式:If<條件表達(dá)式1>Then…If<條件表達(dá)式11>Then…EndIf…Else…EndIfIf<條件表達(dá)式1>Then…Else…If<條件表達(dá)式11>Then…EndIf…EndIf

在使用嵌套結(jié)構(gòu)時(shí),書寫程序時(shí)更應(yīng)注意采用縮進(jìn)格式,增加程序可讀性,且每個(gè)If語句必須與EndIf配對。當(dāng)前13頁,總共71頁。開始邊長>0?是否能組成三角形計(jì)算輸出出錯(cuò)信息結(jié)束是否是否例:已知三角形的三邊,求三角形的面積當(dāng)前14頁,總共71頁。PrivateSubcmdCalculate_Click()DimaAsSingle,bAsSingle,cAsSingle,pAsSingle,sAsSinglea=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text)If(1)ThenIfa+b>cAndb+c>aAndc+a>bThenp=(a+b+c)/2

s=Sqr(p*(p-a)*(p-b)*(p-c))

Text4.Text=Cstr(s)ElseText4.Text=“不能構(gòu)成三角形”

EndIfElseText4.Text=“邊長不能小于0”EndIfEndSub計(jì)算公式:其中:a>0Andb>0Andc>0獲取數(shù)據(jù)輸出到文本框當(dāng)前15頁,總共71頁。例:計(jì)算分段函數(shù)y的值。PrivateSubcmdCalculate_Click()DimxAsSingle,yAsSinglex=Val(Text1.Text)Ifx<0Theny=1/(x-5)ElseIfx<5Theny=3*x^2+4*x+5Elsey=Log(x)EndIfEndIfText2.text=Cstr(y)EndSub05當(dāng)前16頁,總共71頁。例:計(jì)算等級分。計(jì)算規(guī)則如下:分?jǐn)?shù)100-9089-8079-7069-60<60

等級分ABCDEPrivateSubText1_KeyPress(KeyAsciiAsInteger)DimScoreAsInteger,DegreeAsStringIfKeyAscii=13ThenScore=Val(Text1.Text)IfScore>=0AndScore<=100ThenIfScore>=90ThenDegree="A"ElseIfScore>=80ThenDegree="B"ElseIfScore>=70ThenDegree="C"ElseIfScore>=60ThenDegree="D"ElseDegree="E"EndIfEndIfEndIfEndIfText2.Text=Cstr(Degree)EndIfEndIfEndSub缺點(diǎn):嵌套層次過多,結(jié)構(gòu)不清晰,容易出錯(cuò)。當(dāng)前17頁,總共71頁。PrivateSubText1_KeyPress(KeyAsciiAsInteger)DimScoreAsInteger,DegreeAsStringIfKeyAscii=13ThenScore=Val(Text1.Text)IfScore>=0And

Score<=100ThenIfScore>=90ThenDegree="A"ElseIfScore>=80ThenDegree="B"ElseIfScore>=70ThenDegree="C"ElseIfScore>=60ThenDegree="D"ElseDegree="E"EndIfEndIfText2.Text=Cstr(Degree)EndIfEndSub特點(diǎn):結(jié)構(gòu)清晰。當(dāng)前18頁,總共71頁。

SelectCase語句是實(shí)現(xiàn)多分支選擇結(jié)構(gòu)的另一種表示形式,又稱為“情況選擇”語句。當(dāng)需要分情況討論,或根據(jù)某些離散的值進(jìn)行不同的處理時(shí),使用SelectCase語句可以更加簡潔的表達(dá)算法,而且也容易擴(kuò)充。

SelectCase語句的格式如下:

SelectCase測試表達(dá)式

Case表達(dá)式值1<語句塊1>Case表達(dá)式值2<語句塊2>…[CaseElse<語句塊n+1>]EndSelect4.2.2SelectCase語句測試表達(dá)式語句塊1語句塊2語句塊n+1表達(dá)式值1表達(dá)式值2其他情況…當(dāng)前19頁,總共71頁。

其中,測試表達(dá)式可以是數(shù)值表達(dá)式或字符串表達(dá)式。表達(dá)式值只能是簡單條件,而不能是用邏輯運(yùn)算符連接而成的復(fù)合條件。表達(dá)式值必須與“測試表達(dá)式”的類型一致,可以是下面情形之一:1.表達(dá)式[,表達(dá)式]…

當(dāng)“測試表達(dá)式”的值與其中一個(gè)表達(dá)式的值相匹配時(shí),就執(zhí)行該Case子句的語句塊。例如:Case-1,1Case"a","A"2.<表達(dá)式1>To<表達(dá)式2>

當(dāng)“測試表達(dá)式”的值處在這個(gè)范圍時(shí),就執(zhí)行該Case子句的語句塊。必須把比較小的值寫在前面,把比較大的值寫在后面,字符常量的范圍必須按字母順序?qū)懗觥@纾篊ase1To10Case"A"To"Z"4.2.2SelectCase語句當(dāng)前20頁,總共71頁。3.Is關(guān)系運(yùn)算表達(dá)式只要“測試表達(dá)式”的值滿足給定的條件就執(zhí)行該Case子句的語句塊。只能是簡單的條件,不能用邏輯運(yùn)算符把兩個(gè)或多個(gè)簡單條件組合在一起。4.可以由以上3種形式混合組成,各種形式間用逗號分隔。條件組合是或的關(guān)系,不能表示與的關(guān)系。5.對于多分支選擇結(jié)構(gòu),用SelectCase語句比用If…Then…ElseIf語句更為直觀,程序可讀性強(qiáng)。兩者的區(qū)別在于:SelectCase語句只對單一表達(dá)式求值,并根據(jù)求值結(jié)果執(zhí)行不同的語句塊,而If…Then…ElseIf語句可以對不同的表達(dá)式求值。所以,當(dāng)對多個(gè)條件進(jìn)行判斷時(shí),只能用If…Then…ElseIf語句。4.2.2SelectCase語句當(dāng)前21頁,總共71頁。【例4.4】將例4.3用SelectCase語句實(shí)現(xiàn)。程序代碼如下:PrivateSubCommand1_Click()DimstAsString*1st=Text1.TextSelectCasestCase"a"To"z"Text2.Text="是小寫字母"Case"A"To"Z"Text2.Text="是大寫字母"Case"0"To"9"Text2.Text="是數(shù)字字符"CaseElseText2.Text="是其他字符"EndSelectEndSub當(dāng)前22頁,總共71頁。例:將計(jì)算等級分用SelectCase語句改寫。PrivateSubText1_KeyPress(KeyAsciiAsInteger)DimScoreAsInteger,DegreeAsStringIfKeyAscii=13ThenScore=Val(Text1.Text)SelectCaseScoreCase90To100Degree="A"Case80To89Degree="B"Case70To79Degree="C"Case60To69Degree="D"CaseIs<60Degree="E"EndSelectText2.Text=DegreeEndIfEndSub從文本框取數(shù)據(jù)向文本框放數(shù)據(jù)如果改為Else,結(jié)果會怎樣?SelectCaseScoreCaseIs<0Degree=""CaseIs<60Degree="E"CaseIs<70Degree="D"CaseIs<80Degree="C"CaseIs<90Degree="B"CaseIs<=100Degree="A"EndSelect當(dāng)前23頁,總共71頁。分支結(jié)構(gòu)的適用情況驗(yàn)證用戶輸入數(shù)據(jù)的合法性分段函數(shù)計(jì)算用于區(qū)分等級其他需根據(jù)判斷結(jié)果執(zhí)行不同操作的情況當(dāng)前24頁,總共71頁。254.3循環(huán)結(jié)構(gòu)當(dāng)前25頁,總共71頁。4.3循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)是根據(jù)某一條件(即循環(huán)條件)反復(fù)執(zhí)行某一段程序(即循環(huán)體)。循環(huán)體被反復(fù)執(zhí)行的次數(shù)稱為循環(huán)次數(shù)。

VB中提供了兩種類型的循環(huán)語句:計(jì)數(shù)型循環(huán)語句和條件型循環(huán)語句。循環(huán)要素:(1)循環(huán)控制條件——邏輯表達(dá)式或關(guān)系表達(dá)式等(2)循環(huán)體——重復(fù)執(zhí)行的語句塊為防止死循環(huán),在循環(huán)體內(nèi)必須要有對應(yīng)語句,使得循環(huán)控制條件不滿足,從而結(jié)束循環(huán)運(yùn)行。當(dāng)前26頁,總共71頁。窗體上打印一行hello

……窗體上打印一行hello110…例:在窗體上打印10行“Hello”當(dāng)前27頁,總共71頁。提示:要設(shè)立一個(gè)變量,用于記錄已打印的行數(shù),每打印一行,計(jì)數(shù)變量要加1,循環(huán)控制條件即計(jì)數(shù)變量小于10窗體上打印一行helloTrueFalse未滿10行?循環(huán)控制條件:

是否已打印了10行循環(huán)體:

在窗體上打印一行“Hello”當(dāng)前28頁,總共71頁。

4.3.1For…Next語句

4.3.2Do…Loop語句

4.3.3GoTo語句(選講)3124.3循環(huán)結(jié)構(gòu)

4.4循環(huán)嵌套4當(dāng)前29頁,總共71頁。[格式]:For<循環(huán)變量>=<初值>To<終值>[Step<步長值>]

[ExitFor]

…Next<循環(huán)變量>[功能]: 該語句是計(jì)數(shù)型循環(huán)語句,用于循環(huán)次數(shù)已知的循環(huán)結(jié)構(gòu)。由循環(huán)變量控制,有限次地執(zhí)行循環(huán)體。 執(zhí)行流程和步驟見下頁:4.3.1For…Next語句循環(huán)體當(dāng)前30頁,總共71頁。步驟:1.計(jì)算初值、終值和步長值,將初值賦于計(jì)數(shù)變量;2.判斷“循環(huán)變量”是否到達(dá)“終值”。如果“步長”為正數(shù),則“循環(huán)變量”大于“終值”時(shí)結(jié)束循環(huán),否則執(zhí)行第3步;如果“步長”為負(fù)數(shù),則“循環(huán)變量”小于“終值”時(shí)結(jié)束循環(huán),否則執(zhí)行第3步。3.執(zhí)行循環(huán)體。4.循環(huán)變量=循環(huán)變量+步長值5.返回第2步,繼續(xù)循環(huán)。計(jì)數(shù)變量=初值計(jì)數(shù)變量>終值是循環(huán)體計(jì)數(shù)變量=計(jì)數(shù)變量+步長值否步長值為正的計(jì)數(shù)循環(huán)計(jì)算初值、終值和步長值For<循環(huán)變量>=<初值>To<終值>[Step<步長>] <循環(huán)體>Next<循環(huán)變量>當(dāng)前31頁,總共71頁。[說明]:

For-Next是關(guān)鍵字,成對出現(xiàn),缺一不可;循環(huán)體為可執(zhí)行語句組成,可以嵌套選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu);循環(huán)變量應(yīng)為整型或單精度型,初值、終值和步長值為相應(yīng)類型的表達(dá)式;步長值可以為正,也可以為負(fù),可以省略,省略時(shí)默認(rèn)步長值為1;循環(huán)次數(shù)為:Int((終值-初值)/步長值)+1

語句ExitFor可以無條件退出計(jì)數(shù)循環(huán)如果“初值”、“終值”、“步長”中包含有變量且在循環(huán)體內(nèi)被改變,不會改變循環(huán)執(zhí)行的次數(shù),但循環(huán)變量若在循環(huán)體內(nèi)被重新賦值,循環(huán)次數(shù)則有可能發(fā)生變化。4.3.1For…Next語句當(dāng)前32頁,總共71頁?!纠?.5】計(jì)算216。程序代碼如下:PrivateSubCommand1_Click()DimiAsInteger,xAsLongx=1Fori=1To16x=x*2NextiPrintxEndSub其中i為循環(huán)變量,其值在1~16之間變化。計(jì)算結(jié)果存放在累乘器x中,它的初值應(yīng)設(shè)為1。在計(jì)算累乘時(shí)應(yīng)注意累乘的大小,選擇適當(dāng)?shù)臄?shù)據(jù)類型。當(dāng)前33頁,總共71頁?!纠?.6】輸入20個(gè)整數(shù),分別計(jì)算并輸出正數(shù)和負(fù)數(shù)的平均值。程序代碼如下:PrivateSubForm_Click()DimiAsInteger,numberAsIntegerDimPnumberAsInteger,NnumberAsIntegerDimpAsInteger,nAsIntegerDimPavAsSingle,NavAsSingleFori=1To20number=InputBox("Enterdata:")'輸入數(shù)據(jù)Ifnumber>0ThenPnumber=Pnumber+number'正數(shù)求和

p=p+1'正數(shù)計(jì)數(shù)ElseNnumber=Nnumber+number'負(fù)數(shù)求和

n=n+1'負(fù)數(shù)計(jì)數(shù)EndIfNextiPav=Pnumber/p'求正數(shù)平均值Nav=Nnumber/n'求負(fù)數(shù)平均值Text1.Text=Str(Pav)'顯示正數(shù)平均值Text2.Text=Str(Nav)'顯示負(fù)數(shù)平均值EndSub

程序運(yùn)行后,顯示一個(gè)對話框,在對話框中輸入第一個(gè)數(shù),接著再顯示一個(gè)對話框,再輸入下一個(gè)數(shù)……直到20個(gè)數(shù)輸完為止。輸入完20個(gè)數(shù)之后,文本框1和文本框2中分別顯示正數(shù)和負(fù)數(shù)的平均值。當(dāng)前34頁,總共71頁。4.3.2Do…Loop語句[格式]:Do[While/Until<條件>]或Do<循環(huán)體><循環(huán)體>

LoopLoop[While/Until<條件>]重復(fù)執(zhí)行的語句塊當(dāng)前35頁,總共71頁。格式一:DoWhile<條件>

<循環(huán)體>Loop條件?循環(huán)體成立Loop的后繼語句不成立執(zhí)行步驟:1.判斷條件是否成立。如果條件不成立,轉(zhuǎn)向第4步2.執(zhí)行循環(huán)體;3.轉(zhuǎn)向執(zhí)行第1步;4.結(jié)束循環(huán),執(zhí)行Loop語句的后繼語句。當(dāng)前36頁,總共71頁。PrivateSubform_Click()DimiAsIntegeri=0 DoWhilei<10Print"hello"

i=i+1LoopEndSub例:在窗體上打印10行“Hello”。i為計(jì)數(shù)器,判定是否打印了10行當(dāng)前37頁,總共71頁。例:求1到100之間的整數(shù)之和。PrivateSubCommand1_Click()DimiAsInteger,sumAsIntegersum=0:i=1DoWhilei<=100

sum=sum+i

i=i+1Loopprint"sum=";sumEndSub循環(huán)體設(shè)初值,sum為累加器當(dāng)前38頁,總共71頁。格式二:Do<循環(huán)體>LoopWhile<條件>條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:1執(zhí)行循環(huán)體;

2

判斷條件是否成立。如果條件成立,轉(zhuǎn)向第1步3條件不成立,結(jié)束循環(huán),執(zhí)行Loop語句的后繼語句。當(dāng)前39頁,總共71頁。格式三:DoUntil<條件>

<循環(huán)體>Loop條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:1.判斷條件是否成立。如果條件成立,轉(zhuǎn)向第4步2.執(zhí)行循環(huán)體;3.轉(zhuǎn)向執(zhí)行第1步;4.結(jié)束循環(huán),執(zhí)行Loop語句的后繼語句。當(dāng)前40頁,總共71頁。PrivateSubCommand3_Click()DimsumAsInteger,iAsIntegersum=0:i=1DoUntili>100sum=sum+i

i=i+1LoopPrint"sum=";sumEndSub例:求1到100之間的整數(shù)之和。當(dāng)前41頁,總共71頁。格式四:Do<循環(huán)體>LoopUntil<條件>條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:1.執(zhí)行循環(huán)體;2.判斷條件是否成立。如果條件不成立,轉(zhuǎn)向第1步3.

條件成立,結(jié)束循環(huán),執(zhí)行Loop語句的后繼語句。當(dāng)前42頁,總共71頁。格式五:Do<循環(huán)體>Loop執(zhí)行步驟:

反復(fù)執(zhí)行循環(huán)體。該結(jié)構(gòu)為“死循環(huán)”,一般通過ExitDo語句退出循環(huán)。

ExitDo語句最常用的形式是與If-Then語相結(jié)合,即:IfeThenExitDo當(dāng)在執(zhí)行循環(huán)體時(shí),條件e被滿足,則執(zhí)行ExitDo語句直接退出循環(huán)。注意:如果運(yùn)行時(shí)出現(xiàn)死循環(huán),使用Ctrl+Break中止循環(huán)體Loop后續(xù)語句當(dāng)前43頁,總共71頁。PrivateSubCommand5_Click()DimsumAsInteger,iAsIntegersum=0:i=1Dosum=sum+i

Ifi=100ThenExitDoi=i+1LoopPrint"sum=";sumEndSub例:求1到100之間的整數(shù)之和。當(dāng)前44頁,總共71頁。[功能]:根據(jù)條件成立與否,控制重復(fù)執(zhí)行循環(huán)體。[說明]: (1)Do和Loop為結(jié)構(gòu)關(guān)鍵字,必須成對出現(xiàn),缺一 不可; (2)循環(huán)體為可執(zhí)行語句組成,可以嵌套分支結(jié)構(gòu) 和循環(huán)結(jié)構(gòu); (3)語句ExitDo可無條件退出循環(huán),一般情況 下在該語句前加上If語句;

IfeThenExitDo

當(dāng)在執(zhí)行循環(huán)體時(shí),條件e被滿足,則執(zhí)行 ExitDo語句直接退出循環(huán)。 (4)Do—loop循環(huán)共有5種具體格式。4.3.2Do…Loop語句當(dāng)前45頁,總共71頁。小結(jié):(1)While短語總是在條件成立時(shí),繼續(xù)進(jìn)行循環(huán);條件不成立時(shí),結(jié)束循環(huán)。因此稱為當(dāng)型循環(huán);區(qū)別在于:首次執(zhí)行循環(huán)語句時(shí),若循環(huán)條件不成立,則格式二的循環(huán)體被執(zhí)行一次,而格式一的循環(huán)體不被執(zhí)行。(2)Until短語總是在條件不成立時(shí),繼續(xù)進(jìn)行循環(huán);條件成立時(shí),結(jié)束循環(huán)。因此稱為直到型循環(huán);區(qū)別在于:首次執(zhí)行循環(huán)語句時(shí),若循環(huán)條件不成立,則格式四的循環(huán)體被執(zhí)行一次,而格式三的循環(huán)體不被執(zhí)行。(3)這兩種短語是可以相互轉(zhuǎn)換的。4.3.2Do…Loop語句當(dāng)前46頁,總共71頁。條件?循環(huán)體成立Loop的后繼語句不成立條件?循環(huán)體不成立Loop的后繼語句成立條件?循環(huán)體不成立Loop的后繼語句成立條件?循環(huán)體不成立Loop的后繼語句成立DoWhilee......[ExitDo]LoopDountile......[ExitDo]LoopDo......[ExitDo]LoopWhileeDo......[ExitDo]Loopuntile當(dāng)前47頁,總共71頁。

DoWhileeDo......[ExitDo][ExitDo]......LoopLoopWhilee

DoUntileDo......[ExitDo][ExitDo]......LoopLoopUntile不管條件成立與否循環(huán)體至少要執(zhí)行一次當(dāng)型直到型4.3.2Do…Loop語句當(dāng)前48頁,總共71頁。Do-Loop循環(huán)知道循環(huán)繼續(xù)或結(jié)束的條件條件循環(huán)For-Next循環(huán)知道循環(huán)執(zhí)行次數(shù)計(jì)數(shù)循環(huán)當(dāng)前49頁,總共71頁。[分析]:算法:求最大公約數(shù)的常用方法是輾轉(zhuǎn)相除法。

1、輸入兩個(gè)自然數(shù)M、N; 2、求M除以N的余數(shù)R;

3、使得M=N,即用N代換M; 4、使得N=R,即用R代換N; 5、若R≠0,則重復(fù)2、3、4(循環(huán)),否則轉(zhuǎn)6 6、輸出M,此時(shí)M即為M和N的最大公約數(shù)。例:求兩個(gè)數(shù)的最大公約數(shù)。當(dāng)前50頁,總共71頁。1810MNR8108282020R=8R=2R=0M=2即最大公約數(shù)求最大公約數(shù)當(dāng)前51頁,總共71頁。

在該例中,我們使用了三個(gè)變量,分別表示被除數(shù)(m)、除數(shù)(n)及余數(shù)(r)。

Dor=mModnm=nn=rLoopUntilr=0最大公約數(shù)是()?當(dāng)前52頁,總共71頁。問題分析及界面設(shè)計(jì)

由于輸入的數(shù)據(jù)M和N要求是自然數(shù),在程序中應(yīng)加入對數(shù)據(jù)的合法性進(jìn)行檢驗(yàn)的部分;考慮到程序的應(yīng)用范圍,數(shù)據(jù)類型可選用長整型。設(shè)計(jì)好的用戶界面及程序代碼如下。當(dāng)前53頁,總共71頁。PrivateSubCommand1_Click()

DimmAsLong,nAsLong,rAsLong m=Val(Text1.Text) ‘取數(shù)據(jù)M n=Val(Text2.Text) ‘取數(shù)據(jù)N Ifm<1Orn<1Then‘檢驗(yàn)數(shù)據(jù)合法性

Text3.Text="數(shù)據(jù)錯(cuò)誤!"

Else

Do ‘求最大公約數(shù)

r=mModn m=n n=r LoopUntilr=0 Text3.Text=CStr(m)‘輸出最大公約數(shù)

EndIf

EndSub

PrivateSubCommand2_Click() Text1.Text="" ‘清除文本框1

Text2.Text="" ‘清除文本框2

Text3.Text="" ‘清除文本框3 Text1.SetfocusEndSub

PrivateSubCommand3_Click() End EndSub當(dāng)前54頁,總共71頁?!纠?.14】計(jì)算圓周率的近似值。計(jì)算公式如下:直到最后一項(xiàng)的絕對值小于10-6為止。[提示]:由于本題無法預(yù)知循環(huán)次數(shù),可以用Do…Loop語句來解決。

s=s+<通項(xiàng)表達(dá)式>可實(shí)現(xiàn)累加。當(dāng)前55頁,總共71頁。PrivateSubCommand1_Click()DimPIAsDouble,sumAsDouble,tAsDoubleDimnAsInteger

n=1:sum=0

‘S為累加器

Dot=(-1)^(n-1)/(2*n-1)‘求通項(xiàng)

sum=sum+t

n=n+1LoopUntilabs(t)<0.000001PI=4*sumText1.Text=CStr(PI)EndSubPrivateSubCommand2_Click()UnloadmeEndSubDo

t=(-1)^(n-1)/(2*n-1)sum=sum+tIfabs(t)<0.000001thenExitDo

n=n+1Loop10^(-6)或1E-6當(dāng)前56頁,總共71頁。【例4.7】求滿足以下條件的最小n和sum值。

sum=1+2+3+…+n且sum≥1000這是一個(gè)循環(huán)次數(shù)未知的問題,可以用Do…Loop循環(huán)語句來解決。程序代碼如下:OptionExplicitPrivateSubCommand1_Click()DimnAsInteger,sumAsIntegern=1sum=0'累加器置0Dosum=sum+n'累加

Ifsum>=1000ThenExitDo'若sum大于等于1000,結(jié)束循環(huán)

n=n+1LoopPrint"sum最小值=";sum'輸出最小的sum值

Print"n最小值=";n'輸出最小的n值EndSub

本例使用格式五的Do…Loop循環(huán)方式,根據(jù)題目給出的條件,由ExitDo語句結(jié)束循環(huán)。當(dāng)前57頁,總共71頁。4.3.3GoTo語句(選講)

前面介紹的循環(huán)結(jié)構(gòu)都是根據(jù)某個(gè)條件進(jìn)行循環(huán),稱為有條件跳轉(zhuǎn)語句;還有一種結(jié)構(gòu),即GoTo語句,是無條件跳轉(zhuǎn)語句,程序執(zhí)行到該語句時(shí)不需要判斷條件,直接將程序執(zhí)行的流程無條件地轉(zhuǎn)移到本過程的另一段程序代碼。格式為:

GoTo行標(biāo)簽|行號行標(biāo)簽為語句行標(biāo)識符的簡稱。該語句在執(zhí)行后,無條件地轉(zhuǎn)移到行標(biāo)簽或行號所在的位置處往下執(zhí)行。行標(biāo)簽的命名與變量命名相同,行標(biāo)簽的后面跟“:”,行號則采用正整數(shù)形式。

GoTo語句可以改變程序的執(zhí)行順序,跳過程序的某一部分去執(zhí)行另一部分,或者返回已經(jīng)執(zhí)行過的某段程序使之重復(fù)執(zhí)行,因此,用GoTo語句可以構(gòu)成循環(huán)。在結(jié)構(gòu)化程序設(shè)計(jì)中,要盡量少用或不用GoTo語句,以免造成結(jié)構(gòu)混亂,程序可讀性下降,用選擇結(jié)構(gòu)或循環(huán)結(jié)構(gòu)來代替。當(dāng)前58頁,總共71頁。【例4.8】用GoTo語句編寫例4.7程序程序代碼如下:OptionExplicitPrivateSubCommand1_Click()DimnAsInteger,sumAsIntegern=1sum=0There:sum=sum+nn=n+1Ifsum<1000ThenGoToTherePrint"sum最小值=";sumPrint"n最小值=";n-1EndSub當(dāng)前59頁,總共71頁。604.4循環(huán)嵌套

當(dāng)前60頁,總共71頁。4.4循環(huán)嵌套在一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)又包含了另一個(gè)循環(huán)結(jié)構(gòu)稱為循環(huán)嵌套。循環(huán)嵌套對Do…Loop和For…Next均適用。在使用循環(huán)嵌套時(shí)必須注意:①內(nèi)循環(huán)變量和外循環(huán)變量不能同名。②內(nèi)循環(huán)必須完整地包含在外循環(huán)之內(nèi),不得相互交叉。③若循環(huán)體內(nèi)有If語句,或If語句內(nèi)有循環(huán)語句,也不能交叉。④不能從循環(huán)體外轉(zhuǎn)向循環(huán)體內(nèi),也不能從外循環(huán)轉(zhuǎn)向內(nèi)循環(huán),反之則可。⑤在循環(huán)體中遇到ExitFor(Do)時(shí),則只能跳出當(dāng)前一層循環(huán)。當(dāng)前61頁,總共71頁?!纠?.9】編寫程序,找出100以內(nèi)所有滿足a2+b2=c2且a≤b的自然數(shù)組合。

本題屬于“窮舉”問題,解題的基本思想是:一一列舉各種可能的情況,并判斷哪種情況是符合要求的解,這種算法稱為窮舉法(又稱“枚舉法”),通常采用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)。程序界面如圖所示,主要由三個(gè)列表框和一個(gè)命令按鈕及用于說明的標(biāo)簽組成,查找到的a、b、c分別放入三個(gè)列表框中,組數(shù)顯示在界面下方的標(biāo)簽4上。當(dāng)前62頁,總共71頁。程序代碼如下:OptionExplicitPrivateSubCommand1_Click()DimaAsInteger,bAsInteger,cAsIntegerDimiAsIntegerFora=1To100Forb=1To100Forc=1To100Ifa^2+b^2=c^2Anda<=bThenList1.AddItemaList2.AddItembList3.AddItemci=i+1EndIfNextcNextbNextaLabel4.Caption="共有"&i&"組"EndSub本程序使用了三重循環(huán),循環(huán)變量在1~100之間變化,內(nèi)循環(huán)體被執(zhí)行了100*100*100次。當(dāng)前63頁,總共71頁。644.5程序示例當(dāng)前64頁,總共71頁?!纠?.10】編寫程序,找出10000以內(nèi)的所有素?cái)?shù)并作相應(yīng)顯示。

所謂素?cái)?shù)(質(zhì)數(shù))是指只能被1和自身整除的數(shù),因此可以按素?cái)?shù)的定義來進(jìn)行判斷。用數(shù)x依次除以2到x-1之間的所有數(shù),若都無法整除,則x為素?cái)?shù)。實(shí)際上,判斷一個(gè)數(shù)x是否為素?cái)?shù)并不需要從2判斷到x-1,只要從2

溫馨提示

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

評論

0/150

提交評論