版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章VB程序設(shè)計(jì)基礎(chǔ)4.1VB的程序語句4.2順序結(jié)構(gòu)4.3選擇(分支)結(jié)構(gòu)4.4循環(huán)結(jié)構(gòu)4.5其它控制語句4.6綜合應(yīng)用4.3選擇結(jié)構(gòu)
問題:順序結(jié)構(gòu)程序設(shè)計(jì)我們做過求三角形面積的程序,但是該程序不完善----程序不能處理當(dāng)輸入的三條邊邊長構(gòu)不成三角形的情況,會(huì)出錯(cuò)解決該問題需要用到選擇結(jié)構(gòu)的程序設(shè)計(jì)計(jì)算三角形面積:輸入3條邊長,按照t=(a+b+c)/2,s=PrivateSubCommand1_Click()Dima!,b!,c!,t!,s!a=Val(InputBox("輸入邊長a:"))b=Val(InputBox("輸入邊長b:"))c=Val(InputBox("輸入邊長c:"))t=(a+b+c)/2s=Sqr(t*(t-a)*(t-b)*(t-c))Form1.Print"三角形的三條邊分別為:",a,b,cForm1.Print"三角形的面積為:",sEndSub注意:輸入的數(shù)據(jù)必須滿足任意兩條邊長之和大于第三條邊。4.3選擇結(jié)構(gòu)
4.3.1IF語句4.3.2SelectCase語句4.2.3條件函數(shù)4.2.4分支語句的嵌套VB中提供了多種形式的條件語句來實(shí)現(xiàn)選擇結(jié)構(gòu)。4.3選擇結(jié)構(gòu)
4.3.1IF語句4.3.2SelectCase語句4.2.3條件函數(shù)4.2.4分支語句的嵌套單分支結(jié)構(gòu):
If…Then
語句2.雙分支結(jié)構(gòu):
If…Then…Else語句3.多分支結(jié)構(gòu)----If…Then…ElseIf
語句
4.3.1If條件語句
1.單分支結(jié)構(gòu):If…Then
語句
格式1:If<表達(dá)式>Then
語句塊
EndIf說明:語句塊(可以是一句或多句語句)格式2:If<表達(dá)式>Then<語句>說明:
<語句>只能是一句語句或語句間用冒號分隔,而且必須在一行上書寫。作用:當(dāng)表達(dá)式的值為True,執(zhí)行Then后面的語句塊,否則不做任何操作。
計(jì)算三角形面積:輸入3條邊長,按照以下公式求三角形面積,在窗體上輸出。t=(a+b+c)/2,s=要求用IF語句控制程序必須輸入的3個(gè)數(shù)據(jù)滿足任意2個(gè)之和大于第3個(gè)才進(jìn)行面積的計(jì)算,否則不計(jì)算,要求重新輸入單分支結(jié)構(gòu)舉例1計(jì)算三角形面積PrivateSubCommand1_Click()Dima!,b!,c!,t!,s!a=Val(InputBox("輸入邊長a:"))b=Val(InputBox("輸入邊長b:"))c=Val(InputBox("輸入邊長c:"))If
(a+b)<cOr(b+c)<aOr(a+c)<bThen
MsgBox"輸入的數(shù)據(jù)構(gòu)不成三角形!請重新輸入!"a=Val(InputBox("輸入邊長a:"))b=Val(InputBox("輸入邊長b:"))c=Val(InputBox("輸入邊長c:"))EndIft=(a+b+c)/2s=Sqr(t*(t-a)*(t-b)*(t-c))Form1.Print"三角形的三條邊分別為:",a,b,cForm1.Print"三角形的面積為:",sEndSub用IF語句控制程序必須輸入的3個(gè)數(shù)據(jù)滿足任意2個(gè)之和大于第3個(gè)才進(jìn)行面積的計(jì)算,否則不計(jì)算,要求重新輸入注意:縮進(jìn)格式例:成績有效性檢驗(yàn)。單分支實(shí)例2文本框數(shù)據(jù)有效性檢驗(yàn)
設(shè)計(jì)如圖所示求平均成績的程序。要求利用文本框的LostFocus事件檢驗(yàn)數(shù)據(jù),保證輸入的數(shù)據(jù)在0-100之間,如不在此范圍內(nèi),顯示如圖所示的對話框,重新輸入。Text1.Text=""Text2.Text=""Text3.Text=""EndDimcj1%,cj2%cj1=Val(Text1.Text)cj2=Val(Text2.Text)Text3.Text=(cj1+cj2)/2例:成績數(shù)據(jù)有效性檢驗(yàn)。利用文本框的LostFocus事件檢驗(yàn)數(shù)據(jù)Private
SubText1_LostFocus()Dimx!x=Val(Text1.Text)
Ifx>100Orx<0Then
MsgBox"成績數(shù)據(jù)超界(只能為0-100),重新輸入"Text1.Text=""Text1.SetFocus
EndIfEndSub
讓焦點(diǎn)不離開text1單分支實(shí)例2文本框數(shù)據(jù)有效性檢驗(yàn)PrivateSubText1_LostFocus()
Dimx!x=Val(Text1.Text)Ifx>100Orx<0Then
MsgBox"成績數(shù)據(jù)超界(只能為0-100),重新輸入"Text1.Text=""Text1.SetFocusEndIfEndSubPrivateSubText2_LostFocus()
Dimx!x=Val(Text2.Text)Ifx>100Orx<0Then
MsgBox"成績數(shù)據(jù)超界(只能為0-100),重新輸入"Text2.Text=""Text2.SetFocusEndIfEndSub格式1
If<表達(dá)式>
Then
語句Else
語句塊2EndIf(簡化)格式2
If
表達(dá)式
Then
語句1Else
語句2作用:當(dāng)表達(dá)式的值為True時(shí),執(zhí)行Then后面的語句塊1,否則執(zhí)行Else后面的語句塊。2.雙分支結(jié)構(gòu)----If…Then…Else語句雙分支結(jié)構(gòu)舉例1從鍵盤輸入一考生成績,存入變量mark中,假設(shè)錄取線為580,判斷是否通過了考試,要求結(jié)果在窗體上輸出.
Dimmark%,Str$mark=val(InputBox(“輸入成績”))ifmark>=580then
str="通過!"ELSE
str="未通過"EndifForm1.PrintStrifmark>=580then
str="通過!"Else
str="未通過"從鍵盤輸入一個(gè)整型數(shù),存入x中,求出它的絕對值,所求結(jié)果存入y中,最后用msgbox過程顯示結(jié)果。(要求不要直接用VB函數(shù)求,自己編寫程序求)
Dimx%,y%從鍵盤輸入x的值如果小于0,那么
y=-x否則
y=x輸出y的值實(shí)驗(yàn)第1題:雙分支練習(xí)例:從鍵盤輸入一個(gè)整型數(shù),存入x中,求出它的絕對值,所求結(jié)果存入y中,最后用msgbox過程顯示結(jié)果。(要求不要直接用VB函數(shù)求,自己編寫程序求)
Dimx%,y%x=InputBox("Inputx:")Ifx<0Theny=-xElse y=xEndIfMsgBox"x的絕對值="&y實(shí)驗(yàn)第1題:雙分支練習(xí)例:思考:從鍵盤輸入一個(gè)數(shù),存入x中,求出它的絕對值,所求結(jié)果存入y中,最后用msgbox過程顯示結(jié)果。(要求不用函數(shù)),如何用單分支解決?求絕對值,也可用單分支實(shí)現(xiàn)Dimx!,y!x=val(InputBox("Inputx:"))y=xIfx<0Theny=-xEndIfMsgBox"x的絕對值=“&y用單分支實(shí)現(xiàn)求絕對值問題雙分支實(shí)例2----能進(jìn)行加、減運(yùn)算的計(jì)算器實(shí)例多功能計(jì)算器,可實(shí)現(xiàn)加,減計(jì)算,但具體是加還是減只能在程序運(yùn)行時(shí)由用戶決定,編程時(shí)并不知道。實(shí)例多功能計(jì)算器,可實(shí)現(xiàn)加,減計(jì)算
Dimn1AsSingle,n2AsSingle'原始變量
Dimn3AsSingle'結(jié)果變量
DimysfAsString*1'控制變量
n1=Val(Text1.Text):n2=Val(Text3.Text)
ysf=Text2.Text
Ifysf="+"Thenn3=n1+n2Elsen3=n1–n2EndifText4.Text=n3雙分支實(shí)例2----能進(jìn)行加、減運(yùn)算的計(jì)算器實(shí)驗(yàn)第2題:雙分支練習(xí)例:設(shè)計(jì)如圖所示能進(jìn)行加減運(yùn)算的計(jì)算器。程序運(yùn)行時(shí)界面如圖:雙分支結(jié)構(gòu)舉例3實(shí)例從鍵盤輸入兩個(gè)數(shù)a,b,用下列信息框顯示a/b的值。
PrivateSubCommand1_Click()Dima%,b%,c!a=Val(InputBox("輸入被除數(shù)a:"))b=Val(InputBox("輸入除數(shù)b(注意不能為0):"))c=a/bMsgBox"a/b="&c,0+48,"計(jì)算結(jié)果"EndSub以下2句等價(jià):MsgBox"a/b="&c,0+48,"計(jì)算結(jié)果“MsgBoxa&"/"&b&"="&c,vbOKOnly+vbInformation,"計(jì)算結(jié)果"實(shí)例同前題。但要求在輸入除數(shù)b時(shí)由程序判斷b是否為0:如不為0,計(jì)算2個(gè)數(shù)相除的值,輸出結(jié)果;如b=0,則要顯示如圖出錯(cuò)信息框,然后詢問是否繼續(xù)計(jì)算,如選否,則結(jié)束程序運(yùn)行;如選是,則可繼續(xù)計(jì)算。
雙分支結(jié)構(gòu)舉例3—功能擴(kuò)展雙分支實(shí)例3Dima!,b!,c!a=val(InputBox("請輸入第一個(gè)數(shù)a","輸入"))b=val(InputBox("請輸入第二個(gè)數(shù)b","輸入"))Ifb<>0Thenc=a/b
MsgBox"a/b="&c,vbInformation,"計(jì)算結(jié)果"Else
MsgBox"除數(shù)不能為0!",vbExclamation,"錯(cuò)誤"EndIfDimi%i=MsgBox("繼續(xù)計(jì)算嗎?",vbYesNo+vbQuestion,"詢問")Ifi=vbNoThenEndEndIf等價(jià)于:Ifi=7Then復(fù)習(xí):MsgBox函數(shù)的使用形式:
變量[%]=MsgBox(提示信息[,按鈕值][,對話框標(biāo)題])MsgBox函數(shù)所選按鈕返回值
內(nèi)部常數(shù)返回值被單擊的按鈕vbOk1確定vbCancel2取消vbAbort3終止vbRetry4重試vbIgnore5忽略vbYes6是vbNo7否復(fù)習(xí):MsgBox按鈕設(shè)置第3個(gè)按鈕為默認(rèn)512VBDefaultButton3第2個(gè)按鈕為默認(rèn)
56VBDefaultButton2第1個(gè)按鈕為默認(rèn)
0VBDefaultButton1默認(rèn)按鈕
信息圖標(biāo)
64VBInformation警告信息圖標(biāo)
48VBExclamation詢問信息圖標(biāo)
32VBQuestion關(guān)鍵信息圖標(biāo)
16VBCritical圖標(biāo)類型
重試、取消按鈕
5VBRetryCancel是、否按鈕
4VBYesNo是、否、取消按鈕
3VBYesNoCancel終止、重試、忽略按鈕
2VBAbortRetryIgnore確定、取消按鈕
1VBOkCancel確定按鈕(缺省)
0VBOkOnly按鈕數(shù)目描述值內(nèi)部常數(shù)分組問題:使用雙分支可以解決2個(gè)分支的問題----當(dāng)運(yùn)算符為+怎么辦?當(dāng)運(yùn)算符為-怎么辦?現(xiàn)在要求編寫具有+,-,*,/四種運(yùn)算的計(jì)算器,怎么辦?4分支問題現(xiàn)實(shí)生活中經(jīng)常要解決多分支問題使用多分支結(jié)構(gòu)!
3.多分支結(jié)構(gòu)引言格式:
If表達(dá)式1Then
語句塊1ElseIf
表達(dá)式2Then
語句塊2 …
[Else
語句塊n+1]
EndIf作用:根據(jù)不同表達(dá)式的值決定執(zhí)行哪個(gè)語句塊3.多分支結(jié)構(gòu)----If…Then…ElseIf
語句
多分支實(shí)例1多功能計(jì)算器可實(shí)現(xiàn)加,減,乘,除計(jì)算多分支實(shí)例多功能計(jì)算器實(shí)現(xiàn)加,減,乘,除計(jì)算,大致程序如下:
...............Ifysf="+"Thenn3=n1+n2
ElseIf
ysf="-"Thenn3=n1-n2
ElseIf
ysf="*"Thenn3=n1*n2Elsen3=n1/n2EndIfText4.Text=n3
思考:如何排除運(yùn)算符輸入錯(cuò)?多分支實(shí)例多功能計(jì)算器
Ifysf="+"Thenn3=n1+n2
ElseIf
ysf="-"Thenn3=n1-n2
ElseIf
ysf="*"Thenn3=n1*n2
ElseIf
ysf="/"n3=n1/n2Else
MsgBox"運(yùn)算符錯(cuò)誤!",vbExclamation,"錯(cuò)誤"
EndIfText4.Text=n3
排除運(yùn)算符輸入錯(cuò)將前面所做加減法運(yùn)算器程序修改為能進(jìn)行加減乘除四種運(yùn)算的程序課堂練習(xí):多分支練習(xí)Dimn1AsSingle,n2AsSingleDimn3AsSingleDimysfAsString*1n1=Val(Text1.Text):
n2=Val(Text3.Text)
ysf=Text2.Text
Ifysf="+"Thenn3=n1+n2
ElseIf
ysf="-"Thenn3=n1-n2
ElseIf
ysf="*"Thenn3=n1*n2
ElseIf
ysf="/"Thenn3=n1/n2Else
MsgBox"運(yùn)算符錯(cuò)誤!",vbExclamation,"錯(cuò)誤"EndIfText4.Text=n3實(shí)現(xiàn)加,減,乘,除計(jì)算程序,計(jì)算按鈕的單擊事件:編寫程序:輸入x的值,求y的值,將x,y在窗體上輸出。
3xx>0Y=0x=0x2x<0課堂練習(xí):多分支練習(xí)例:PrivateSubCommand1_Click()Dimx!,y!x=val(Text1.Text)Ifx>0Theny=3*xElseIfx=0Theny=0Elsey=x^2EndIfText2.Text=yEndSub判斷輸入字符的類型:從鍵盤輸入一個(gè)字符,判斷該字符是字母字符、數(shù)字字符還是其他字符,結(jié)果用信息框輸出。多分支結(jié)構(gòu)例2例
判斷輸入字符的類型多分支結(jié)構(gòu)例預(yù)備知識:判斷數(shù)值變量n在兩數(shù)范圍之內(nèi)(比如0---100)Ifn>=0Andn<=100then.........Endif
注意:不能寫成100<=n<=200判斷數(shù)值變量n不在兩數(shù)范圍之內(nèi)(超出范圍)Ifn<0Orn>100then.............例4.7判斷輸入字符的類型多分支結(jié)構(gòu)例預(yù)備知識:判斷字符變量ch在兩字符范圍之內(nèi)(比如"A"---"Z")Ifch>="A"And
ch<="Z"then……Endif
注意:不能寫成"A"<=ch<="Z"
American
StandardCodeforInformationInterchange
美國標(biāo)準(zhǔn)信息交換代碼
標(biāo)準(zhǔn)ASCII碼:用一個(gè)字節(jié)(8位)表示一個(gè)字符,并規(guī)定其最高位為0,實(shí)際只用到7位,因此可表示27=128
個(gè)不同字符。它包括英文大小寫字母52個(gè),0~9共10個(gè)數(shù)字,標(biāo)點(diǎn)符號、運(yùn)算符號和控制命令符號等。ASCII碼表的規(guī)律:數(shù)字、大寫字母、小寫字母的ASCII碼相鄰,后面的比前面大1。同一個(gè)字母的ASCII碼值小寫比大寫字母大32。
相關(guān)知識復(fù)習(xí):字符編碼——ASCII碼A的ASCII碼為01000001B=65Da的ASCII碼為01100001B=97D例4.7
判斷輸入字符的類型:從鍵盤輸入一個(gè)字符,存放在變量ch中。判斷該字符是字母字符、數(shù)字字符還是其他字符,結(jié)果用信息框輸出。用中文表達(dá),此題目可寫如下:多分支結(jié)構(gòu)例定義字符型變量ch并限制只允許存放一個(gè)字符從鍵盤輸入一個(gè)字符,存放在ch中如果ch的值在字符0到9之間,那么
用信息框顯示ch是數(shù)字字符否則的話,再判斷ch是不是大小寫字母,如果是,那么用信息框顯示ch"是字母字符如果前2種情況都不是的話,那么
用信息框顯示ch
是其他字符結(jié)束判斷例4.7
判斷輸入字符的類型:從鍵盤輸入一個(gè)字符,存放在變量ch中。判斷該字符是字母字符、數(shù)字字符還是其他字符,結(jié)果用信息框輸出。翻譯成相應(yīng)的VB語句,程序如下:多分支結(jié)構(gòu)例dimchasstring*1ch=InputBox("輸入字符")Ifch>="0"Andch<="9"
Then
MsgBox
ch&"是數(shù)字字符"ElseIf
ch>="A"Andch<="Z"Orch>="a"Andch<="z"Then
MsgBox
ch&"是字母字符"Else
MsgBox
ch&"是其他字符"EndIf例4.7
判斷輸入字符的類型:從鍵盤輸入一個(gè)字符,存放在變量ch中。判斷該字符是字母字符、數(shù)字字符還是其他字符,結(jié)果用信息框輸出??梢院喕癁椋憾喾种ЫY(jié)構(gòu)例dimchasstring*1ch=InputBox("輸入字符")ifch>="0"andch<="9"then
msgbox
ch&"是數(shù)字字符"elseif
Ucase(ch)>="A"andUcase(ch)<="Z"
then
msgbox
ch&"是字母字符"else
msgbox
ch&"是其他字符"endif也可以將輸入的字符用asc()函數(shù)求出該字符的ascii碼·值,然后將該值與字符的ascii碼值進(jìn)行比較數(shù)字(0~9)的ascii碼值:48~57大寫字母(A~Z)的ascii碼值:65~90小寫字母(a~z)的ascii碼值:97~122多分支結(jié)構(gòu)例:例4.7
判斷輸入字符的類型:
PrivateSubCommand1_Click()DimchAsString*1,xAsIntegerch=InputBox("輸入字符")x=Asc(ch)Ifx>=48Andx<=57Then
MsgBox
ch&"是數(shù)字字符"ElseIf(x>=65Andx<=90)Or(x>=97Andx<=122)Then
MsgBox
ch&"是字母字符"Else
MsgBox
ch&"是其他字符"EndIfEndSub因?yàn)樾枰唧w寫出ascii碼值,麻煩,因此不提倡,此寫法只是幫助你理解。輸入一學(xué)生百分成績mark,將百分制轉(zhuǎn)化為優(yōu)良中等級制.90---100優(yōu)秀
80---89良好
70---79中
60---69及格
<60不及格
Dimmark%,Str$mark=val(InputBox("輸入成績"))。。。PrintStr多分支結(jié)構(gòu)例3Dimmark%,str$mark=Val(InputBox("輸入成績"))Ifmark>=90Then
str="優(yōu)秀"ElseIfmark>=80Then
str="良好"ElseIfmark>=70Then
str="中"ElseIfmark>=60Then
str="及格"Else
str="不及格"EndIfPrintstr實(shí)現(xiàn)方法1實(shí)現(xiàn)方法2Dimmark%,
str$mark=val(InputBox("輸入成績"))Ifmark>=90andmark<=100then
str="優(yōu)秀"elseifmark>=80andmark<=89then
str="良好"elseifmark>=70andmark<=89then
str="中"elseifmark>=60andmark<=89then
str="及格"else
str="不及格"endifPrintStr正確但不需要!Dimmark%,str$mark=InputBox("輸入成績")Ifmark<60then
str="不及格"elseifmark<70then
str="及格"elseifmark<80then
str="中"elseifmark<90then
str="良好"else
str="優(yōu)秀"endifPrintStr實(shí)現(xiàn)方法3
Dimmark%,str$mark=InputBox("輸入成績")Ifmark>=60then
str="及格"elseifmark>=70then
str="中"elseifmark>=80then
str="良好"elseifmark>=90then
str="優(yōu)秀"else
str="不及格"endifPrintStr這樣如何?出錯(cuò)!例如輸入100,輸出及格輸入坐標(biāo)x,y,輸出在第幾象限.x>0并且y>0第1象限x<0并且y>0第2象限x<0并且y<0第3象限x>0并且y<0第4象限x=0并且y=0在原點(diǎn)其他在坐標(biāo)軸上要求用msgbox過程輸出結(jié)果。課堂練習(xí):多分支結(jié)構(gòu)---判斷坐標(biāo)點(diǎn)象限X>0并且y>0X<0并且y>0X<0并且y<0X>0并且y<0Dimx%,y%x=Val(InputBox("輸入x值:"))y=Val(InputBox("輸入y值:"))Ifx>0Andy>0Then
MsgBox("第1象限")ElseIfx<0Andy>0Then
MsgBox("第2象限")ElseIfx<0Andy<0Then
MsgBox("第3象限")ElseIfx>0Andy<0Then
MsgBox("第4象限")ElseIfx=0Andy=0Then
MsgBox("在原點(diǎn)")Else
MsgBox("在坐標(biāo)軸上")EndIf課堂練習(xí):多分支結(jié)構(gòu)---判斷坐標(biāo)點(diǎn)象限
答案輸入工資,計(jì)算個(gè)人所得稅扣稅工資<=2000不扣工資>2000---50005%
工資>5000---1000010%
工資>1000015%
多分支結(jié)構(gòu)例----計(jì)算扣稅注意:采用累進(jìn)稅率!Dimgz!,ks!'原始變量,結(jié)果變量gz=Val(InputBox("工資"))If
gz<=2000Then
ks=0ElseIf
gz<=5000Then
ks=(gz-2000)*0.05ElseIf
gz<=10000Then
ks=3000*0.05+(gz-5000)*0.1Else
ks=3000*0.05+5000*0.1+(gz-10000)*0.15EndIfMsgBox"工資是:"&gz&","&"應(yīng)扣稅="&ks多分支結(jié)構(gòu)例----計(jì)算扣稅用于解決多分支問題有些情況下使用會(huì)使程序比較簡潔,但比較受限制,不如If---elseif----endif使用廣泛4.3.2SelectCase語句4.3.2SelectCase語句----
多分支語句之二將判斷表達(dá)式的值與比較表達(dá)式進(jìn)行匹配,決定執(zhí)行哪個(gè)語句塊SelectCase<判斷表達(dá)式>Case<比較表達(dá)式1>
語句塊1Case<比較表達(dá)式2>
語句塊2 …[CaseElse
語句塊n+1]EndSelect
Dimx%,g$x=Val(InputBox("請輸入成績:"))
SelectCasex
Case5g="優(yōu)秀"
Case4g="良好"
Case3g="中"
Case2g="及格"
Case1g="掛了"
CaseElseg="輸入有誤!"
EndSelect
MsgBoxg例:假設(shè)成績是5分制:
5分—優(yōu)秀
4分—良好
3分—中
2分-及格
1分—不及格
要求從鍵盤上輸入成績,用信息框,輸出優(yōu)良中比If多分支直觀,程序可讀性強(qiáng)。問題:如果輸入的成績是百分制的分?jǐn)?shù),怎么解決?輸入一學(xué)生百分成績mark,將百分制轉(zhuǎn)化為優(yōu)良中等級制輸出。
90---100優(yōu)秀
80---89良好
70---79中
60---69及格
<60不及格Dimmark%,Str$mark=val(InputBox("輸入成績"))。。。Form1.PrintStr
SelectCase語句中的
比較表達(dá)式的其它使用方法SelectCase<判斷表達(dá)式>Case<比較表達(dá)式1>
語句塊1Case<比較表達(dá)式2>
語句塊2 …[CaseElse
語句塊n+1]EndSelect比較表達(dá)式可以是下面4種形式之一:1.數(shù)值型或字符串表達(dá)式例:100
例:50*22.一組用逗號分隔的表達(dá)式列表例:2,4,6,8
3.表達(dá)式1To
表達(dá)式260To1004.Is關(guān)系運(yùn)算符表達(dá)式Is<60(只能有關(guān)系運(yùn)算符)SelectCase語句例----用Is關(guān)系運(yùn)算符表達(dá)式Dimx%,g$x=InputBox("請輸入成績:")SelectCasexCaseIs>=90g="優(yōu)秀"CaseIs>=80g="良好"CaseIs>=70g="中"CaseIs>=60g="及格"CaseElseg="掛了"EndSelect
MsgBoxg例:
輸入百分成績,輸出優(yōu)良等級。另一寫法SelectCase語句例----用表達(dá)式1To表達(dá)式2
形式Dimx%,g$x=InputBox("請輸入成績:")SelectCasexCase90To100g="優(yōu)秀"Case80To89g="良好"Case70To79g="中"Case60To69g="及格"CaseElseg="掛了"EndSelect
MsgBoxg例:
輸入百分成績,輸出優(yōu)良等級。另一寫法例:
輸入百分制成績,輸出優(yōu)良等級,100分時(shí)輸出“滿分”
Dimx%,g$x=InputBox("請輸入成績:")SelectCasexCase100g="滿分"Case90,91,92,93,94,95,96,97,98,99g="優(yōu)秀"Case80To89g="良好"CaseIs>=70g="中"CaseIs>=60g="及格"CaseElseg="掛了"EndSelect
MsgBoxg1.數(shù)值型或字符串表達(dá)式
2.一組用逗號分隔的表達(dá)式列表3.表達(dá)式1To
表達(dá)式24.Is關(guān)系運(yùn)算符表達(dá)式這樣不對,為什么?Dimx%,g$x=InputBox("請輸入成績:")SelectCasexCaseis>=90andis<=100g="優(yōu)秀"Casex>=80g="良好"Casex>=70g="中"Casex>=60g="及格"CaseElseg="掛了"EndSelect
MsgBoxg不能有and語法錯(cuò)誤!應(yīng)使用is代表xSelectCase舉例將例4.7改用SelectCase語句實(shí)現(xiàn):
SelectCasech Case"a"To"z","A"To"Z"
MsgBox
ch+"是字母字符" Case"0"To"9"
MsgBox
ch+"是數(shù)字字符"
CaseElse
MsgBox
ch+"是其他字符"EndSelect
前情回顧:例4.7輸入一個(gè)字符判斷該字符是字母字符,數(shù)字字符還是其他字符。用If…Then…ElseIf語句實(shí)現(xiàn)DimchAsString*1ch=InputBox("輸入1個(gè)字符:")IfUCase(ch)>="A"AndUCase(ch)<="Z"Then
MsgBox
ch+"是字母字符"ElseIf
ch>="0"Andch<="9"Then
MsgBox
ch+"是數(shù)字字符"Else
MsgBox
ch+"是其他字符"EndIfSelectCase舉例將例4.7改用SelectCase語句實(shí)現(xiàn):
SelectCasech Case"a"To"z","A"To"Z"
MsgBox
ch+"是字母字符" Case"0"To"9"
MsgBox
ch+"是數(shù)字字符"
CaseElse
MsgBox
ch+"是其他字符"EndSelect例4.7輸入一個(gè)字符判斷該字符是字母字符,數(shù)字字符還是其他字符。DimchAsString*1
ch=InputBox("輸入1個(gè)字符:")SelectCasechCase"a"To"z","A"To"Z"
MsgBox
ch+"是字母字符"Case"0"To"9"
MsgBox
ch+"是數(shù)字字符"CaseElse
MsgBox
ch+"是其他字符"EndSelect多分支問題:計(jì)算扣稅輸入工資,計(jì)算個(gè)人所得稅扣稅工資<=2000不扣工資>2000---50005%
工資>5000---1000010%
工資>1000015%
多分支問題:計(jì)算扣稅用If多分支Dimgz!,ks!'原始變量,結(jié)果變量gz=Val(InputBox("輸入工資:"))Ifgz<=2000Then
ks=0ElseIf
gz<=5000Then
ks=(gz-2000)*0.05ElseIf
gz<=10000Then
ks=3000*0.05+(gz-5000)*0.1Else
ks=3000*0.05+5000*0.1+(gz-10000)*0.15EndIfMsgBox"應(yīng)扣稅="&ks問題:計(jì)算扣稅用Select多分支Dimgz!,ks!'原始變量,結(jié)果變量gz=Val(InputBox("工資"))SelectCasegzCaseIs<=2000
ks=0CaseIs<=5000
ks=(gz-2000)*0.05CaseIs<=10000
ks=3000*0.05+(gz-5000)*0.1CaseElse
ks=3000*0.05+5000*0.1+(gz-10000)*0.15EndSelectMsgBox"工資="&gz&";應(yīng)扣稅="&ks&";實(shí)發(fā)="&gz-ks問題:判斷坐標(biāo)點(diǎn)象限
能否用SelectCase?輸入坐標(biāo)x,y,輸出在第幾象限.x>0并且y>0第1象限x<0并且y>0第2象限x<0并且y<0第3象限x>0并且y<0第4象限x=0并且y=0在原點(diǎn)其他在坐標(biāo)軸上SelectCase不能用于對多值的判斷!只能對一個(gè)值進(jìn)行判斷!故使用受限!4.3.3條件函數(shù)
1.IIf函數(shù)IIf(表達(dá)式,表達(dá)式為真時(shí)的值,表達(dá)式為假時(shí)的值)IIf函數(shù)是If…Then…Else結(jié)構(gòu)的簡潔表示例如,將x,y中大的數(shù),放入Tmax變量中:Tmax=IIf(x>y,x,y)該語句與如下語句等價(jià):Ifx>yThenTmax=xElseTmax=y該語句與如下語句等價(jià):Ifx>yThen
Tmax=x
Else
Tmax=y
Endif4.3.3條件函數(shù)
(2)Choose函數(shù)
Choose(整數(shù)表達(dá)式,選項(xiàng)列表)根據(jù)整數(shù)表達(dá)式的值i,返回選項(xiàng)列表中第i個(gè)選項(xiàng)。例:輸入5分制成績,顯示優(yōu)良等級。dimi%,str$i=val(inputbox("輸入5分制成績"))str=Choose(i,"不及格","及格","中等","良好","優(yōu)秀")MsgBox
str例:輸入5分制成績,顯示優(yōu)良等級。dimi%,str$i=val(inputbox("輸入5分制成績"))str=Choose(i,"不及格","及格","中等","良好","優(yōu)秀")MsgBox
strDimx%,g$:x=Val(InputBox("請輸入成績:"))
SelectCasex
Case5g="優(yōu)秀"
Case4g="良好"
Case3g="中"
Case2g="及格"
Case1g="掛了"
CaseElseg="輸入有誤!"
EndSelect
MsgBoxg等價(jià)4.3.3條件函數(shù)
(2)Choose函數(shù)
Choose(整數(shù)表達(dá)式,選項(xiàng)列表)根據(jù)表達(dá)式的值i,返回選項(xiàng)列表中第i個(gè)選項(xiàng)。注意該函數(shù)的值是字符型例:例4.10
根據(jù)當(dāng)前日期,顯示今日是星期幾。Dimt$t=Choose(Weekday(Now),"星期日","星期一","星期二","星期三","星期四","星期五","星期六")MsgBox("今天是:"&Now&t)復(fù)習(xí):WeekDay(C|D)
返回星期幾對應(yīng)數(shù)值。周日為1,周一為2.Dimt$t=Choose(Weekday(Now),"星期日","星期一","星期二","星期三","星期四","星期五","星期六")MsgBox("今天是:"&Now&t)Dimt$SelectCaseWeekday(Now)Case1t="星期日"Case2t="星期一"Case3t="星期二"Case4t="星期三"Case5t="星期四"Case6t="星期五"Case7t="星期六"EndSelectMsgBox("今天是:"&Now&t)等價(jià)Dimt$t=Choose(Weekday(Now),"星期日","星期一","星期二","星期三","星期四","星期五","星期六")MsgBox("今天是:"&Now&t)Dimt$IfWeekday(Now)=1Thent="星期日"ElseIf
Weekday(Now)=2Thent="星期一"ElseIf
Weekday(Now)=3Thent="星期二"ElseIf
Weekday(Now)=4Thent="星期三"ElseIf
Weekday(Now)=5Thent="星期四"ElseIf
Weekday(Now)=6Thent="星期五"Elset="星期六"EndIfMsgBox("今天是:"&Now&t)等價(jià)4.3.4If語句的嵌套If語句的嵌套是指If或Else后面的語句塊中又包含If語句實(shí)際問題中非常需要If<表達(dá)式>Then
語句塊
EndIfIf<表達(dá)式>Then
語句塊
EndIfIf<表達(dá)式>Then
語句塊
EndIfIf<表達(dá)式>
Then
語句Else
語句塊2EndIfIf<表達(dá)式>Then
語句塊
EndIfIf表達(dá)式1Then
語句塊1ElseIf
表達(dá)式2Then
語句塊2 …
[Else
語句塊n+1]
EndIf
If
表達(dá)式1Then
If
表達(dá)式2Then…EndIfElse
If
表達(dá)式3Then…
EndIf…End
If
If表達(dá)式1Then
語句塊1
ElseIf
表達(dá)式2Then
語句塊2 …
[Else
語句塊n+1]
EndIfIf<表達(dá)式>Then
語句塊
EndIfIf<表達(dá)式>
Then
語句Else
語句塊2EndIfIf表達(dá)式1Then
語句塊1ElseIf
表達(dá)式2Then
語句塊2 …
[Else
語句塊n+1]
EndIfIf語句的嵌套舉例----密碼檢驗(yàn)程序例:編寫一賬號和密碼輸入的檢驗(yàn)程序,假設(shè)正確的賬號是“123456”,密碼為“abcd”.(要求輸入賬號和密碼時(shí)在文本框中顯示*)例1.當(dāng)賬號和密碼輸入正確,顯示如圖對話框:2.當(dāng)賬號或密碼輸入不正確,顯示如圖所示對話框,如用戶單擊了重試按鈕,則text1獲得焦點(diǎn),重新輸入賬號和密碼;如用戶單擊了取消按鈕,則結(jié)束程序運(yùn)行。If語句的嵌套舉例----密碼檢驗(yàn)程序MsgBox"賬號密碼正確",0,"歡迎使用本系統(tǒng)“或者:MsgBox"賬號密碼正確",vbOKOnly,"歡迎使用本系統(tǒng)"需要的對話框分析:復(fù)習(xí):MsgBox過程按鈕設(shè)置第3個(gè)按鈕為默認(rèn)512VBDefaultButton3第2個(gè)按鈕為默認(rèn)
56VBDefaultButton2第1個(gè)按鈕為默認(rèn)
0VBDefaultButton1默認(rèn)按鈕
信息圖標(biāo)
64VBInformation警告信息圖標(biāo)
48VBExclamation詢問信息圖標(biāo)
32VBQuestion關(guān)鍵信息圖標(biāo)
16VBCritical圖標(biāo)類型
重試、取消按鈕
5VBRetryCancel是、否按鈕
4VBYesNo是、否、取消按鈕
3VBYesNoCancel終止、重試、忽略按鈕
2VBAbortRetryIgnore確定、取消按鈕
1VBOkCancel確定按鈕(缺省)
0VBOkOnly按鈕數(shù)目描述值內(nèi)部常數(shù)分組i=MsgBox("密碼錯(cuò)誤",5+48,"警告")i=MsgBox("密碼錯(cuò)誤",vbRetryCancel+vbExclamation,"警告")i=MsgBox("密碼錯(cuò)誤",5+vbExclamation,"警告")i=MsgBox("密碼錯(cuò)誤",vbRetryCancel+48,"警告")復(fù)習(xí):MsgBox過程按鈕設(shè)置第3個(gè)按鈕為默認(rèn)512VBDefaultButton3第2個(gè)按鈕為默認(rèn)
56VBDefaultButton2第1個(gè)按鈕為默認(rèn)
0VBDefaultButton1默認(rèn)按鈕
信息圖標(biāo)
64VBInformation警告信息圖標(biāo)
48VBExclamation詢問信息圖標(biāo)
32VBQuestion關(guān)鍵信息圖標(biāo)
16VBCritical圖標(biāo)類型
重試、取消按鈕
5VBRetryCancel是、否按鈕
4VBYesNo是、否、取消按鈕
3VBYesNoCancel終止、重試、忽略按鈕
2VBAbortRetryIgnore確定、取消按鈕
1VBOkCancel確定按鈕(缺省)
0VBOkOnly按鈕數(shù)目描述值內(nèi)部常數(shù)分組4種寫法等價(jià)i=MsgBox("密碼錯(cuò)誤",5+48,"警告")復(fù)習(xí):MsgBox函數(shù)的使用形式:
變量[%]=MsgBox(提示信息[,按鈕值][,對話框標(biāo)題])MsgBox函數(shù)所選按鈕返回值
內(nèi)部常數(shù)返回值被單擊的按鈕vbOk1確定vbCancel2取消vbAbort3終止vbRetry4重試vbIgnore5忽略vbYes6是vbNo7否PrivateSubCommand1_Click()Dimzh$,ma$zh=Text1.Textma=Text2.TextDimiAsInteger
Ifzh<>"123456"Orma<>"abcd"Theni=MsgBox("賬號或密碼錯(cuò)誤",5+48,"警告")
Ifi=2Then'如果用戶單擊了“取消”按鈕
EndElseText1.Text=""Text2.Text=""Text1.SetFocusEndIfElse
MsgBox"賬號密碼正確",0,"歡迎使用本系統(tǒng)"
EndIf
EndSub外層IF內(nèi)層嵌套IFPrivateSubCommand1_Click()Dimzh$,ma$zh=Text1.Textma=Text2.TextDimiAsInteger
Ifzh<>"123456"Orma<>"abcd"Theni=MsgBox("賬號或密碼錯(cuò)誤",_
vbRetryCancel+vbExclamation,"警告")
Ifi=vbCancelThenEndElseText1.Text=""Text2.Text=""Text1.SetFocusEndIf
Else
MsgBox"賬號密碼正確",0,"歡迎使用本系統(tǒng)"EndIfEndSub與前頁完全等價(jià)的寫法,但使用VB的常量例完善前例功能:在前面的程序中輸入密碼時(shí)需要用鼠標(biāo)單擊將插入點(diǎn)定位到要輸入數(shù)據(jù)的文本框中,其實(shí),為了用戶操作方便,經(jīng)常需要在輸入完數(shù)據(jù)后打回車鍵插入點(diǎn)自動(dòng)定位到下一個(gè)文本框中。要求:
1.當(dāng)在Text1中鍵入回車鍵時(shí),光標(biāo)能自動(dòng)移到Text2中
2.當(dāng)在Text2中鍵入回車鍵時(shí),自動(dòng)執(zhí)行命令按鈕的單擊事件過程
解決方法:利用文本框的KeyPress事件處理回車鍵
If語句的嵌套舉例----密碼檢驗(yàn)程序事件程序框架(模板)PrivateSubText1_KeyPress(KeyAsciiAsInteger)……EndSub
使用:按下并且釋放鍵盤上的一個(gè)鍵時(shí),引發(fā)焦點(diǎn)所在控件的KeyPress事件,所按鍵的值存放在參數(shù)KeyAscii中常見用例:對回車的判斷
KeyAscii=13
復(fù)習(xí):文本框的常用事件之一----KeyPress事件
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then
'回車字符編碼=13
Text2.SetFocusEndIfEndSubPrivateSubText2_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then
Command1_Click
'執(zhí)行Command1的單擊事件過程
EndIfEndSub在之前的程序中增加如下事件程序:IF嵌套舉例2:多功能計(jì)算器
IF嵌套舉例2:多功能計(jì)算器
IF嵌套舉例:多功能計(jì)算器
Ifysf="+"Thenn3=n1+n2
ElseIf
ysf="-"Thenn3=n1-n2
ElseIf
ysf="*"Thenn3=n1*n2
ElseIf
ysf="/"n3=n1/n2Else
MsgBox"運(yùn)算符錯(cuò)誤!"EndIfText4.Text=n3
如何防止除數(shù)為0?IF嵌套例:解決多功能計(jì)算器程序中分母不能為0問題
If
ysf="+"Thenn3=n1+n2
ElseIf
ysf="-"Thenn3=n1-n2
ElseIf
ysf="*"Thenn3=n1*n2
ElseIf
ysf="/"
Ifn2=0Then
MsgBox"除數(shù)不能為0!"Text3.Text=""Text3.SetFocusElsen3=n1/n2EndIf
Else
MsgBox
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年度雜志封面平面模特聘用協(xié)議3篇
- 2025年度電梯安裝施工安全監(jiān)督與隱患排查合同3篇
- 專業(yè)攝影棚租賃服務(wù)協(xié)議范本:短期租賃條款明細(xì)一
- 2025至2030年中國全自動(dòng)摔軟轉(zhuǎn)鼓數(shù)據(jù)監(jiān)測研究報(bào)告
- 二零二五年度油氣儲(chǔ)罐升級改造工程合同4篇
- 二零二五年度時(shí)尚飾品全球采購與國內(nèi)零售合同3篇
- 2025年中國電氣設(shè)備防潮絕緣保護(hù)劑市場調(diào)查研究報(bào)告
- 二零二四年物流配送與供應(yīng)鏈管理服務(wù)合同3篇
- 文物圖像處理與優(yōu)化策略-深度研究
- 2025至2031年中國防紫外線晴雨傘行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024年新北師大版八年級上冊物理全冊教學(xué)課件(新版教材)
- 人教版數(shù)學(xué)四年級下冊核心素養(yǎng)目標(biāo)全冊教學(xué)設(shè)計(jì)
- JJG 692-2010無創(chuàng)自動(dòng)測量血壓計(jì)
- 三年級下冊口算天天100題(A4打印版)
- 徐州市2023-2024學(xué)年八年級上學(xué)期期末地理試卷(含答案解析)
- CSSD職業(yè)暴露與防護(hù)
- 飲料對人體的危害1
- 數(shù)字經(jīng)濟(jì)學(xué)導(dǎo)論-全套課件
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)項(xiàng)目三 移動(dòng)商務(wù)運(yùn)營內(nèi)容的策劃和生產(chǎn)
- 中考記敘文閱讀
- 產(chǎn)科溝通模板
評論
0/150
提交評論