第3章++結(jié)構(gòu)化程序設(shè)計(jì)_第1頁
第3章++結(jié)構(gòu)化程序設(shè)計(jì)_第2頁
第3章++結(jié)構(gòu)化程序設(shè)計(jì)_第3頁
第3章++結(jié)構(gòu)化程序設(shè)計(jì)_第4頁
第3章++結(jié)構(gòu)化程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章控制語句與程序調(diào)試學(xué)習(xí)目標(biāo):掌握If條件語句和SelectCase選擇語句掌握For…Next和Do…Loop循環(huán)語句掌握兩重循環(huán),了解多重循環(huán)了解Exit、End和Goto語句掌握程序的簡單調(diào)試方法第3章控制語句與程序調(diào)試

教學(xué)內(nèi)容:

3.1選擇結(jié)構(gòu)與相關(guān)語句

3.2循環(huán)語句

3.3其它語句

3.4程序調(diào)試3.1選擇結(jié)構(gòu)選擇結(jié)構(gòu):當(dāng)設(shè)定條件成立時(shí)執(zhí)行某些語句,條件不成立時(shí)則跳過這些語句或執(zhí)行其它的語句。選擇結(jié)構(gòu)中要使用選擇語句,有兩路分支和多路分支兩種情況,對應(yīng)的選擇語句有If語句(兩路出口)和SelectCase語句(多路出口)。

3.1選擇結(jié)構(gòu)-If條件語句

1.If<表達(dá)式>Then<語句>

其中,<表達(dá)式>是一個(gè)條件表達(dá)式或邏輯表達(dá)式

例如,IfData>=90ThenPrint“優(yōu)秀”

[例]輸入一個(gè)數(shù),如果是3的倍數(shù)則通過消息框輸出。

PrivateSubForm_Click()DimDataAsIntegerData=InputBox("請輸入一個(gè)值:")IfDataMod3=0ThenMsgBoxDataEndSubData是3的倍數(shù)

Data>=90?輸出“優(yōu)秀”YesNoData>=90?輸出“優(yōu)秀”YesNo輸出“合格”輸出“計(jì)算完畢”3.1選擇結(jié)構(gòu)-If條件語句

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

例如,DimDataAsIntegerData=InputBox(“請輸入成績:")IfData>=90ThenPrint“優(yōu)秀”ElsePrint“合格”

Print"計(jì)算完畢"

上例的If語句可以改寫為:

IfData<90ThenPrint"合格"ElsePrint"優(yōu)秀"

編寫程序計(jì)算電話通信費(fèi):通過輸入對話框輸入通話時(shí)間(分鐘),計(jì)算電話費(fèi)。話費(fèi)計(jì)算方法:3分鐘或以內(nèi)0.20元,超過3分鐘部分,1分鐘0.10元3.1選擇結(jié)構(gòu)-If條件語句

3.塊狀I(lǐng)f語句If<條件表達(dá)式>Then<語句塊>EndIf

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

例:改變窗體的背景色:首次單擊為紅色,再次單擊則為藍(lán)色,以后的單擊為紅、藍(lán)交替。窗體背景色的屬性為BackColor例:用塊狀I(lǐng)f語句改寫上述話費(fèi)程序。3.1選擇結(jié)構(gòu)-If條件語句

4.If語句嵌套

If語句嵌套使用可形成多分支的條件語句結(jié)構(gòu)

If

<條件表達(dá)式1>Then<語句1>

ElseIf

<條件表達(dá)式2>Then<語句2>

Else<語句3>EndIf說明:

ElseIf之間不要加空格。

Else和位于其上方的最近的If配對3.1選擇結(jié)構(gòu)-If條件語句

[例]Weight=InputBox("輸入西瓜重量:","計(jì)算西瓜款")IfWeight<4ThenPrice=1ElseIfWeight<=7ThenPrice=1.3ElsePrice=1.1EndIfMoney=Price*WeightMsgBox“西瓜重”&Weight&“公斤,單價(jià)”&_Price&"元,應(yīng)收瓜款"&Money&_"元",,"計(jì)算西瓜款"4公斤以下:1.00元/公斤4至7公斤:1.3元/公斤超過7公斤:1.1元/公斤

IfWeight<4ThenPrice=1IfWeight>=4AndPrice<=7ThenPrice=1.3IfWeight>7ThenPrice=1.1

3.1選擇結(jié)構(gòu)-If條件語句

[例

(P43例3-4)]

Char=InputBox("輸入一個(gè)字符","測試字符值")IfChar>="0"AndChar<="9"ThenMsgBox"輸入的字符是數(shù)字"ElseIfChar>="A"AndChar<="Z"ThenMsgBox"輸入的字符是大寫字母"ElseIfChar>="a"AndChar<="z"ThenMsgBox"輸入的字符是小寫字母"ElseMsgBox"輸入的字符是其它符號(hào)"EndIf判斷輸入的是大寫字母、小寫字母、數(shù)字還是其它符號(hào)

3.1選擇結(jié)構(gòu)-If條件語句

[例]

PrivateSubCommand1_Click()'單擊“正確無誤”按鈕

IfLen(TxtCode.Text)<8ThenLblWarn.Caption="考核證號(hào)必須輸入,長度為8位"TxtCode.SetFocusElseIfLen(TxtName.Text)=0ThenLblWarn.Caption="考生姓名必須輸入"TxtName.SetFocusElseIfLen(TxtSeat.Text)=0ThenLblWarn.Caption="座位號(hào)必須輸入"TxtSeat.SetFocusElseLblWarn.Caption=""Debug.PrintTxtCode.TextDebug.PrintTxtName.TextDebug.PrintTxtSeat.TextEndIfEndSub

[P45例3-5]3.1選擇結(jié)構(gòu)-SelectCase選擇語句語法格式:

SelectCase<測試表達(dá)式>Case<表達(dá)式1><語句1>Case<表達(dá)式2><語句2>………[CaseElse<語句n+1>]EndSelect功能:根據(jù)測試表達(dá)式的值,決定程序的流向。

<測試表達(dá)式>值的類型是數(shù)值型、字符串型、日期型等,一旦與某個(gè)Case后的<表達(dá)式>值相等,則執(zhí)行這個(gè)Case中的<語句>,完成后執(zhí)行EndSelect后的語句。如果所有的Case后的<表達(dá)式>都不與<測試表達(dá)式>項(xiàng)匹配,則執(zhí)行CaseElse后的<語句>。

3.1選擇結(jié)構(gòu)-SelectCase選擇語句[例]學(xué)生成績分等

Data=InputBox("請輸入一個(gè)成績","成績分等")SelectCaseInt(Data/10)Case10MsgBox"滿分",,"成績分等"Case9MsgBox"優(yōu)秀",,"成績分等"Case8MsgBox"良好",,"成績分等"Case7MsgBox"一般",,"成績分等"Case6MsgBox"合格",,"成績分等"CaseElseMsgBox"不合格",,"成績分等"EndSelect單擊窗體確定3.1選擇結(jié)構(gòu)-SelectCase選擇語句[例]測試輸入的字符

Char=InputBox("請輸入一個(gè)字符","測試")SelectCaseCharCase"0"To"9"MsgBox"字符是數(shù)字",,"測試"Case"a"To"z"MsgBox"字符是小寫字母",,"測試"Case"A"To"Z"MsgBox"字符是大寫字母",,"測試"CaseElseMsgBox"字符是其它符號(hào)",,"測試"EndSelectSelectCase語句適合于表達(dá)簡單的條件

[例]已知10月1日是星期二,輸入10月份內(nèi)某天日期,輸出星期。

確定單擊窗體

3.2循環(huán)語句

程序的另一種結(jié)構(gòu)是循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)作用是重復(fù)執(zhí)行一段程序循環(huán)是有條件的、次數(shù)是有限的

VB的循環(huán)語句:For…Next、DoWhile…LoopForEach…Next、While…Wend

應(yīng)用最多的:For…Next與DoWhile…Loop3.2循環(huán)語句-For…Next循環(huán)For…Next循環(huán):一般應(yīng)用于循環(huán)次數(shù)已知的場合

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

語句塊(循環(huán)體)

Next[循環(huán)變量]

工作原理

循環(huán)變量=初值循環(huán)變量超出范圍?循環(huán)體循環(huán)變量增加一個(gè)步長NoYesStep缺省為1

3.2循環(huán)語句-For…Next循環(huán)[例3.8]求1+3+5+7+…+99PrivateSubForm_Click()DimSumAsInteger,IAsIntegerSum=0'保存累加和,先清零

ForI=1To99Step2Sum=Sum+INextIMsgBox"1+3+5+…+99="&Sum,,"求和"EndSub

本例的特點(diǎn)是數(shù)據(jù)項(xiàng)之間相差2,即Step的值為2

思考:例中當(dāng)輸出對話框出現(xiàn)時(shí),I的值是多少?如果省略Step2,程序的結(jié)果如何?For語句能不能改寫成ForI=99To1Step-2?

例:生成10個(gè)兩位隨機(jī)正整數(shù)并輸出,求和,并輸出其中的最大值、最小值通過鍵盤輸入一個(gè)正整數(shù)(大于1),判斷其是否為質(zhì)數(shù)。質(zhì)數(shù)是只能被1和自身整除的正整數(shù)。如2、3、5、7、11、13、17等等。Exitfor3.2循環(huán)語句-For…Next循環(huán)[例3.9]求平均成績

ConstN=10

'學(xué)生人數(shù)PrivateSubForm_Click()DimSumAsInteger,IAsIntegerDimDataAsInteger,AverageAsSingleSum=0'存放累加值的變量清零

ForI=1ToN

'循環(huán)40次,步長值為1省略

Data=InputBox("輸入第"&I&"位同學(xué)的成績","求平均分")Sum=Sum+Data

NextIAverage=Sum/NMsgBox"全班"&N&"名學(xué)生的平均分為"&Average,,"求平均分"EndSub

確定本例的循環(huán)變量I控制人數(shù)3.2循環(huán)語句-For…Next循環(huán)[例3.11]求斐波那契級數(shù)的前20項(xiàng)(1,1,2,3,5,8,13,21,34,……)

PrivateSubForm_Click()DimA,B,I,TAsIntegerA=1:B=1'生成級數(shù)第一、二項(xiàng)

PrintA;B;

ForI=

3To20T=A+B'產(chǎn)生級數(shù)新的一項(xiàng)

A=B'讓B成為下一組的AB=T'原來A+B的值成為下一組的BPrintB;

IfIMod6=0ThenPrint

NextIEndSub斐波那契級數(shù):第一、二項(xiàng)為1第三項(xiàng)開始,每一項(xiàng)的值是前兩項(xiàng)值之和

每6個(gè)數(shù)一行3.2循環(huán)語句-Do…Loop循環(huán)1.當(dāng)型循環(huán):較多應(yīng)用在循環(huán)次數(shù)事先未知的場合

DoWhile<條件表達(dá)式>

循環(huán)體LoopDo

循環(huán)體LoopWhile<條件表達(dá)式>

條件表達(dá)式成立?循環(huán)體NoYes條件表達(dá)式成立?循環(huán)體NoYes先判斷后執(zhí)行

先執(zhí)行后判斷特點(diǎn):條件表達(dá)式成立執(zhí)行循環(huán)體內(nèi)容

3.2循環(huán)語句-Do…Loop循環(huán)[例3.12]計(jì)算若干位學(xué)生的平均分,以-1為輸入結(jié)束標(biāo)志

PrivateSubForm_Click()DimDataAsInteger,SumAsInteger,NAsIntegerDimAverageAsSingleSum=0:N=0Data=InputBox("輸入第"&N+1&"個(gè)同學(xué)的成績","求平均分")DoWhileData<>-1

'-1表示結(jié)束輸入

Sum=Sum+DataN=N+1Data=InputBox("輸入第"&N+1&"個(gè)同學(xué)的成績","求平均分")

LoopAverage=Sum/NMsgBoxN&"位同學(xué)的平均分為"&Average,,"求平均分"EndSub3.2循環(huán)語句-Do…Loop循環(huán)[例3.13]Sum=1+2+3+…+N

求Sum不超過10000的最大整數(shù)值和數(shù)據(jù)項(xiàng)數(shù)N

PrivateSubForm_Click()DimSum,NAsIntegerN=0'開始時(shí)項(xiàng)數(shù)為0Sum=0'保存累加值的變量Sum清零

DoWhileSum<=10000N=N+1Sum=Sum+NLoopSum=Sum-NN=N-1Print"Sum=";Sum,"N=";NEndSub當(dāng)Sum的值超出10000時(shí)循環(huán)才終止。因此Sum值要減去多加的一個(gè)N;而在循環(huán)過程中,N也被多加了一個(gè)1,需要減去。

3.2循環(huán)語句-Do…Loop循環(huán)2.直到型循環(huán)

DoUntil<條件表達(dá)式>

循環(huán)體LoopDo

循環(huán)體LoopUntil<條件表達(dá)式>特點(diǎn):條件表達(dá)式不成立執(zhí)行循環(huán)體內(nèi)容

先判斷后執(zhí)行

條件表達(dá)式成立?循環(huán)體NoYes先執(zhí)行后判斷條件表達(dá)式成立?循環(huán)體NoYes3.2循環(huán)語句-Do…Loop循環(huán)[例3.14]計(jì)算平均分(要求同例3.12)

PrivateSubForm_Click()DimDataAsInteger,SumAsInteger,NAsIntegerSum=0:N=0Data=InputBox("輸入成績","計(jì)算總分")DoUntilData=-1Sum=Sum+DataN=N+1Data=InputBox("輸入數(shù)據(jù)","計(jì)算總分")

LoopPrint"全班平均分為:";Sum/NEndSubDoWhileData<>-1

Sum=Sum+DataN=N+1Data=InputBox("輸入數(shù)據(jù)","計(jì)算總分")

Loop補(bǔ)充上機(jī)練習(xí)題:通過輸入對話框輸入5個(gè)數(shù)據(jù),統(tǒng)計(jì)其中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)。用隨機(jī)函數(shù)生成并輸出20個(gè)兩位數(shù),找出其中的最小值并且指出它是第幾個(gè)數(shù)。有一分式序列:,求該數(shù)列的前20項(xiàng)之和。不使用除法運(yùn)算符“/”、“\”和求余數(shù)運(yùn)算符“Mod”完成兩個(gè)正整數(shù)除法,得到商和余數(shù),例如:22除以4,商為5,余數(shù)2。用公式求求圓周率的近似值,直到最后一項(xiàng)的絕對值小于10-6為止。產(chǎn)生兩個(gè)1~10范圍的隨機(jī)整數(shù),讓小學(xué)生輸入它們的和,答案對輸出“正確”,如果不對則繼續(xù)要求答題3.2循環(huán)語句-兩重循環(huán)兩重循環(huán):在一個(gè)循環(huán)的循環(huán)體中還包含另一個(gè)循環(huán)[例3.15]在窗體上顯示一個(gè)幾何圖形PrivateSubForm_Click()DimI,JAsInteger'I、J為循環(huán)變量

ForI=1To8'I控制行數(shù)(8行)PrintTab(10-I);'定每行*的起始位

ForJ=1ToI

'J控制每行輸出I個(gè)*

Print"*";

NextJPrint'換行

NextIEndSub注意:雙重循環(huán)不能形成交叉

3.2循環(huán)語句-兩重循環(huán)[例3.16]輸出乘法口訣表PrivateSubForm_Click()DimIAsInteger,JAsInteger,MAsIntegerForI=1To9

ForJ=1ToIM=I*JPrintJ&"*"&I&"="&M&"";NextJPrint'打印換行

NextIEndSub練習(xí):P734.(用*輸出集合圖形)3.2循環(huán)語句-兩重循環(huán)[例3.17]計(jì)算

PrivateSubForm_Click()DimIAsInteger,JAsIntegerDimFAsLong'階乘值用長整型保存

DimeAsDouble

ForI=0To10F=1'每個(gè)階乘值先置1以便累乘

ForJ=1ToIF=F*JNextJe=e+1/F

NextIPrint"e=";eEndSub本循環(huán)計(jì)算F=I!3.2循環(huán)語句-多重循環(huán)多重循環(huán):循環(huán)次數(shù)在兩重以上的循環(huán)結(jié)構(gòu)

[例3.19]計(jì)算將1角錢兌換成零錢有多少種方案

PrivateSubForm_Click()DimI,J,K,SAsInt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論