第3章++結構化程序設計_第1頁
第3章++結構化程序設計_第2頁
第3章++結構化程序設計_第3頁
第3章++結構化程序設計_第4頁
第3章++結構化程序設計_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

教學內容:

3.1選擇結構與相關語句

3.2循環(huán)語句

3.3其它語句

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

3.1選擇結構-If條件語句

1.If<表達式>Then<語句>

其中,<表達式>是一個條件表達式或邏輯表達式

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

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

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

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

2.If<表達式>Then<語句1>Else<語句2>

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

Print"計算完畢"

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

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

編寫程序計算電話通信費:通過輸入對話框輸入通話時間(分鐘),計算電話費。話費計算方法:3分鐘或以內0.20元,超過3分鐘部分,1分鐘0.10元3.1選擇結構-If條件語句

3.塊狀If語句If<條件表達式>Then<語句塊>EndIf

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

例:改變窗體的背景色:首次單擊為紅色,再次單擊則為藍色,以后的單擊為紅、藍交替。窗體背景色的屬性為BackColor例:用塊狀If語句改寫上述話費程序。3.1選擇結構-If條件語句

4.If語句嵌套

If語句嵌套使用可形成多分支的條件語句結構

If

<條件表達式1>Then<語句1>

ElseIf

<條件表達式2>Then<語句2>

Else<語句3>EndIf說明:

ElseIf之間不要加空格。

Else和位于其上方的最近的If配對3.1選擇結構-If條件語句

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

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

3.1選擇結構-If條件語句

[例

(P43例3-4)]

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

3.1選擇結構-If條件語句

[例]

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

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

[P45例3-5]3.1選擇結構-SelectCase選擇語句語法格式:

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

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

3.1選擇結構-SelectCase選擇語句[例]學生成績分等

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

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

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

確定單擊窗體

3.2循環(huán)語句

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

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

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

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

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

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

工作原理

循環(huán)變量=初值循環(huán)變量超出范圍?循環(huán)體循環(huán)變量增加一個步長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

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

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

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

ConstN=10

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

ForI=1ToN

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

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

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

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

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

PrintA;B;

ForI=

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

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

IfIMod6=0ThenPrint

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

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

DoWhile<條件表達式>

循環(huán)體LoopDo

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

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

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

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

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

'-1表示結束輸入

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

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

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

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

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

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

DoUntil<條件表達式>

循環(huán)體LoopDo

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

先判斷后執(zhí)行

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

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

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

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

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

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

ForJ=1ToI

'J控制每行輸出I個*

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練習:P734.(用*輸出集合圖形)3.2循環(huán)語句-兩重循環(huán)[例3.17]計算

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

DimeAsDouble

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

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

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

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

PrivateSubForm_Click()DimI,J,K,SAsInt

溫馨提示

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

最新文檔

評論

0/150

提交評論