版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章選擇結(jié)構(gòu)程序設(shè)計本章要點:條件語句單行結(jié)構(gòu)條件語句If...Then...Else...塊結(jié)構(gòu)條件語句If...Then…EndIf多分支選擇語句SelectCase...EndSelect多分支選擇轉(zhuǎn)移語句On…GoTo特點:根據(jù)條件是否成立,決定程序的執(zhí)行分支酒店設(shè)計1引言順序結(jié)構(gòu)程序的執(zhí)行次序是按語句的先后排列次序依次執(zhí)行的,然而,計算機在處理實際問題時,往往需要根據(jù)條件是否成立,決定程序的執(zhí)行方向,在不同的條件下,進行不同的處理。假如遇到這樣一個問題:Y=|x|x≤0lnxx>0在輸入變量x的值之后,需根據(jù)x的不同取值范圍做不同的處理,使用順序結(jié)構(gòu)的程序無法解決這一問題的。本章將介紹解決此類問題的四種語句結(jié)構(gòu)。25.1單行結(jié)構(gòu)條件語句1.格式If
<條件>
Then[<語句組1>][Else
<語句組2>]2.功能如果<條件>成立,則執(zhí)行<語句組1>否則執(zhí)行<語句組2>T語句組1條件語句組2F33.說明(1)<條件>可以是:
關(guān)系表達式布爾表達式數(shù)值表達式:0為False;非0為True字符串表達式:"0"為False;非"0"為True(2)可以沒有Else部分,這時必須有<語句組1>。T語句組1條件F例:IfX<>"aaa"ThenPrintX4(3)<語句組1>、<語句組2>:可以有多條語句,各語句之間用冒號隔開。例:IfN>0ThenA=A+B:B=B+AElseA=A-B:B=B-A(4)應(yīng)作為一條語句書寫。如果語句太長需要換行,必須在折行處使用續(xù)行符號。(5)無論條件是否成立,都具有共同出口例:IfX>=0ThenX=1+XElseX=5-X
Y=1-XPrint"Y=";Y
若X=2則打印Y=-2若X=-2則打印Y=-6共同出口(6)單行結(jié)構(gòu)條件語句可以嵌套
IF...THEN...IF...THEN...ELSE...ELSE…5【例5-1】設(shè)界面如下圖所示,用文本框輸入x的值,單擊“計算Y”按鈕時,根據(jù)以下公式計算y的值。|x|x≤0lnxx>0y=Command1Text1Label36分析:本例需要輸入x,根據(jù)x的值決定y的值,然后輸出y的值,該計算過程可以用流程圖表示:lnxyT|x|yx≤0F輸入x的值輸出y的值PrivateSubCommand1_Click()X=Val(Text1.Text)
IfX<=0ThenY=Abs(X)ElseY=Log(X)Label3.Caption=YEndSub代碼如下:7思考:比較以下兩段程序,是否都能夠?qū)崿F(xiàn)上例的功能。程序段1:X=Val(Text1.Text)Y=Abs(X)IfX>0ThenY=Log(X)Label3.Caption=Y程序段2:X=Val(Text1.Text)Y=Log(X)IfX<=0ThenY=Abs(X)Label3.Caption=Y8【例5-2】平面直角坐標系中,不同的象限內(nèi),點的坐標的符號有以下4種情況:任意輸入一對坐標值,找出它所在的象限。如果X=0或Y=0則給出提示“該點不在任何象限內(nèi)”。第一象限
X>0,Y>0第二象限X<0,Y>0第三象限X<0,Y<0第四象限X>0,Y<0XY9分析:設(shè)分別用文本框Text1和Text2輸入X和Y值,如果該坐標點在坐標軸上,則給出提示并退出;如果該坐標點不在坐標軸上,再按X、Y的不同取值給出判斷結(jié)果。具體過程用流程圖表示如下:TTFX或Y為0X>0FY>0F輸入X,Y的值輸出:該點不在任何象限Y>0T輸出:在第一象限輸出:在第四象限輸出:在第二象限輸出:在第三象限FT10設(shè)運行時單擊命令按鈕Command1進行判斷,并將結(jié)果直接打印在窗體上,Command1的Click事件過程如下:PrivateSubCommand1_Click()X=Val(Text1.Text):Y=Val(Text2.Text)
IfX=0OrY=0Then_Print"不在任何象限內(nèi)":ExitSubIfX>0Then
IfY>0ThenPrint"INA"Else_Print"IND"
Else
IfY>0ThenPrint"INB"_ElsePrint"INC"EndSub115.2塊結(jié)構(gòu)條件語句1.格式If<條件1>
Then[<語句組1>]
[ElseIf<條件2>
Then[<語句組2>]]
……
[ElseIf<條件N>Then[<語句組N>]][Else[<其他語句組>]]EndIf122.功能T……TTF條件1語句組1語句組2條件2F條件n語句組nF語句組n+1133.說明1)整個塊結(jié)構(gòu)必須以If語句開頭,EndIf語句結(jié)束2)除了第一行的If語句和最后一行的EndIf語句是必須的以外,ElseIf子句和Else子句都是可選的。3)兩種常見的簡化形式:形式一:If<條件>Then<語句組1>Else<語句組2>EndIf形式二:If<條件>Then<語句組>EndIf14【例5-3】將例5-2改成用塊結(jié)構(gòu)條件語句實現(xiàn)。PrivateSubCommand1_Click()X=Val(Text1.Text):Y=Val(Text2.Text)IfX=0OrY=0ThenPrint"該點不在任何象限內(nèi)"
ElseIfX>0AndY>0ThenPrint"在第一象限"
ElseIfX<0AndY>0ThenPrint"在第二象限"
ElseIfX<0AndY<0ThenPrint"在第三象限"
ElsePrint"在第四象限"
EndIfEndSub15【例5-4】輸入華氏溫度F,利用公式C=5/9*(F-32)轉(zhuǎn)換成攝氏溫度C,根據(jù)轉(zhuǎn)換結(jié)果C的不同值,按以下要求給出相應(yīng)的提示。C>40時,打印"HOT"30<C≤40時,打印"WARM"20<C≤30時,打印"ROOMTEMPERATURE"10<C≤20時,打印"COOL"0<C≤10時,打印"COLD"C≤0時,打印"FREEZING"Text2Text116PrivateSubCommand1_Click()C=5/9*(Val(Text1.Text)-32)Text2.Text=Format(C,"0.00")IfC>40ThenLabel2.Caption="HOT"ElseIfC>30ThenLabel2.Caption="WARM"ElseIfC>20ThenLabel2.Caption="ROOMTEMPERATURE"ElseIfC>10ThenLabel2.Caption="COOL"ElseIfC>0ThenLabel2.Caption="COLD"ElseLabel2.Caption="FREEZING"EndIfEndSub174.注意1)ElseIf不能寫成ElseIf,即中間不能有空格。2)在書寫時,可以將If語句、ElseIf子句、Else子句、和EndIf語句左對齊,而各語句組向右縮進若干空格,以使程序結(jié)構(gòu)更清楚。3)嚴格按格式要求書寫,不可隨意換行或?qū)尚泻喜⒊梢恍小@?,對于條件結(jié)構(gòu):Ifx>=0Theny=1Elsey=2EndIf以下兩種寫法都是錯誤的:
寫法一:Ifx>=0Theny=1Elsey=2EndIf寫法二:Ifx=1Theny=10Elsey=20EndIf185.3多分支選擇語句1.格式SelectCase<測試表達式>Case<表達式表1>[<語句組1>][Case<表達式表2>[<語句組2>]]…[CaseElse[<語句組n>]]EndSelect2.功能:根據(jù)測試表達式的值,按順序匹配Case后的表達式,如果匹配成功,則執(zhí)行該Case下的語句塊,然后轉(zhuǎn)到EndSelect語句之后繼續(xù)執(zhí)行。19語句組n+1T……TTF匹配表達式表1語句組1語句組2F語句組nF匹配表達式表2匹配表達式表n多分支選擇語句的功能流程圖:203.說明
1)<測試表達式>:數(shù)值或字符表達式2)Case后的<表達式表>可以為如下形式:①表達式1[,表達式2]...如:Case1,3,5②表達式1TO表達式2如:Case10TO30Case"A"TO"Z"③Is<關(guān)系運算符><表達式>如:CaseIs>=10CaseIs=0與Case0相同且三種形式可以混用,如:
CaseIs<-5,0,5To10021Y=ex+e-xx<01.25x=0lgxx>0【例5-5】按以下公式求分段函數(shù)y的值。Text1Text2Command1設(shè)運行時從文本框Text1輸入x的值,單擊命令按鈕Command1計算Y的值,結(jié)果顯示于文本框Text2中,界面如下:22命令按鈕Command1的Click事件過程如下:PrivateSubCommand1_Click()X=Val(Text1.Text)'輸入X的值
SelectCaseX'<測試表達式>為XCaseIs<0Y=Exp(X)+Exp(-X)Case0
'或CaseIs=0Y=1.25CaseIs>0Y=Log(X)/Log(10)EndSelectText2.Text=Format(Y,"0.000000")EndSub234.注意1)<測試表達式>的類型應(yīng)與各Case后的表達式類型一致。2)不能在Case后的表達式中使用<測試表達式>中的變量。例如:SelectCaseXCaseX<0'在這里使用了變量X,是錯誤的
Y=Exp(X)+Exp(-X)CaseX=0'在這里使用了變量X,是錯誤的
Y=1.25CaseX>0'在這里使用了變量X,是錯誤的
Y=Log(X)/Log(10)EndSelect243)<測試表達式>只能是一個變量或一個表達式,而不能是變量表或表達式表。例如,檢查變量X1、X2、X3之和是否小于零,
不能寫成:SelectCaseX1,X2,X3'錯誤寫法
CaseX1+X2+X3<0…EndSelect
而應(yīng)該寫成:SelectCaseX1+X2+X3
'正確寫法
CaseIs<0…EndSelect254)不要在Case后直接使用布爾運算符來表示條件。例如,要表示條件0<X<100,不能寫成:SelectCaseXCaseIs>0AndIs<100'使用了And,是錯誤的…EndSelect對于較復(fù)雜的條件,可以用塊結(jié)構(gòu)條件語句來實現(xiàn),而有些條件完全可以轉(zhuǎn)換成Case語句允許的幾種形式之一。26【例5-6】某運輸公司對用戶計算運費,距離越遠,每公里運費越低,計算標準如下:
距離<250km沒有折扣250km≤距離<500km2%折扣500km≤距離<1000km5%折扣1000km≤距離<2000km8%折扣2000km≤距離<3000km10%折扣3000km≤距離15%折扣分析:設(shè)每公里每噸貨物的基本運費為Price,貨物重為Weight,運輸距離為Distance,折扣為Discount,則總運費Freight的計算公式為:Freight=Price*Weight*Distance*(1-Discount)27設(shè)計界面如下圖:Text1Text2Text3Text4Command128Command1的Click事件過程如下:PrivateSubCommand1_Click()Price=Val(Text1.Text)
Weight=Val(Text2.Text)Distance=Val(Text3.Text)
SelectCaseDistance
CaseIs<250Discount=0CaseIs<500Discount=0.02CaseIs<1000Discount=0.0529CaseIs<2000Discount=0.08CaseIs<3000Discount=0.1CaseElseDiscount=0.15EndSelectFreight=Price*Weight*Distance*(1-Discount)Text4.Text=FreightEndSub301.格式
On<表達式>GoTo{<標號表>|<行號表>}2.功能根據(jù)<表達式>的值,把控制權(quán)轉(zhuǎn)移到<標號表>或<行號表>指定的語句中的一個去執(zhí)行。具體過程是:先計算<表達式>的值,并將其四舍五入為一個整數(shù),然后根據(jù)該整數(shù)值決定轉(zhuǎn)移到第幾個標號或行號所指定的語句去執(zhí)行。如果<表達式>的值為1,則轉(zhuǎn)到第一個標號或行號所指定的語句行去執(zhí)行;如果<表達式>的值為2,則轉(zhuǎn)到第二個標號或行號所指定的語句行去執(zhí)行,以此類推。5.4多分支選擇轉(zhuǎn)移語句On…GoTo313.說明1)<表達式>的值應(yīng)在0~255之間,當<表達式>的值小于0或大于255時會出錯。2)<表達式>的值應(yīng)該在1到標號或行號列表項目個數(shù)之間。當表達式的值為0或大于列表項目個數(shù)時,控制權(quán)會轉(zhuǎn)移到On...GoTo之后的語句。3)可以在同一個列表中混合使用標號和行號?!皹颂枴笔且粋€以冒號結(jié)尾的標識符;“行號”是一個整型數(shù)。32【例5-7】用輸入框輸入1~5之間的學生成績,將其轉(zhuǎn)換為4個成績等級:1、2分不及格3分及格4分良5分優(yōu)設(shè)運行時單擊Command1開始輸入并轉(zhuǎn)換。代碼如下:PrivateSubCommand1_Click()X=Val(InputBox("請輸入分數(shù)1~5"))33
OnXGoTo10,10,A1,A2,A3
MsgBox"輸入有誤"
GoToB1
10MsgBox"不及格"
GoToB1
A1:MsgBox"及格"
GoToB1
A2:MsgBox"良好"
GoToB1
A3:MsgBox"優(yōu)秀"
B1:EndSub無條件GoTo語句:GoTo{<標號>|<行號>}功能:無條件地轉(zhuǎn)到<標號>或<行號>指定的位置執(zhí)行。34如果在條件成立或不成立的情況下要繼續(xù)判斷其他條件,則可以使用嵌套的條件語句來實現(xiàn),也就是在語句組中再使用另一個條件語句。5.5條件語句的嵌套35塊結(jié)構(gòu)條件語句的嵌套示例:IfA=1Then
IfB=0ThenPrint"**0**"
ElseIfB=1ThenPrint"**1**"
EndIfElseIfA=2ThenPrint"**2**"EndIf36多分支選擇語句的嵌套示例:SelectCaseACase1
SelectCaseBCase0
Print"**0**"Case1
Print"**1**"EndSelectCase2Print"**2**"EndSelect37多分支選擇語句與塊結(jié)構(gòu)條件語句的互相嵌套示例:SelectCaseACase1
IfB=0ThenPrint"**0**"
ElseIfB=1ThenPrint"**1**"
EndIf
Case2Print"**2**"EndSelect38【例5-8】求一元二次方程ax2+bx+c=0的解。分析:1)如果a=0,則不是二次方程,此時如果b=0,則提示重新輸入系數(shù);如果b0,則:x=-c/b2)如果a0,且b2-4ac=0,則有兩個相等的實根3)如果a0,且b2-4ac>0,則有兩個不等的實根4)如果a0,且b2-4ac<0,則有兩個共軛復(fù)根5.6應(yīng)用舉例39設(shè)計界面:Text1Text2Text3Command1運行界面:40PrivateSubCommand1_Click()A=Val(Text1.Text):B=Val(Text2.Text)C=Val(Text3.Text):ClsCurrentX=600:CurrentY=1100
IfA=0Then
IfB=0ThenMsgBox"系數(shù)為零,請重新輸入"
Text1.SetFocusText1.SelStart=0Text1.SelLength=Len(Text1.Text)
ElseX=-C/BPrint"X=";Format(X,"0.000")
EndIfExitSub'EndIf41
Delta=B^2-4*A*CSelectCaseDelta
Case0Print"X1=X2=";Format(-B/(2*A),"0.000")
CaseIs>0X1=(-B+Sqr(Delta))/(2*A)X2=(-B-Sqr(Delta))/(2*A)Print"X1=";Format(X1,"0.000")CurrentX=600:CurrentY=1300Print"X2=";Format(X2,"0.000")
CaseIs<0A1=-B/(2*A)A2=Sqr(Abs(Delta))/(2*A)42Print"X1=";Format(A1,"0.000");"+";_Format(A2,"0.000");"i"CurrentX=600CurrentY=1300Print"X2=";Format(A1,"0.000");"-";_Format(A2,"0.000");"i"
EndSelectEndSub43【例5-9】設(shè)計一個口令檢測程序,界面如下圖,當用戶輸入的口令正確時,顯示“恭喜!您已成功進入本系統(tǒng)”,否則,顯示,“口令錯!請重新輸入”。如果連續(xù)兩次輸入了錯誤口令,在第三次輸入完口令后則顯示一個消息框,提示“對不起,您不能使用本系統(tǒng)”,然后結(jié)束程序的執(zhí)行。Text1Label244分析:界面中用一個文本框Text1接受口令,Text1的屬性設(shè)置如下:
PasswordChar:*
MaxLength:6要求運行時在用戶輸入完口令并按回車鍵時對口令進行判斷,因此本例使用了文本框Text1的KeyUp事件過程,當焦點在文本框時,松開鍵盤任一鍵后產(chǎn)生KeyUp事件,同時返回按鍵代碼KeyCode。回車鍵的KeyCode為13,所以程序首先判斷如果用戶在Text1中按下了回車鍵,表示口令輸入完,再判斷口令是否正確。Text1的KeyUp事件過程如下:45PrivateSubText1_KeyUp(KeyCodeAsInteger,_ShiftAsInteger)
StaticIAsInteger
'保存輸入錯誤口令的次數(shù)
IfKeyCode=13Then
'如果按下的鍵為回車鍵
If
UCase(Text1.Text)="HELLO"Then
Label2.Caption="恭喜!,您已成功進入本系統(tǒng)"
ElseIfI=0OrI=1Then
I=I+1Label2.Caption="口令錯!,請重新輸入"
Text1.SelStart=0Text1.SelLength=Len(Text1.Text)
Else
MsgBox"對不起,您不能使用本系統(tǒng)":End
EndIf
EndIfEndSub46【例5-10】設(shè)計一個四則運算的自我練習應(yīng)用程序,界面如下圖所示。
Text1Text4Text3Text2Label4Label247要求:1)執(zhí)行時,當在Text1中輸入一種運算符后,在標簽Label2中立即出現(xiàn)該運算符號。2)單擊“出題”按鈕可以產(chǎn)生兩個[0,1000]之間的隨機整數(shù),這時由Text2、Label2和Text3組成一個表達式。3)可以通過單擊“計算”按鈕計算所生成的表達式的值。4)也可以由用戶在文本框Text4中輸入運算結(jié)果通過單擊“判斷”按鈕可以判斷輸入的運算結(jié)果是否正確,然后在Label4上顯示“正確”或“錯誤”。5)單擊“退出”按鈕結(jié)束運行。481)在Text1中輸入加、減、乘、除符號后,在Label2中立即出現(xiàn)相應(yīng)的運算符號。PrivateSubText1_Change()Label2.Caption=Text1.TextEndSub2)單擊“出題”按鈕Command1,生成兩個[0,1000]之間的隨機整數(shù)。PrivateSubCommand1_Click()RandomizeText2.Text=Int(Rnd*1001)Text3.Text=Int(Rnd*1001)
Text4.Text=""EndSub493)單擊“計算”按鈕Command2得出Text4的值。PrivateSubCommand2_Click()
IfLabel2.Caption="+"ThenText4.Text=Val(Text2.Text)+Val(Text3.Text)
ElseIfLabel2.Caption="-"Then
Text4.Text=Val(Text2.Text)-Val(Text3.Text)
ElseIfLabel2.Caption="*"ThenText4.Text=Val(Text2.Text)*Val(Text3.Text)
ElseIfLabel2.Caption="/"ThenText4.Text=Val(Text2.Text)/Val(Text3.Text)
ElseMsgBox"運算類型錯,請重輸",,"警告"
Text1.SetFocus:Text1.SelStart=0Text1.SelLength=Len(Text1.Text)EndIfEndSub504)Text4的內(nèi)容也可以由用戶輸入,通過單擊“判斷”按鈕Command3判斷輸入結(jié)果是否正確。PrivateSubCommand3_Click()
SelectCaseLabel2.CaptionCase
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專利分析合同模板
- 2025建筑工程合同示范文本
- 2024年礦產(chǎn)資源勘查開發(fā)合同
- 簡易工地勞務(wù)合同范例
- 2024年物業(yè)管理合同協(xié)議書范本
- 商丘工學院《經(jīng)濟博弈論及其應(yīng)用》2023-2024學年第一學期期末試卷
- 房產(chǎn)溢價合同范例
- 汕頭大學《服飾圖案設(shè)計》2023-2024學年第一學期期末試卷
- 保安解除合同范例
- 2024至2030年火災(zāi)自動報警控制器項目投資價值分析報告
- 七年級數(shù)學教學中如何滲透德育教育
- 印花稅稅源明細表(示范)
- 城管小品劇本
- 教育部辦公廳關(guān)于印發(fā)大學生職業(yè)發(fā)展與就業(yè)指導(dǎo)課程教學要求
- 循環(huán)流化床鍋爐氮氧化物生成與控制分析
- 關(guān)于申請創(chuàng)辦宜康醫(yī)院精神病醫(yī)院的報告
- 《人間生活》高中美術(shù)鑒賞教案設(shè)計
- 在建鋼結(jié)構(gòu)工程危險源辨識評價.doc
- 托兒所、幼兒園建筑設(shè)計規(guī)范 JGJ 39-2016
- 螺栓螺母理論重量表
- 微生物鑒定藥敏分析系統(tǒng)說明書48頁
評論
0/150
提交評論