Visual Basic程序設計教程(第四章)_第1頁
Visual Basic程序設計教程(第四章)_第2頁
Visual Basic程序設計教程(第四章)_第3頁
Visual Basic程序設計教程(第四章)_第4頁
Visual Basic程序設計教程(第四章)_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VisualBasic的程序語句順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)其他控制語句第四章

程序設計基礎(chǔ)4.2順序結(jié)構(gòu)4.2.1數(shù)據(jù)輸出4.2.2數(shù)據(jù)輸入返回退出4.2順序控制結(jié)構(gòu)

順序結(jié)構(gòu)就是各語句按出現(xiàn)的先后次序執(zhí)行。一般的程序設計語言中,順序結(jié)構(gòu)的語句主要是賦值語句、輸入/輸出語句等。在VB中也有賦值語句,而輸入/輸出可以通過文本框、print方法等實現(xiàn),也可以通過系統(tǒng)提供的函數(shù)和過程來實現(xiàn)。

4.2.1賦值語句賦值語句的一般形式如下:

變量名=表達式

對象.屬性=表達式程序執(zhí)行時,先計算右邊表達式的值,然后將值賦給左邊的變量或?qū)傩浴?/p>

例如:

X=100

‘把數(shù)值賦給變量X;

Text1.Text="VB歡迎你"

‘把字符串賦給Text1的Text屬性

Label1.Caption=Date()

‘把Date函數(shù)的結(jié)果賦給Label1的Caption屬性

Label1.Top=Label1.Top-100

‘把表達式的值賦給Label1的Top屬性

在賦值語句中,賦值運算符"="代表賦值操作,而不代表等量關(guān)系。

4.2.1數(shù)據(jù)輸出

1Print方法2與Print方法有關(guān)的函數(shù)3使用位置屬性4清除方法CLS5使用“標簽”控件的輸出1Print方法Print方法的語法格式為:object.Print{Spc(n)|Tab(n)}expressioncharpos其中:object:窗體、圖片框、打印機等對象。Expression:要打印的數(shù)值表達式或字符串表達式。Charpos:逗號或分號,指定下個字符的插入點。2.與Print方法有關(guān)的函數(shù)與Print相配合的函數(shù):(1)Tab函數(shù)與Print#語句或Print方法一起使用,對輸出進行定位。格式:Tab[(n)]當在一個Print方法中有多個Tab函數(shù)時,每個Tab函數(shù)對應一個輸出項,各輸入項之間用分號隔開。例題PrivateSubForm_Click()Print"12345678901234567890"PrintTab(5);"5";Tab(10-2);"8","'注意這里10-2>當前位置5,故同行顯示"PrintTab(5);"5";Tab(10-6);"4";Tab(20-15);"5";"'注意這里10-6<當前位置5,故換行顯示;20-15>當前位置4,故同行顯示"EndSub程序執(zhí)行結(jié)果見圖4-1。程序中已經(jīng)對程序顯示特點做出解釋。圖4-1Print方法與Tab()函數(shù)結(jié)合(2)Spc函數(shù)格式:Spc(n)在顯示或打印列表中的下一個表達式之前插入n個空白數(shù),n為0~32767之間的整數(shù)。Spc函數(shù)與輸出項之間用分號隔開。如果n小于輸出行的寬度,則下一個打印位置將緊接在數(shù)個已打印的空白之后。如果n大于輸出行的寬度,則Spc利用下列公式計算下一個打印位置:當前位置+(nMod行寬)Spc函數(shù)與Tab函數(shù)的作用類似,可以互相代替。但應注意,Tab函數(shù)從對象的左端開始記數(shù),而Spc函數(shù)只表示兩個輸出項之間的間隔。3.使用位置屬性位置屬性CurrentX和CurrentY常用來把文本精確地輸出到窗體、圖片框或打印頁上。這兩個屬性分別表示當前輸出位置的橫坐標與縱坐標。格式:[對象名稱].CurrentX[=x][對象名稱].CurrentY[=y]例如:下面程序?qū)D片框相對于窗體居中顯示,圖片框中的文字居中顯示。PrivateSubForm_Click()Dimstr1AsStringstr1="圖片框相對窗體、文字相對圖片框居中顯示"Picture1.FontName="宋體"'圖片框中文字的字體

Picture1.FontSize=16'圖片框中文字的字號

Picture1.Left=(ScaleWidth-Picture1.Width)/2'圖片框水平位置

Picture1.Top=(ScaleHeight-Picture1.Height)/2'圖片框垂直位置

Picture1.CurrentX=Picture1.ScaleLeft+Picture1.Width/2-Picture1.TextWidth(str1)/2'輸出水平位置

Picture1.CurrentY=Picture1.ScaleTop+Picture1.Height/2-Picture1.TextHeight(str1)/2'輸出垂直位置

Picture1.Printstr1'在圖片框中輸出字符串str1EndSub各對象的其他參數(shù)保持默認值。程序設計時和運行結(jié)果見圖4-2。無論怎樣調(diào)整窗體,只要單擊窗體,都會按題目要求調(diào)整圖片框和文本的位置。TextWidth()為求文本寬度的函數(shù)。

(a)設計時(b)運行時圖4-2位置屬性的應用4.清除方法CLSCls將清除圖形和打印語句在運行時所產(chǎn)生的文本和圖形,清除后的區(qū)域以背景色填充。但是設計時在Form中使用Picture屬性設置的背景位圖和放置的控件不受Cls影響。語法:[〈對象名稱〉.]Cls例如,為了在運行時雙擊窗體時清除圖片框中的文本,編寫的程序為:PrivateSubForm_DblClick()Picture1.Cls'清除圖片框中的文本EndSub如果將代碼由Picture1.Cls改為.Cls,將無法清除圖片框中的文本。5.使用“標簽”控件的輸出標簽(Label)是VB中最常用的輸出文本信息的工具,目前幾乎完全取代了Print方法。例如:建立一個Label控件和Command控件,按表4-1設置設計時屬性。加入如下代碼,運行程序。PrivateSubCommand1_Click()Label1.WordWrap=TrueLabel1.AutoSize=TrueLabel1.BorderStyle=1Label1.BackColor=&H80000014EndSub由運行結(jié)果可知,單擊命令按鈕后,標簽控件可以自動適用內(nèi)容,并自動換行,且加上邊框,背景色為白色以突出顯示文字。表4-1屬性設置對象屬性設計時屬性值說明Command1Caption單擊此按鈕,令WordWrap=True,AutoSize=True命令按鈕標題Label1Caption將WordWrap屬性設置為True,則Caption屬性的內(nèi)容自動換行并垂直擴充;將AutoSize屬性設置為True,控件自動適應內(nèi)容標簽控件的內(nèi)容WordWrapFalse不自動換行AutoSizeFalse控件不能自動調(diào)整Font宋體、三號(a)設計時(b)運行結(jié)果圖4-3利用標簽控件輸出4.2.2數(shù)據(jù)輸入

1使用“文本框”控件進行輸入2SetFocus方法3與用戶交互的函數(shù)和過程1使用“文本框”控件進行輸入例4-1:,設計建立四個標簽控件和三個文本框控件,各要求在運行時,雙擊填寫意見的文本框,可以將該文本框放大至窗口的1/2。設計步驟如下:(1)建立應用程序用戶界面單擊“文件|新建工程”,進入窗體設計器。增加四個標簽Label1~Label4和三個文本框Text1~Text3。(2)屬性設置設置各對象的屬性值,其他屬性值不變。(3)編寫代碼雙擊Text3文本框,打開Text3的代碼窗口,在過程下拉列表框中選擇“DblClick”,編寫Text3的DblClick事件的代碼:PrivateSubText3_DblClick()Text3.Left=0Text3.Width=Width'Text3的寬度為窗口寬度Text3.Height=Height/2'Text3的高度為窗口高度的1/2Label4.Top=Text3.Top+Text3.Height+100'Label4始終在Text3之下EndSub2SetFocus方法使某個控件獲得焦點,可以有多種方法:(1)直接單擊這一控件。(2)按Tab鍵(或Tab+Shfit組合鍵)按規(guī)定的次序在各控件之間移動焦點。(3)在代碼中使用SetFocus方法使得某一控件獲得焦點。使用SetFocus方法的格式為:<對象名稱>.SetFocus其中:<對象名稱>:為對象表達式,其值為可以獲得焦點的控件對象名稱。例4-2:在上述工程中,增添一個命令按鈕,單擊該按鈕時將清空所有文本框中的內(nèi)容(完善的工程將要編寫保存用戶信息的代碼)。(1)增加Command命令按鈕。在窗體的合適位置增加一個Command命令按鈕,調(diào)整其大小。(2)設置屬性可以將Caption屬性值設置為“發(fā)送”。設置Font屬性符合整體風格。(3)編寫Command1的Click事件的代碼PrivateSubCommand1_Click()Text1.Text=""Text2.Text=""Text3.Text=""Text1.SetFocusEndSub并在上例代碼的后面增加一行如下代碼:Command1.Top=Text3.Top+Text3.Height+100'Command1始終在Text3之下該代碼使得Command1控件始終保持在Text3控件之下。3與用戶交互的函數(shù)和過程

1.InputBox函數(shù)作用:在一對話框中顯示提示,等待用戶輸入正文或按下按鈕,并返回包含文本框中內(nèi)容,函數(shù)值的類型為String類型。語法格式:

[變量[%]]=InputBox(<提示>[,<標題>][,<默認>][,<x坐標位置>][,<y坐標位置>][,<helpfile>,<context>])2.MsgBox函數(shù)和MsgBox過程作用:在對話框中顯示信息,等待用戶單擊按鈕,并返回一個整數(shù)以標明用戶單擊了哪個按鈕。語法格式[變量[%]]=MsgBox(<提示>[,<按鈕>][,<標題>][,<helpfile>,<context>])例4-3:在上述實例中,要求單擊“發(fā)送”命令按鈕后,顯示如下對話框,提示您輸入身份證號,并將輸入內(nèi)容保存在變量strIDcard中。增添的代碼為:PrivateSubCommand1_Click()DimstrIDcardAsString,strTextAsStringstrText="請輸入您的身份證號并單擊“確定”"+Chr(13)+Chr(10)+"重新填寫請單擊“取消”"strIDcard=InputBox$(strText,"身份證號",,100,100)Text1.SetFocusEndSub如果單擊“確定”按鈕,則strIDcard的值為輸入值“123456789”,否則為空字符串。圖4-5使用InputBox

函數(shù)(2)MsgBox函數(shù)和MsgBox過程MsgBox函數(shù)在對話框中顯示信息,等待用戶單擊按鈕,并返回一個整數(shù)以標明用戶單擊了哪個按鈕。其語法格式為:[變量[%]]=MsgBox(<提示>[,<按鈕>][,<標題>][,<helpfile>,<context>])MsgBox語句的用法為:MsgBox<提示>[,<按鈕>][,<標題>][,<helpfile>,<context>]其中:<提示>、<標題>、<Helpfile>和<context>的意義同InputBox函數(shù)。<按鈕>可選項。整型表達式,指定顯示按鈕的數(shù)目及形式,使用的圖標類型,缺省按鈕的種類以及消息框的強制回應等。如果省略,則<按鈕>的缺省值為0。表4-3<按鈕>設置值及其意義分組系統(tǒng)常數(shù)值描述按鈕數(shù)目vbOKOnly0只顯示

OK按鈕。VbOKCancel1顯示

OK及

Cancel按鈕。VbAbortRetryIgnore2顯示

Abort、Retry及

Ignore按鈕。VbYesNoCancel3顯示

Yes、No及

Cancel按鈕。VbYesNo4顯示

Yes及

No按鈕。VbRetryCancel5顯示

Retry及

Cancel按鈕。圖標類型VbCritical16顯示

CriticalMessage圖標。VbQuestion32顯示

WarningQuery圖標。VbExclamation48顯示

WarningMessage圖標。VbInformation64顯示

InformationMessage圖標。默認按鈕vbDefaultButton10第一個按鈕是缺省值。vbDefaultButton2256第二個按鈕是缺省值。vbDefaultButton3512第三個按鈕是缺省值。模式vbApplicationModal0應用程序強制返回;應用程序一直被掛起,直到用戶對消息框作出響應才繼續(xù)工作。vbSystemModal4096系統(tǒng)強制返回;全部應用程序都被掛起,直到用戶對消息框作出響應才繼續(xù)工作。表4-4MsgBox函數(shù)的返回值系統(tǒng)常數(shù)返回值描述VbOK1確定vbCancel2取消vbAbort3終止vbRetry4重試vbIgnore5忽略VbYes6是VbNo7否單擊“是”:完成提交操作,顯示如圖4-7對話框,單擊“確定”結(jié)束程序。單擊“否”:返回Command1_click事件,重新顯示如圖4-5所示輸入對話框。單擊“取消”:沒有提交操作,顯示如圖4-8對話框,單擊“確定”結(jié)束程序。圖4-6MsgBox對話框的應用(a)例4-4:在上例中,如果要求在單擊InputBox對話框中的“確定”按鈕后,彈出一個如圖4-6所示的對話框,以便用戶進行審查并作出如下選擇:

圖4-7MsgBox對話框的應用圖4-8MsgBox對話框的應用修改的Command1_click事件代碼為:PrivateSubCommand1_Click()DimintMsginAsIntegerDimstrmsgAsStringstrText="請輸入您的身份證號并單擊“確定”"+Chr(13)+Chr(10)+"重新填寫請單擊“取消”"strIDcard=InputBox$(strText,"身份證號",,100,100)strmsg="請確認您的身份證號碼:"+Chr(13)+Chr(10)+strIDcard'圖4-9對話框顯示的內(nèi)容IfstrIDcard<>""ThenintMsgin=MsgBox(strmsg,vbYesNoCancel+vbQuestion+vbDefaultButton2,"確認身份證")EndIfSelectCaseintMsginCase6'……..提交意見單的代碼略MsgBox"您的意見已經(jīng)提交,謝謝!",vbOKOnly+vbInformation,"已經(jīng)提交"Case7Command1_Click'重新執(zhí)行Command1_Click事件Case2MsgBox"您已經(jīng)放棄提交意見,歡迎下次參加!",vbOKOnly+vbCritical,"放棄提交"EndSelectEndEndSub例

編寫一醫(yī)生工作站的登錄檢驗程序,運行界面如圖。對登錄名(醫(yī)生工號)和密碼的規(guī)定如下:(1)醫(yī)生工號不超過6位數(shù)字,密碼為6位字符,密碼輸入時顯示為“*”。本題假設密碼為“cljuan”。(2)當醫(yī)生工號輸入非數(shù)字字符,密碼不正確時,顯示相關(guān)信息。(3)若單擊“重試”按鈕,則清除原來輸入的內(nèi)容,焦點定位在原輸入文本框,等待用戶輸入。若單擊取消按鈕,程序停止運行。

本程序運行結(jié)果如圖所示,程序代碼見后頁。例4-2程序代碼如下:PrivateSubCommand1_Click()DimIAsIntegerIFNotText2="cljuan"ThenI=MsgBox("密碼錯誤",5+64+0+VBSystemModel,"登錄密碼")IFI=2ThenEndElseText2=""‘用戶單擊“取消”按鈕返回按鈕值

‘用戶單擊”重試”按鈕文本框置空,等待用戶重新輸入

Text2.SetFocus‘將焦點設置在文本框2上,方便用戶輸入EndIFEndSubPrivateSubText1_LostFocus()‘焦點離開文本框1時觸發(fā)LostFocus事件IFNotIsNumeric(Text1)Then‘利用IsNumeric()函數(shù)判斷文本框中輸入的是否為數(shù)字字符

MsgBox"醫(yī)生工號必須是數(shù)字字符"Text1=""Text1.SetFocusEndIFEndSub4.3選擇結(jié)構(gòu)程序設計

4.3.1If條件語句4.3.2SelectCase4.3.3條件函數(shù)返回退出4.3.1If條件語句

1.單分支條件結(jié)構(gòu)(If...Then語句)2.雙分支結(jié)構(gòu)(If...Then...Else語句)3.多分支結(jié)構(gòu)(If…Then…ElseIf語句)4.If語句的嵌套1.單分支條件結(jié)構(gòu)(If...Then語句)用If...Then結(jié)構(gòu)有條件地執(zhí)行一個或多個語句。單行語法和多行塊語法都可以使用:(1)If<

表達式>

Then<語句塊>(2)If<

表達式>Then<語句塊>EndIf下面兩個例子等價:(1)IftodayDate<NowThentodayDate=Now(2)IftodayDate<NowThentodayDate=NowEndIf注意:If...Then的單行格式不用EndIf語句。如果<表達式>為True時要執(zhí)行多行代碼,則必須使用多行塊If...Then...EndIf語法。例如:IftodayDate<NowThentodayDate=NowTimer1.Enabled=False'定時器控制失效。EndIf

<表達式>TrueFalse<語句>空

todayDate<NowTrueFalsetodayDate=Now空Timer1.Enabled=False圖4-12單分支條件語句圖4-13單分支條件語句實例1.IF……Then語句(單分支結(jié)構(gòu))語句形式:(1)IF<表達式>Then

語句塊

EndIF(2)IF<表達式>Then語句塊表達式語句塊FT單分支結(jié)構(gòu)流程示意圖其中:表達式:一般為關(guān)系表達式、邏輯表達式,也可以為算術(shù)表達式。表達式的值按非零為True,零為False進行處理。語句塊:可以是一條或多條語句。如果采用形式(2)表示則語句之間要用冒號分隔,并且一定寫在同一行上。例4-3已知兩個變量x和y,比較它們的大小,使x中的值大于y。(要實現(xiàn)兩個變量中的數(shù)互相交換通常以使用第三變量為過渡,在此為t)語句如下:IFx<yThent=x

‘將變量x中的值暫時存放于變量t中

x=y‘用變量y中的值替代變量x中的值

y=t‘再將原變量x中的值替代變量y中的值EndIF或者

IFx<yThent=x:x=y:y=t2.雙分支結(jié)構(gòu)(If...Then...Else語句)可以用If...Then...Else塊定義幾個語句塊,執(zhí)行其中一個語句。其語法格式也有兩種形式:(1)If<表達式>Then<語句塊1>Else<語句塊2>EndIf(2)If<表達式>Then<語句1>Else<語句2>當<表達式>的值為真時,執(zhí)行Then后面的語句塊1(或語句1),否則執(zhí)行Else后面的語句塊2(或語句2)。其流程見圖4-11。y=

<表達式>TrueFalse<語句塊1><語句塊2>圖4-14雙分支結(jié)構(gòu)流程2.IF……..Then……Else(雙分支結(jié)構(gòu))語句形式:

IF<表達式>Then

<語句塊1>

Else

<語句塊2>

EndIF或者:IF<表達式>Then<語句塊1>Else<語句塊2>如果表達式的值為非零或True執(zhí)行語句塊1,否則執(zhí)行語句塊2。

表達式語句塊1語句塊2FT雙分支結(jié)構(gòu)流程示意圖

x≥0TrueFalse

例如:計算分段函數(shù)y=

本題在選擇條件時,可以選擇x<0作為條件,也可以選擇x≥0作為條件。這里選擇x≥0作為條件。畫出如圖4-12所示流程圖。y=圖4-12雙分支結(jié)構(gòu)流程實例y=3*x*x+4*x-51)用單分支結(jié)構(gòu)實現(xiàn)y=3*x*x+4*x-5Ifx≥0Theny=或Ifx<0Theny=3*x*x+4*x-5Ifx≥0Theny=但是,不能這樣表示:Ifx≥0Theny=(2)用雙分支結(jié)構(gòu)實現(xiàn)Ifx≥0Theny=Elsey=3*x*x+4*x-5EndIfy=3*x*x+4*x-53.多分支結(jié)構(gòu)(If…Then…ElseIf語句)多分支結(jié)構(gòu)可以處理兩個或兩個以上分支。其語句形式為:If<表達式1>Then<語句塊1>ElseIf<表達式2>Then<語句塊2>…[Else<語句塊n+1>]EndIfVisualBasic首先測試<表達式1>。如果它為False,VisualBasic就測試<表達式2>,依次類推,直到找到一個為True的條件。當它找到一個為True的條件時,VisualBasic就會執(zhí)行相應的語句塊,然后執(zhí)行EndIf后面的代碼。作為一個選擇,可以包含Else語句塊,如果條件都不是True,則VisualBasic執(zhí)行Else語句塊。3.IF……Then……ElseIF(多分支結(jié)構(gòu))語句形式:

IF<表達式1>Then

<語句塊1>

ElseIF<表達式2>Then

<語句塊2>

[Else

<語句塊n+1>]

EndIFTTTTTT表達式1表達式2表達式n語句塊1語句塊2語句塊n語句塊n+1FFF多分支結(jié)構(gòu)流程示意圖……<表達式1>語句塊1<表達式2>語句塊2……語句塊n語句塊n+1<表達式n>圖4-13多分支結(jié)構(gòu)流程FalseTrueTrueFalseTrueFalse語句塊n+1

語句塊n

例4-5:利用If...Then...Else語句編寫求函數(shù)y=的值的程序,要求只要在文本框Text1中輸入自變量x的值,就在標簽欄label1上顯示函數(shù)值。根據(jù)題意,在窗體上添加一個文本控件Text1和標簽控件label1,代碼應包含在Text1_change事件中。代碼為:PrivateSubText1_Change()DimxAsDouble,yAsDoubleLabel1.Caption=""'清空Label1的內(nèi)容

x=CDbl(Text1.Text)'將字符串類型轉(zhuǎn)化為雙精度類型

If(x<1#)Theny=1#-xElseIf(x>=1#Andx<=2#)Theny=(1#-x)*(2#-x)Elsey=-(2#-x)EndIfLabel1.Caption=y'在Label1上顯示結(jié)果EndSubx<1#x>=1#Andx<=2#TrueFalsey=(1#-x)*(2#-x)

y=-(2#-x)圖4-14多分支結(jié)構(gòu)流程實例TrueFalsey=1#-x例4-6:大學錄取新生時,根據(jù)學生總分情況給與獎勵,條件如下:(1)四門總分不低于700分,特等獎。(2)四門總分680分(含680分)~700分(不含700分),優(yōu)秀獎。(3)前三門單科不低于145分,第四門不低于280分),特別獎。(4)獎勵按特等獎、優(yōu)秀獎、特別獎由高到低,不重復計獎(包括單科)。要求:四科成績(intmark1、intmark2、intmark3、intmark4)依次在四個文本框中輸入,總分(intmark0)在標簽控件上顯示。單擊命令按鈕Command1后,在對話框中顯示獲獎情況。分析:獲獎條件表達式分別為:(1)intmark0>=700(2)intmark0>=680ANDintmark0<700(3)intmark1>=145ORintmark2>=145ORintmark3>=145ORintmark4>=280流程圖見圖4-18。設計步驟如下:(1)建立應用程序用戶界面按如圖4-19建立四個文本框(Text1~Text4)接受成績輸入,兩個標簽控件(Label1~Label2),一個命令按鈕Command1,設置各控件的屬性,其中Command1的Caption屬性值為“查詢”。intmark0>=700TrueFlase特等獎優(yōu)秀獎intmark1>148ORintmark2>148ORintmark3>148ORintmark4>148intmark0>=680ANDintmark0<700特別獎您沒有獲獎圖4-15多分支結(jié)構(gòu)流程實例TrueFlaseTrueFlase圖4-16應用程序運行情況(2)編寫程序代碼根據(jù)流程圖,編寫出Command_click事件的代碼為:PrivateSubCommand1_Click()Dimintmark0AsInteger,intmark1AsIntegerDimintmark2AsInteger,intmark3AsInteger,intmark4AsIntegerintmark1=CInt(Text1.Text)intmark2=CInt(Text2.Text)intmark3=CInt(Text3.Text)intmark4=CInt(Text4.Text)intmark0=intmark1+intmark2+intmark3+intmark4Label3.Caption=intmark0Ifintmark0>=700ThenMsgBox"您獲得了特等獎",vbOKOnly+vbInformation,"獲獎通知"ElseIfintmark0>=680ThenMsgBox"您獲得了優(yōu)秀獎",vbOKOnly+vbInformation,"獲獎通知"ElseIfintmark1>=145Orintmark2>=145Orintmark3>=145Orintmark4>=280ThenMsgBox"您獲得了特別獎",vbOKOnly+vbInformation,"獲獎通知"ElseMsgBox"很遺憾,您沒有獲獎",vbOKOnly+vbInformation,"獲獎通知"EndIfEndSubPrivateSubCommand1_Click()Dimx,yPicture1.Clsx=Val(Text1.Text)‘將文本轉(zhuǎn)換為數(shù)值型后賦值給變量x,yy=Val(Text2.Text)IFx<90Andy<60Then

Picture1.Print"血壓偏低"ElseIFx<=140Andy<=90Then

Picture1.Print"血壓正常"ElseIFx<160Andy<95Then

Picture1.Print"臨界高血壓"Else

Picture1.Print"高血壓"EndIFEndSubPrivateSubCommand2_Click()EndEndSub例按照世界衛(wèi)生組織(WHo)建議使用的血壓標準是:凡正常成人收縮壓應小于或等于140MmHg,舒張壓小于或等于90MmHg。如果成人收縮壓大于或等于160MmHg,舒張壓大于或等于95MmHg為高血壓;血壓值在上述兩者之間,亦即收縮壓在141—159MmHg之間,舒張壓在91-94MmHg之間,為臨界高血壓。低血壓通常指血壓低于90/60MmHg。運行界面與程序代碼如下:4.If語句的嵌套上面學習了If語句的基本形式,可以通過這些基本形式加以復合,獲得更為復雜的If結(jié)構(gòu),稱為If語句的嵌套。一般形式如圖4-17所示。圖4-18為在Else塊中嵌套If結(jié)構(gòu)的形式??筛鶕?jù)實際情況選擇采用何種結(jié)構(gòu)。圖4-17If語句復合結(jié)構(gòu)的一般形式圖4-18在Else塊中嵌套If結(jié)構(gòu)的形式圖4-19正確與錯誤的轉(zhuǎn)向例4-7:求a、b、c中三個實數(shù)的最大值、最小值,程序中不得使用循環(huán)結(jié)構(gòu)和轉(zhuǎn)向語句。a、b、c三值從三個文本框中輸入,當單擊命令按鈕時將結(jié)果顯示在窗體上。畫出流程圖。(1)設計流程圖根據(jù)題意,畫出如圖4-20所示流程圖。

a<bTrueFalseb<cTruea<c

Mininabc=aMininabc=cMaxinabc=ba<cMaxinabc=ab<c圖4-20求三個數(shù)極值的流程Maxinabc=cMininabc=aFalseTrueMaxinabc=aMaxinabc=cMininabc=bMininabc=cTrueFalseMininabc=bFalseTrueMaxinabc=c(2)設置界面與控件屬性在窗體上添加三個文本框,一個命令按鈕,設置各自的屬性(主要是Caption屬性和Font屬性)。FalseIF語句的嵌套語句形式:

IF<表達式1>Then

語句塊1

IF<表達式2>Then

語句塊2

EndIF

語句塊3

EndIF例

輸入3個整數(shù),按從小到大的順序輸出。程序運行界面如圖程序代碼如下:PrivateSubCommand1_Click()Dimx%,y%,z%,t%Form1.Clsx=Val(InputBox("請輸入1個整數(shù)"))y=Val(InputBox("請輸入1個整數(shù)"))z=Val(InputBox("請輸入1個整數(shù)"))Print"您輸入三個的數(shù)是:";x;Spc(1);y;Spc(1);zIFx>yThen‘如果x>y則x,y交換

t=x:x=y:y=tEndIFIFy>zThen

t=y:y=z:z=tIFx>yThen

t=x:x=y:y=tEndIFEndIFPrint"從小到大的順序是:";x;Spc(1);y;Spc(1);zEndSubPrivateSubCommand2_Click()EndEndSub例在文本框中輸入1-1000之間的數(shù)字,如果輸入非數(shù)值,或數(shù)值超出范圍,給予提示,并重新輸入。運行效果及程序代碼如下:PrivateSubForm_Load()Text1.Text=""Text2.Text=""EndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then'回車鍵的ASCII碼值為13IfIsNumeric(Text1.Text)Then'判斷是否是數(shù)值

x=Val(Text1.Text)Ifx<0Orx>1000ThenText1.Text=""Text1.SetFocus'焦點回到文本框

Text2.Text="數(shù)值超出范圍,再輸入!"'文本框中顯示提示信息

ElseText2.Text="輸入正確!"EndIfElseText1.SetFocusText2.Text="請輸入數(shù)字!"EndIfEndIfEndSub4.3.2SelectCaseSelectCase的結(jié)構(gòu)形式為:SelectCase<測試表達式>[Case<表達式列表1>[<語句塊1>]][Case<表達式列表3>[<語句塊2>]]…[Case<表達式列表n>[<語句塊n>]][CaseElse[<語句塊n+1>]]EndSelectSelectCase選擇結(jié)構(gòu)執(zhí)行的過程為:(1)計算<測試表達式>的值(2)將<測試表達式>的值與Case語句中的<表達式列表>中的每一個值逐一進行比較。如果與其中的一個值相匹配,則執(zhí)行該語句中的<語句塊>。如果不止一個Case與<測試表達式>相匹配,則只對第一個匹配的Case執(zhí)行與之相關(guān)聯(lián)的<語句塊>。如果在表達式列表中沒有一個值與測試表達式相匹配,則VisualBasic執(zhí)行CaseElse子句(此項是可選的)中的語句。最后執(zhí)行EndSelect語句。<測試表達式>圖4-22SelectCase選擇結(jié)構(gòu)流程V<表達式列表1><語句塊1>……<語句塊n+1><表達式列表n+1><表達式列表n><語句塊n>……4.3.2SelectCase語句SelectCase語句是多分支結(jié)構(gòu)的又一種表示形式,又稱情況語句。語句形式:

SelectCase變量或表達式

Case表達式列表1

<語句塊1>

Case表達式列表2

<語句塊2>

……

[CaseElse

<語句塊n+1>]

EndSelectF表達式列表1語句塊1表達式列表2語句塊2表達式列表n語句塊n…..語句塊n+1TTTSelect語句流程示意圖FF…..例4-8:表4-5為華中航空總公司機票打折表。試根據(jù)此表編寫程序。日期、機票數(shù)從文本框中輸入,打折情況在窗體上輸出。如圖4-23。

表4-5機票優(yōu)惠率月日訂票數(shù)(張)優(yōu)惠率(%)1、2、3、6、11、12全部>=3025<30104、928~30>=3035<3015其它>=3025<30105、101~8>=3035<3015其它>=3025<30107、8全部>=3030<3020(2)設計應用程序用戶界面添加6個標簽控件Label1~Label6,按順序見圖4-23所示。Label1~Label5的Caption屬性依次為:“請輸入日期”、“月”、“日”、“請輸入訂票數(shù)”、“張”,Label6的Caption屬性設計時為空白,運行時用來顯示優(yōu)惠率。添加3個文本框控件Text1~Text3,按順序見圖4-23所示。添加一個命令按鈕Command1。圖4-23機票優(yōu)惠率查詢系統(tǒng)(3)編寫代碼根據(jù)流程圖,編寫出Command1_Click事件的代碼如下:PrivateSubCommand1_Click()DimintnnAsLongDimintssAsInteger,strdateAsIntegerintnn=Clng(Text3.Text)strdate=Cint(Trim(Text1.Text)&Trim(Text2.Text))SelectCasestrdateCase428To431,51To57,928To931,101To107Ifintnn>=30Thenintss=35Elseintss=15Case71To79,710To731,81To89,810To831Ifintnn>=30Thenintss=30Elseintss=20CaseElseIfintnn>=30Thenintss=25Elseintss=10EndSelectLabel6.Caption="您所訂機票優(yōu)惠率為:"&str(intss)&"%"EndSub另外,可以取系統(tǒng)的日期作為輸入日期,該事件可以指定為Text1_DbClick事件,即雙擊Text1發(fā)生的事件,代碼為:PrivateSubText1_DblClick()Text1.Text=Month(Now)Text2.Text=Day(Now)EndSub當要重新輸入數(shù)據(jù)時,可以自動清空各文本框的內(nèi)容。其中單擊Text1清空所有文本框的內(nèi)容,單擊其他文本框,只清空被單擊的文本框的內(nèi)容。PrivateSubText1_Click()Text1.Text=""Text2.Text=""Text3.Text=""EndSubPrivateSubText2_Click()Text2.Text=""EndSubPrivateSubText3_Click()Text3.Text=""EndSub此外,還應為每一個文本框的鍵盤按下事件編寫如下代碼,表明當按回車鍵時,自動跳到下一個必要的控件:PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenText2.SetFocusEndSubPrivateSubText2_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenText3.SetFocusEndSubPrivateSubText3_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenCommand1.SetFocusEndSub7月~8月<3010

日期

>=30<30>=30<30>=3035153020104/28~5/7,9/28~10/7

>=30

7月~8月圖4-24機票優(yōu)惠率計算流程圖其他滿足條件>=30>=3025<30<30<301030203515PrivateSubCommand1_Click()DimcodeAsStringcode=Trim(Text2.Text)SelectCasecode

Case"+"

Text4.Text=Val(Text1)+Val(Text3)

Case"-"

Text4.Text=Val(Text1)-Val(Text3)

Case"*"

Text4.Text=Val(Text1)*Val(Text3

Case"/"

IFVal(Text3)=0Then

MsgBox("除數(shù)不能為0,請重新輸入")

Text3="“

Text4.Text=""

Text3.SetFocus

Else

Text4=Val(Text1)/Val(Text3

EndIFEndSelectEndSubPrivateSubCommand2_Click()EndEndSubPrivateSubCommand3_Click()Text1=""Text2=""Text3=""Text4=""Text1.SetFocusEndSub例4-7編寫一個簡便四則運算器,應用SelectCase判斷運算符。運行界面如圖【程序代碼】4.3.3條件函數(shù)1.IIf函數(shù)2.Choose函數(shù)IIf函數(shù)的功能是根據(jù)表達式的值,來返回兩部分中的其中一個。其語法格式為:IIf(<測試表達式>,<真值部分>,<假值部分>)例如,求分段函數(shù):y=函數(shù)值的語句可以簡單地表示為:y=Iif(x<0,2*x+3,4-3*x)Choose函數(shù)的功能是:從參數(shù)列表中選擇并返回一個值。其語法格式為:Choose(<整數(shù)表達式>,<選項1>[,

<選項2>,...[,<選項n>]])下面的示例使用Choose函數(shù)來顯示某天的執(zhí)勤人員情況,strDay參數(shù)傳遞到過程之中的索引。FunctionGetChoice(strDayAsstring)strName=Choose(strDay,"王大虎","謝偉烽","馬家棟","何右嘉","吳仁杰",)EndFunction當strDay的值為1時,返回字符串“王大虎”,當strDay的值為2時,返回字符串“謝偉烽”,以此類推。當strDay的值不在1~5之間時,返回NULL。4.3.3條件函數(shù)

VB中提供的條件函數(shù):IIF()函數(shù)和Choose()函數(shù),適用于簡單的判斷場合。前者代替IF語句,后者可代替SelectCase語句,IIF()函數(shù)函數(shù)形式:

IFF(表達式,條件為True時的值,條件為False時的值)例如:求x,y中大的數(shù),放入變量T中,可以應用語句T=IFF(x>y,x,y)Choose()函數(shù)函數(shù)形式:

Choose(整型表達式,選項列表)其中整型表達式的值決定函數(shù)返回選項列表中的哪個值。如果整型表達式為1,則函數(shù)返回選項列表中的第一項的值,若整型表達式為2,則函數(shù)返回選項列表中的第2項的值,…依次類推。如果整型表達式的值小于1或大于列出的選項數(shù)目時,函數(shù)返回Null。如果整型表達式的值為非整型時,系統(tǒng)自動取其整數(shù)進行判斷。例如,根據(jù)x是1~4的值,轉(zhuǎn)換成“內(nèi)科”、“外科”、“婦科”、“兒科”的語句可以寫成:kb=Choose(x,“內(nèi)科”,“外科”,“婦科”,“兒科”)4.4.2While循環(huán)4.4.1For循環(huán)返回退出4.4.3Do…LOOP循環(huán)控制結(jié)構(gòu)4.4.4多重循環(huán)4.4循環(huán)結(jié)構(gòu)4.4.2Do...Loop語句1.前測型Do...Loop循環(huán)在前測型Do...Loop循環(huán)中,只要<循環(huán)條件>為True就執(zhí)行<循環(huán)體>。其語法格式為:Do[{While|Until}<循環(huán)條件>]<循環(huán)體>Loop例4-9:編寫程序,根據(jù)多項式:π=求π的近似值。精度要求<10-12。根據(jù)題意和要求可先求出(1)設計流程圖根據(jù)題目要求,設計出如圖4-25所示的流程圖。的和。輸出循環(huán)次數(shù)isum=0#;temp=1#;i=1當temp>=1.0E-12sum=sum+tempi=i+1temp=1#/i/i輸出π的近似值圖4-25求π的近似值流程圖(2)設計應用程序界面應用程序所需的控件及其屬性值見表4-6。Picture1和Picture2分別用來顯示運算次數(shù)i的值和π的近似值。控件Caption屬性值Label1運算次數(shù)Label2近似值Picture1空白(設計時)Picture2空白(設計時)Command1求π的近似值表4-6求π的近似值應用程序控件屬性值(3)編寫代碼根據(jù)流程圖編寫Command1_click事件的代碼如下:PrivateSubCommand1_Click()DimsumAsDouble,tempAsDouble,piAsDoubleDimiAsDoublesum=0#temp=1#i=1圖4-26求π的近似值的程序運行結(jié)果DoWhile(temp>=0.000000000001)sum=sum+tempi=i+1temp=1#/i/iLooppi=Sqr(6#*sum)Picture1.Printi;"次"Picture2.PrintpiEndSub由于程序代碼是直接從設計界面拷貝過來,所有代碼書寫格式已經(jīng)經(jīng)過VB格式化。程序運行情況參見圖4-26。輸入數(shù)據(jù)nVal(Text1.Text)>2147483647TrueFalse數(shù)據(jù)溢出,重新輸入n當k<=m=1k=k+1nModk=0TrueFalses=0TrueFalse例4-10:編寫程序::判斷一個數(shù)是否為素數(shù)。(1)設計流程圖根據(jù)題目要求,設計出如圖4-27所示的流程圖。當k<=圖4-27求素數(shù)流程圖n不是素數(shù)n是素數(shù)Andm=0(2)設計應用程序界面應用程序所需的控件及其屬性值見表4-7。控件Caption屬性值Label1自然數(shù)Label2空白(設計時)Text11空白(設計時)Command1輸入自然數(shù)后單擊此按鈕表4-7判斷素數(shù)應用程序控件屬性值(3)編寫代碼根據(jù)流程圖,編寫Command1_click事件代碼如下:PrivateSubCommand1_Click()Dimmasinteger,kasintegerDimnAsLongIfVal(Text1.Text)>2147483647ThenMsgBox"數(shù)據(jù)溢出,請重新輸入",vbOKOnly+vbOKCancel+vbInformation,"數(shù)據(jù)錯誤"Text1.Text=""Else圖4-28判斷素數(shù)程序運行實例

n=CLng(Text1.Text)m=0:k=2DoWhilek<=Sqr(n)Andm=0IfnModk=0Thenm=1Elsek=k+1EndIfLoopIfm=0ThenLabel2.Caption="是一個素數(shù)"ElseLabel2.Caption="不是一個素數(shù)"EndIfEndIfText1.SetFocus

EndSub2.后測型Do...Loop循環(huán)Do...Loop語句的另一種演變形式是先執(zhí)行<循環(huán)體>,然后在每次執(zhí)行后測試<循環(huán)條件>。稱為后測型Do...Loop循環(huán)。這種形式保證<循環(huán)體>至少執(zhí)行1次,其語法格式為:Do

<循環(huán)體>Loop[{While|Until}<循環(huán)條件>]輸入m,nm存放大數(shù),n存放小數(shù)輸出n求m/n的余數(shù)m←n數(shù)n←r的余數(shù)例4-11:求兩個正整數(shù)m和n的最大公約數(shù)。求最大公約數(shù)最常用的方法是輾轉(zhuǎn)相除法。其設計思路是:(1)假設m大于n;(2)用n作除數(shù)除m,得余數(shù)r。(3)若r≠0,則令m←n,n←r,繼續(xù)相除得到新的r值,直到r=0為止。(4)最后的n即為最大公約數(shù)。解題步驟如下:(1)設計流程圖根據(jù)題意,設計出如圖4-29所示流程圖。圖4-29求最大公約數(shù)的流程圖直到r=0(2)設計應用程序界面所需添加的控件的屬性值參見表4-8。控件Caption(或Text)屬性值Label1請輸入兩個正整數(shù)Label2mnLabel3m和

n的最大公約數(shù)是Label4空白(設計時)Text11空白(設計時)Text12空白(設計時)Command1求

解表4-8判斷素數(shù)應用程序控件屬性值(3)編寫代碼PrivateSubCommand1_Click()DimmAsLong,nAsLong,tempAsLongIf(Val(Text1.Text)=0OrVal(Text2.Text)=0)OrVal(Text1.Text)>2147483647OrVal(Text2.Text)>2147483647ThenMsgBox"輸入的數(shù)0或溢出,請重新輸入!"MsgBox"輸入的數(shù)0或溢出,請重新輸入!",vbInformation+vbOKOnly,"數(shù)據(jù)錯誤"Text1.Text=""Text2.Text=""圖4-30求最大公約數(shù)程序運行實例

Text1.SetFocusElsem=Val(Text1.Text)n=Val(Text2.Text)Ifm<nThentemp=m:m=n:n=tempEndIfDor=mModnm=nn=rLoopWhiler<>0Label3.Caption=mEndIfEndSub4.4.1For...Next語句Do循環(huán)使用于在不知道執(zhí)行多少次<循環(huán)體>時。有時,循環(huán)的次數(shù)是已知的,這時最好使用For...Next循環(huán)。與Do循環(huán)不同,F(xiàn)or循環(huán)使用一個叫做計數(shù)器的變量,每重復一次循環(huán)之后,計數(shù)器變量的值就會增加或者減少。For循環(huán)的語法如下:For<循環(huán)變量>=<初值>To<終值>[Step<步長>]<循環(huán)體>Next[<循環(huán)變量>]4.4.1循環(huán)結(jié)構(gòu)4.4.1For循環(huán)語句For循環(huán)語句是計數(shù)型循環(huán)語句,用于控制循環(huán)次數(shù)預知的循環(huán)結(jié)構(gòu)。語句形式:For循環(huán)變量=初值To終值[Step步長]

Next循環(huán)變量說明:循環(huán)變量必須是數(shù)值型步長:一般為正數(shù),初值小于終值;若為負數(shù),初值大于終值;

Step缺省時默認為1。語句塊:重復執(zhí)行的部分,構(gòu)成循環(huán)體,可以是一句或多句。ExitFor:退出循環(huán),執(zhí)行Next后的下一條語句。循環(huán)次數(shù):n=Int(

+1)<語句塊>

[ExitFor]<語句塊>循環(huán)體終值-初值

步長TF循環(huán)變量=初值循環(huán)變量≤終值語句塊有ExitFor語句塊循環(huán)變量=循環(huán)變量+步長FT步長>0時For循環(huán)語句流程示意圖例4-12:求1~1000之間所有能夠被13整除的數(shù)。按每行各行10個數(shù)排滿足條件的數(shù)。(1)設計流程圖根據(jù)題意,設計如圖4-34所示流程圖。圖4-31求被1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論