第04章 Visual Basic 程序控制結(jié)構(gòu)_第1頁
第04章 Visual Basic 程序控制結(jié)構(gòu)_第2頁
第04章 Visual Basic 程序控制結(jié)構(gòu)_第3頁
第04章 Visual Basic 程序控制結(jié)構(gòu)_第4頁
第04章 Visual Basic 程序控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩110頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章VisualBasic程序控制結(jié)構(gòu)VB程序控制結(jié)構(gòu)有三種1、順序結(jié)構(gòu)2、選擇結(jié)構(gòu)3、循環(huán)結(jié)構(gòu)4.1順序結(jié)構(gòu)程序設(shè)計學(xué)習(xí)要點算法及程序設(shè)計基礎(chǔ);數(shù)據(jù)的輸入輸出;分支結(jié)構(gòu)語句;循環(huán)結(jié)構(gòu)語句;程序示例。4.1.1算法算法的概念

簡單的說:把復(fù)雜的運算處理分解成計算機能處理的簡單的操作組合。程序的基本組成分析三步:輸出、輸入、處理例:求一個三角形的面積程序員設(shè)計程序輸出:面積值輸入:三條邊長或兩邊夾一角處理:計算上機解題過程:inputprocessingoutput計算機用戶顯示器程序的基本組成程序設(shè)計的一般步驟:1分析:問題定義2設(shè)計:設(shè)計解題步驟-算法3選擇與創(chuàng)建界面4編碼:用程序設(shè)計語言描述-寫程序5測試與調(diào)度:改錯6完成文檔:整理和組織描述程序的所有資料算法的描述1、自然語言2、流程圖3、偽代碼4、程序設(shè)計語言流程圖使用的圖形符號圖形符號名稱代表的操作輸入/輸出數(shù)據(jù)的輸入輸出處理各種形式的數(shù)據(jù)處理判斷判斷選擇,根據(jù)條件滿足與否選擇不同的路徑起止流程的起點與終點流程線連接各個框圖,表示執(zhí)行順序連接點表示與流程圖其他部分相連接基本算法結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)ABABAETrueFalseBEETrueFalseTrueFalse(A)(B)(C)(D)程序結(jié)構(gòu)概述結(jié)構(gòu)化程序由三種基本控制結(jié)構(gòu)組成,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。順序結(jié)構(gòu)是一種簡單的程序結(jié)構(gòu),即按程序段中語句出現(xiàn)的先后順序依次執(zhí)行的結(jié)構(gòu)。ABN…先執(zhí)行A操作,其次執(zhí)行B操作,……,最后執(zhí)行N操作,它們都是順序執(zhí)行的關(guān)系。4.1.2順序結(jié)構(gòu)中的常用語句一、利用賦值語句輸入數(shù)據(jù)

VB編程語言中用“=”作為賦值運算符,簡稱賦值號。賦值語句的語句格式為:

[Let]變量名=常量|變量|表達式|對象的屬性說明:在上述格式中,賦值語句的功能是將賦值號右邊的表達式的值賦給賦值號左邊的變量;其中賦值號左邊的變量可以是用戶自定義的變量,也可以是對象的屬性;賦值號右邊的表達式可以是常量、表達式、文本框等控件中獲取的值,也可以是由InputBox函數(shù)提供的值。數(shù)據(jù)的輸入所謂輸入是指在執(zhí)行程序時需要從外界獲取的必要信息。輸入可以有多個,也可以沒有。

VB中可以有多種基本輸入方式,包括賦值語句、文本框的輸入和InputBox函數(shù)等。

利用賦值語句輸入數(shù)據(jù)任務(wù)1.求半徑為3的圓周長

PrivateSubCommand1_Click()Constp=3.1415DimrAsSingle,LAsSingler=3L=2*p*rText1.Text=LEndSub利用賦值語句輸入數(shù)據(jù)注意:賦值號兩邊的數(shù)據(jù)類型必須保持一致性或兼容;賦值語句先計算右邊表達式的值,再將結(jié)果賦給左邊的變量;賦值號與數(shù)學(xué)中“等號“在概念上有所區(qū)別。數(shù)學(xué)中等號為判斷左右兩值是否相等。例如:

LetX=X+1’變量X加上1以后賦給左邊的變量X使用文本框輸入數(shù)據(jù)任務(wù)2.單擊按鈕時,將Text1內(nèi)的內(nèi)容復(fù)制到Text2中。

PrivateSubCommand1_Click()Text2.Text=Text1.TextEndSub運行效果使用文本框輸入數(shù)據(jù)文本框控件具備Text的屬性,程序可以通過獲取文本框Text屬性值來得到相關(guān)的信息,也可以將信息以文本框Text屬性向外顯示。故在很多程序中利用文本框完成信息的輸入與輸出。注釋語句

為了提高程序的可讀性,在程序的必要位置加上注釋是有用的。注釋語句就起此作用,以方便自己或他人理解語句的含義。注意注釋語句是非執(zhí)行語句。注釋語句有兩種定義格式:

Rem

注釋內(nèi)容

’注釋內(nèi)容功能:用來對程序中的語句進行注釋說明。注釋語句說明:注釋語句可單獨占一行,也可以放在語句的后面;若在語句行后面使用Rem關(guān)鍵字,則必須使用冒號“:”與語句隔開;若在語句行后面使用“’”,則不必使用冒號;單引號應(yīng)是半角英文的直撇號。注釋語句例如:PrivateSubCommand1_Click()Text2.Text=Text1.Text

Rem將文本框1里面的內(nèi)容賦給文本框2EndSub’將文本框1里面的內(nèi)容賦給文本框24.1.3順序結(jié)構(gòu)中的數(shù)據(jù)輸出

程序設(shè)計的最終目的是給用戶一個答案,將計算的結(jié)果應(yīng)顯示在用戶界面上以供用戶觀看。因此對于一個完整的程序,數(shù)據(jù)的輸出是不可缺少的。在VB程序設(shè)計中,數(shù)據(jù)的輸出可以有多種方式:Print方法輸出、MsgBox函數(shù)等。Print方法

Print方法是很多VB對象所具備的方法,包括窗體、圖片框或打印機等。使用Print方法可以在上述對象上顯示字符串和表達式的值。語法格式如下:

[對象名.]print[{常量|變量|表達式[{,|;}]]……

說明:對象名可以是Form、PictureBox或Printer。如果省略對象名,則在窗體上輸出。表達式可以是數(shù)值表達式或字符串表達式。當輸出多個表達式時,表達式之間可以用“,”、“;”或“”隔開。Print方法若要使后面執(zhí)行Print時還在本行輸出,可以在末尾加“;”或“,”。單獨一個“Print”效果即為換行。【例4.1】在當前窗體上顯示數(shù)據(jù)如下圖所示

使用不同分隔符顯示數(shù)據(jù)其窗體的單擊事件過程如下:PrivateSubForm_Click()x=7:y=8:z=9Print"x=";x,"y=";y,"z=";zPrintPrintx;y;z;"VisualBasic6.0"EndSubPrint方法(1)Tab函數(shù)語法格式:Tab(n)功能:可選的n參數(shù)是在顯示或打印列表中的下一個表達式之前移動的列數(shù)。若省略此參數(shù),則Tab將插入點移動到下一個打印區(qū)的起點。當Print方法與Tab函數(shù)一起使用時,打印的外觀將會被分割為均勻、定寬的列。各列的寬度等于選用字體內(nèi)以磅數(shù)為單位的所有字符的平均寬度。Print方法(2)Spc函數(shù)或Space[$]函數(shù)

語法格式:Spc(n)或Space(n)

功能:跳過n個空格后再輸出下一個輸出項。【例4.2】設(shè)有某班級的部分學(xué)生名單如下:姓名年齡籍貫班級張一19北京機械-1王二20北京機械-2程序運行后,單擊窗體內(nèi)任一位置,將顯示如圖所示的運行結(jié)果編程序顯示上面表格中的數(shù)據(jù)。程序如下:PrivateSubForm_Click()FontName="楷體_GB2312"'顯示輸出何種字體FontSize=22'顯示輸出字體大小Print"姓名";Tab(8);"年齡";Tab(16);"籍貫";PrintTab(24);"班級"PrintPrint"張一";Tab(8);19;Tab(16);"北京";Tab(24);"機械-1"Print"王二";Tab(8);20;Tab(16);"北京";Tab(24);"機械-2"EndSub4.1.4InputBox函數(shù)任務(wù)3.單擊按鈕時,彈出對話框,并將用戶輸入的信息顯示在文本框里。

PrivateSubCommand1_Click()DimiAsString’定義字符串變量ii=InputBox("請輸入任意字符串","輸入")Text1.Text=i’通過文本框顯示i的值

EndSubInputBox函數(shù)InputBox函數(shù)的作用:生成一對話框來顯示提示,等待用戶在文本框里輸入內(nèi)容或按下按鈕,并輸入文本框中內(nèi)容。函數(shù)的返回值的類型為

String類型。InputBox函數(shù)的語法格式:X=InputBox(提示信息,[標題[,缺省值][,X坐標,Y坐標][,幫助文件,上下文]])標題提示信息缺省值InputBox函數(shù)參數(shù)用法提示信息提示信息參數(shù)是必須的。若包含多行,可在各行之間用chr(13)(回車符)、chr(10)(換行符)或chr(13)&chr(10)來分隔標題對話框的標題,是可選的缺省值文本框里的缺省值,是可選的X坐標,Y坐標X坐標,y坐標決定輸入框的位置InputBox函數(shù)參數(shù)用法幫助文件幫助文件是可選項,識別幫助文件,用該文件為對話框提供上下文相關(guān)的幫助。如果已提供幫助文件,則必須提供上下文。上下文上下文為可選項,數(shù)值表達式,由幫助文件的作者指定給某個幫助主題的幫助上下文編號。返回值返回值x將是用戶在文本框里輸入的數(shù)據(jù),x是一個字符串類型的值。如果用戶按了Cancel鈕,則x將為空字符串。InputBox函數(shù)例如:

X=InputBox

(“請輸入任意字符串”,“輸入”)生成的對話框為:標題提示信息4.1.5MsgBox函數(shù)

MsgBox稱為消息對話框,用于創(chuàng)建一個消息框,等待用戶選擇一個按鈕,并通過返回值將用戶的選擇作為程序繼續(xù)執(zhí)行的依據(jù)。信息框中通常顯示一些提示信息、出錯信息或者警告信息等。MsgBox函數(shù)MsgBox函數(shù)的語法格式如下:

[Action=]MsgBox(提示信息,顯示類型,標題)說明:(1)提示信息顯示在提示框內(nèi);(2)顯示類型為對話框所顯示的效果;(3)Action獲取用戶所選擇按鈕對應(yīng)的返回值。MsgBox函數(shù)數(shù)值符號常量意義0vbokonly只顯示ok按鈕1vbokcancel顯示ok、cancel按鈕2vbAbortRetryIgnore顯示Abort、Retry、Ignore按鈕3vbyesnocancel顯示yes、no、cancel按鈕4vbYesNo顯示Yes、No按鈕5vbRetryCancel顯示Retry、Cancel按鈕MsgBox函數(shù)數(shù)值符號常量意義16vbCriticalStopSign對極其重要的問題提醒用戶

32vbQuestionQuestionMark增亮顯示沒有危險的問題48vbExclamationExclamationmark強調(diào)警告用戶必須知道的事情64vbInformationInformationmark可以使乏味的信息變的有趣數(shù)值符號常量意義0vbDefaultButton1第一個按鈕缺省256vbDefaultbutton2第二個按鈕缺省512vbDefaultbutton3第三個按鈕缺省MsgBox函數(shù)注意:

(1)設(shè)置MsgBox函數(shù)中的type函數(shù)類型時,既可以將所需的符號常量類型用“+”連接起來,又可以直接將符號常量對應(yīng)的數(shù)值加起來作為設(shè)置。MsgBox函數(shù)MsgBox"歡迎光臨!",vbOKOnly+vbInformation,"歡迎"

MsgBox"歡迎光臨!",64,"歡迎"

064MsgBox函數(shù)MsgBox“網(wǎng)絡(luò)連接出現(xiàn)問題,是否重試?",274,"警告"

2+16+256

vbAbortRetryIgnore+vbCritical+vbDefaultbutton2MsgBox函數(shù)(2)若返回值不需要做進一步的判斷則可以省略“Action=”,同時使用MsgBox函數(shù)的時候不用圓括號。例如:

x=MsgBox("是否退出?",vbOKCancel,"提示")

在彈出的對話框中若選擇“確定”按鈕,則x=1,否則x等于2。MsgBox函數(shù)MsgBox函數(shù)返回值符號常量用戶選擇的按鈕1VbOk“確定”按鈕2VbCancel“取消”按鈕3VbAbort“終止”按鈕4VbRetry“重試”按鈕5VbIgnore“忽略”按鈕6VbYes“是”按鈕8VbNo“否”按鈕4.2選擇結(jié)構(gòu)程序設(shè)計學(xué)習(xí)要點If語句的分類If…Then結(jié)構(gòu)If…Then…Else結(jié)構(gòu)多分支If結(jié)構(gòu):If…Then…ElseIf和If嵌套語句SelectCase結(jié)構(gòu)

任務(wù)1輸入兩個數(shù),輸出較大的數(shù)。分析:本題由用戶輸入兩個數(shù),經(jīng)計算機判斷后將較大數(shù)輸出,即有兩個輸入量和一個輸出量。所以需要兩個文本框接受用戶輸入,可以采用標簽框來實現(xiàn)數(shù)據(jù)的輸出。界面設(shè)計:4.2.1if語句和iif函數(shù)

If語句If語句可以分為如下幾類:

If語句If…Then結(jié)構(gòu)IIf函數(shù)多分支If結(jié)構(gòu)If…Then…ElseIf結(jié)構(gòu)If嵌套If…Then…Else結(jié)構(gòu)If語句If…Then結(jié)構(gòu)語法格式:功能:如果表達式的值為真(True),執(zhí)行Then后的語句塊內(nèi)容;否則不執(zhí)行語句塊內(nèi)容。

說明:表達式可以是:關(guān)系表達式、邏輯表達式、算術(shù)表達式。若為算術(shù)表達式,值為0則為假,非0則為真。如果是單行If格式,所有的代碼必須寫在同一行中,絕對不能換行。如果是塊If語句,各語句塊必須獨占一行,EndIf不能省略。語句塊若是一條語句,可用單行If結(jié)構(gòu);為多條語句,則采用塊If結(jié)構(gòu)較好。當然也可以采用單行If格式,這時各語句必須在同一行中且用":"分隔,且不能出現(xiàn)EndIf。If表達式Then語句塊EndIfIf表達式Then語句塊If語句任務(wù)1輸入兩個數(shù),輸出較大的數(shù)。屬性設(shè)置:對象屬性屬性值LabelNameLabel1Caption請輸入數(shù)1:LabelNameLabel2Caption請輸入數(shù)2:LabelNameLabel3Caption空白BackColor粉紅色TextBoxNameText1Text空白TextBoxNameText2Text空白CommandButtonNameCommand1Caption較大值CommandButtonNameCommand2Caption退出If語句任務(wù)1輸入兩個數(shù),輸出較大的數(shù)。編寫代碼:PrivateSubCommand1_Click()

DimmaxAsSingleDimminAsSinglemax=Val(Text1.Text)min=Val(Text2.Text)Ifmax<minThenmax=minEndIfLabel3.Caption="較大值為"&maxEndSubFTmax=minmax<min?開始dimmaxassingledimminassinglemax=val(text1.text)min=val(text2.text)結(jié)束Label3.Caption="較大值為"&max注意:塊if語句中的endif能否省略?

DimmaxAsSingleDimminAsSinglemax=Val(Text1.Text)min=Val(Text2.Text)Ifmax<minThenmax=minLabel3.Caption="較大值為"&max注意:塊if語句中的endif能否省略?將塊if語句改為單行if語句怎么改?

Ifmax<minThenmax=minIf語句任務(wù)2編寫一個程序,實現(xiàn)當用戶輸入的用戶名和口令都正確時顯示"歡迎登錄"的消息對話框,當用戶名或口令有錯誤時顯示消息對話框報告錯誤。If語句If語句If…Then…Else結(jié)構(gòu)

語法格式:功能:該結(jié)構(gòu)用于解決"二選一"的問題。當表達式的值為真,執(zhí)行語句塊1的語句內(nèi)容;否則執(zhí)行語句塊2的語句內(nèi)容。說明:表達式最終的值必須為邏輯值,即取值為真或假。若語句塊1和語句塊2都是單條語句,可采用單行If格式,否則采用塊If語句。跟If…Then不同,該結(jié)構(gòu)中即使表達式值為假,也有語句塊2的內(nèi)容可被執(zhí)行。If表達式Then

語句塊1Else

語句塊2EndIfIf表達式Then語句塊1Else語句塊2If語句If語句任務(wù)2編寫一個程序,實現(xiàn)當用戶輸入的用戶名和口令都正確時顯示"歡迎登錄"的消息對話框,當用戶名或口令有錯誤時顯示消息對話框報告錯誤。編寫代碼:PrivateSubCommand1_Click()DimuserAsStringDimpswAsStringuser=Text1.Text

psw=Text2.TextEndSubTF用戶名和口令正確嗎?顯示"歡迎"消息框顯示"錯誤"消息框

If

user="SYL"Andpsw="123456"ThenMsgBox("歡迎您登錄本系統(tǒng)!")ElseMsgBox("您的用戶名或口令有誤,請重新輸入!")EndIfIf語句IIf函數(shù)語法格式:功能:當條件為真(True),該函數(shù)返回表達式1的值,否則返回表達式2的值。其中,函數(shù)的三個參數(shù)都是必須的,不可省略。說明:在使用IIf函數(shù)時,必須將其返回值賦值給一個變量,不可以單獨調(diào)用。如上面的代碼不可以寫成:IIf(x=1,“Yes”,“No”),需為:a=IIf(x=1,“Yes”,“No”),或作為其他函數(shù)的參數(shù)。在使用IIf函數(shù)時,第2和第3個參數(shù)必須只能為一條語句,而且必須是有返回值的,這是IIf函數(shù)跟If…Then…Else結(jié)構(gòu)的不同之處。IIf(條件,表達式1,表達式2)

Ifuser="SYL"Andpsw="123456"Then

MsgBox("正確!")Else

MsgBox("錯誤!")EndIfMsgBoxIIf(user="SYL"Andpsw="123456","正確!","錯誤!")IIf(user="SYL"Andpsw="123456",MsgBox("正確!"),MsgBox("錯誤!"))這樣寫對嗎?If語句任務(wù)3編寫一個程序,根據(jù)用戶輸入的某個學(xué)生的成績評出優(yōu)、良好、中等、及格和不及個五個等級。分析:

本題要解決的問題是根據(jù)輸入學(xué)生的成績來判斷該學(xué)生的成績等級。有一個輸入量(學(xué)生的成績)和一個輸出量(判斷結(jié)果),所以用一個文本框來接受用戶輸入,一個文本框來進行輸出。再添加一個"判斷"按鈕,和一個"退出"按鈕。界面設(shè)計:If語句If語句If語句多分支If結(jié)構(gòu)

語法格式:執(zhí)行過程:如表達式1為真則執(zhí)行語句塊1;否則測試表達式2的值,為真則執(zhí)行語句塊2;依次類推至找到一個值為真的表達式則執(zhí)行相應(yīng)的語句塊;若都不為真時,執(zhí)行Else后語句塊內(nèi)容。說明:表達式最終的值必須為邏輯型,即取值是真或者是假;如果要產(chǎn)生n個分支,則需要n-1個測試表達式;此結(jié)構(gòu)不能轉(zhuǎn)換成單行If格式。If表達式1Then語句塊1ElseIf表達式2Then語句塊2[ElseIf表達式3Then語句塊3]……[Else

語句塊n]EndIf任務(wù)3編寫一個程序,根據(jù)用戶輸入的某個學(xué)生的成績評出優(yōu)、良好、中等、及格和不及個五個等級。判斷標準如下:等級不及格

score<60及格60≤score<70中等70≤score<80良好80≤score<90優(yōu)score≥90If語句編寫代碼:PrivateSubCommand1_Click()DimscoreAsSingleDimsAsStringscore=Val(Text1.Text)EndSubT

Ifscore<60Thens="不及格"

ElseIfscore<70Thens="及格"

ElseIfscore<80Thens="中等"

ElseIfscore<90Thens="良好"Elses="優(yōu)"EndIfText2.Text=sIf語句任務(wù)4學(xué)校對學(xué)習(xí)成績優(yōu)良的同學(xué)給予獎勵,只要滿足以下條件之一就可以獲得獎勵:所考語文、數(shù)學(xué)和英語總分在285以上;每門課的成績都在90分以上;語文和數(shù)學(xué)的成績?yōu)?00分,英語在80分以上。界面設(shè)計:If語句任務(wù)4學(xué)校對學(xué)習(xí)成績優(yōu)良的同學(xué)給予獎勵。編寫代碼:PrivateSubCommand1_Click()DimaAsSingle,bAsSingle,cAsSinglea=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text)Ifa+b+c>=285ThenLabel4.Caption="可以獲獎!"

ElseIfa>=90Andb>=90Andc>=90ThenLabel4.Caption="可以獲獎!"

ElseIfa=100Andb=100Andc>=80ThenLabel4.Caption="可以獲獎!"ElseLabel4.Caption="不可獲獎!"EndIfEndSubT能改成下面的代碼嗎?

Ifa+b+c>=285ora>=90Andb>=90Andc>=90or_a=100Andb=100Andc>=80ThenLabel4.Caption="不可獲獎!"EndIfIf語句任務(wù)5編寫一個程序,讓用戶輸入三個數(shù)判并斷該三個數(shù)能否組成一個直角三角形。分析:

本題根據(jù)用戶輸入的三個數(shù),判斷它們能否組成一個直角三角形。程序中有三個輸入量(即輸入的三個數(shù))和一個輸出量(即能否組成一個直角三角形)。故可以用三個文本框來接受用戶輸入的三個數(shù),一個標簽框來顯示判斷結(jié)果。

界面設(shè)計:If語句If語句If語句If嵌套:所謂If嵌套,是指在If的Then或者Else語句塊中還可以嵌套If結(jié)構(gòu),以達到多分支的目的。

語法格式:If表達式1Then

語句塊1

If表達式2Then

語句塊2

Else

語句塊3

EndIfElse

語句塊4

if表達式3Then

語句塊5

Else

語句塊6

EndIfEndIf任務(wù)5編寫一個程序,讓用戶輸入三個數(shù)判并斷該三個數(shù)能否組成一個直角三角形。編寫代碼:PrivateSubCommand1_Click()Dima,b,cAsSinglea=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text)EndSubTT三角形?FT直角三角形?F輸出判斷結(jié)果輸出判斷結(jié)果輸出判斷結(jié)果a+b>cAnda+c>bAndb+c>a

Label4.Caption=""a^2=b^2+c^2Orb^2=a^2+c^2Orc^2=a^2+b^2Label4.Caption=""Label4.Caption=""

Ifa+b>cAnda+c>bAndb+c>aThenIfa^2=b^2+c^2Orb^2=a^2+c^2Orc^2=a^2+b^2ThenLabel4.Caption="可以構(gòu)造一個直角三角形"ElseLabel4.Caption="可以構(gòu)造一個非直角三角形"EndIfElseLabel4.Caption="不可以構(gòu)造一個三角形"EndIfIf語句4.2.2Selectcase語句1.格式:SelectCase表達式Case表達式列表1

語句塊1Case表達式列表2

語句塊2……Case表達式列表n

語句塊nCaseElse

語句塊EndSelect2.功能:如果表達式的值與某個表達式列表的值相匹配,則執(zhí)行該表達式列表后的相應(yīng)語句塊。4.2.2Selectcase語句說明:(1)表達式:可以是一個數(shù)值表達式或字符串表達式,通常使用一個數(shù)值類型或字符串類型的變量。(2)Case表達式列表:是Case子句,如果表達式與某個Case子句的表達式列表相匹配,則執(zhí)行該Case子句中的語句塊。Case子句中的“表達式列表”可以有三種表示形式:①一個或多個常量,多個常量之間用“,”分開;②使用To關(guān)鍵字,用以指定一個數(shù)值范圍,要求小的數(shù)在To之前,如1To10;③Is關(guān)鍵字與比較運算符配合使用,用以指定一個數(shù)值范圍,如Is>10;在每個Case子句的“表達式列表”中,以上三種形式可以任意組合使用

4.2.2Selectcase語句如:Case 3,5Case7 To 9CaseIs<6(3)Case Else:當表達式的值與前面所有的Case子句的值列表都不匹配時的情況下執(zhí)行語句塊n。(4)EndSelect:為多分支結(jié)構(gòu)語句的結(jié)束標志。(5)多分支結(jié)構(gòu)語句要求必須以SelectCase開頭,中間可有任意個Case子句,CaseElse子句只能有一個或者沒有,最后必須以EndSelect結(jié)束。【例4.8】輸入某學(xué)生成績(百分制),若是100≥成績≥90輸出優(yōu)秀;若是90>成績≥80輸出良好;若是80>成績≥70輸出中等;若是70>成績≥60輸出及格;若是60>成績≥0,輸出不及格;若是其它數(shù)則輸出error信息。分析:這是一個分段比較的程序,由于是多段成績,可以使用多分支語句,如果使用IF語句嵌套,結(jié)構(gòu)較為復(fù)雜;因此用SelectCase語句為好。首先定義一個Single類型的變量x,從應(yīng)用程序窗體界面的文本框Text1輸入數(shù)字,利用Val(Text1.text)函數(shù)獲得該數(shù)值后,賦值給變量x,然后用塊SelectCase語句對x進行判斷,利用窗體界面文本框Text2顯示相應(yīng)的信息。VisualBasic應(yīng)用程序設(shè)計步驟如下:4.2.2Selectcase語句(1)建立應(yīng)用程序用戶界面:Form1窗體界面由四個控件組成,分別是一個標簽(Label1)、兩個文本框(Text1、Text2)和一個命令按鈕(Command1)。(2)設(shè)置界面中各對象的屬性如表。

例4.8對象屬性設(shè)置對象名稱屬性名稱屬性值Form1Caption“學(xué)生成績級別”Label1Caption“輸入成績:”Text1Text置空Text2Text置空Command1Caption“判斷級別”4.2.2Selectcase語句該事件代碼如下:PrivateSubCommand1_Click()DimscoreAsSinglescore=Val(Text1.Text)Ifscore>100Orscore<0ThenText2.Text="error":EndSelectCasescore\10Case9,10Text2.Text="優(yōu)秀"Case8Text2.Text="良好"Case7Text2.Text="中等"Case6Text2.Text="及格"Case0To5Text2.Text="不及格"EndSelectEndSub4.2.2Selectcase語句例4.8運行界面

4.2.2Selectcase語句任務(wù)6郵局向國外寄包裹的收費計算如下:當包裹重量不超過15克時收費5元;當包裹重量為15克至30克時收費9元;當包裹重量為30至45克時收費12元;當包裹重量為45克至60克時收費14元;當包裹重量為60克至75克時收費16元;當包裹重量超過75克時收費20元。請編寫一個程序根據(jù)包裹重量計算郵費。分析:

本題根據(jù)包裹的重量來計算包裹的郵寄費。一個輸入量為包裹重量,一個輸出量為郵寄費。所以用一個文本框接收輸入量,一個文本框作為輸出,一個按鈕實現(xiàn)“計算”功能,一個按鈕實現(xiàn)“退出”功能。界面設(shè)計:4.2.2Selectcase語句SelectCase語句

SelectCase語句

SelectCase語句同樣可以解決多分支問題,但與If嵌套結(jié)構(gòu)不同在于這種結(jié)構(gòu)中只有一個用于判斷的測試表達式,根據(jù)此表達式產(chǎn)生的不同計算結(jié)果執(zhí)行不同分支的語句塊內(nèi)容.其語法格式為:功能:在同一個測試條件上可以有多個分支并列,根據(jù)測試表達式的不同計算結(jié)果來執(zhí)行不同的分支。當測試值處于表達式列表1范圍時,則執(zhí)行語句塊1并退出SelectCase語句;當其值處于表達式列表2范圍時,則執(zhí)行語句塊2并退出SelectCase語句;……。若其值跟所有的表達式列表表示的值都不匹配時則執(zhí)行CaseElse對應(yīng)的語句塊n并退出SelectCase語句。SelectCase測試表達式Case表達式列表1語句塊1[Case表達式列表2語句塊2]……[CaseElse語句塊n]EndSelect注意:測試表達式可以是數(shù)學(xué)表達式、字符串表達式、邏輯表達式或混合表達式。Case子句后的表達式列表可是以下幾種格式:表達式1,表達式2,……,表達式n表達式1to表達式2Is表達式還可以是上述三種格式的結(jié)合當表達式結(jié)果與多個Case表達式列表的值匹配時,則只執(zhí)行第一個匹配的Case語句對應(yīng)的語句塊。CaseElse子句必須放在全部Case子句語句后面。當表達式的值與前面所有Case語句均不匹配時,才執(zhí)行CaseElse子句部分。這個子句可以省略。Case2,4,6,8,"VB","程序設(shè)計"Case60to100Case"a"to"z"Case

is<60Caseis>=60andis<=100(錯誤)Case2,4,6,8,10to15,is>100SelectCase語句

編寫代碼:IF語句實現(xiàn)

PrivateSubCommand1_Click()DimaAsSingle,bAsIntegera=Val(Text1.Text)Ifa<=15Thenb=5ElseIfa<=30Thenb=9ElseIfa<=45Thenb=12ElseIfa<=60Thenb=14ElseIfa<=75Thenb=16

Elseb=20EndIfText2.Text=bEndSubSelectCase語句

編寫代碼:PrivateSubCommand1_Click()DimaasSingle,basIntegera=Val(Text1.text)SelectCaseaCaseIs<=15b=5CaseIs<=30b=9Case30to45b=12Case45to60b=14

Case60to75b=14

CaseElseb=20EndSelectText2.text=bEndSub任務(wù)7航空公司規(guī)定在旅游的旺季7~9月份,如果訂票數(shù)超過20張,票價優(yōu)惠15%,20張以下,優(yōu)惠5%;在旅游的淡季1~5月份、10月份、11月份,如果訂票數(shù)超過20張,票價優(yōu)惠30%,20張以下,優(yōu)惠20%;其他情況一律優(yōu)惠10%。設(shè)計程序,根據(jù)月份和訂票張數(shù)來計算總的訂票金額,假設(shè)每張飛機票單價為600元。分析:本題根據(jù)訂票的月份和張數(shù)來計算訂票的總金額。所以用兩個輸入量即“月份”和“訂票張數(shù)”,一個輸出量即“總金額”。而第一個輸入量“月份”是一個固定值,取值范圍在1~12月,所以可以用一個組合框?qū)?2月全部列出來供用戶選擇比較好。故用一個組合框來接收“月份”輸入量,一個文本框來接收“訂票張數(shù)”的輸入量,一個文本框用來顯示“總金額”輸出量。界面設(shè)計:SelectCase語句

SelectCase語句

編寫代碼:PrivateSubForm_Load()Combo1.AddItem"1月"Combo1.AddItem"2月"Combo1.AddItem"3月"Combo1.AddItem"4月"Combo1.AddItem"5月"Combo1.AddItem"6月"Combo1.AddItem"7月"Combo1.AddItem"8月"Combo1.AddItem"9月"Combo1.AddItem"10月"Combo1.AddItem"11月"Combo1.AddItem"12月"EndSub

PrivateSubCommand1_Click()DimnumAsInteger,rateAsSinglenum=Val(Text1.Text)

’計算每張票享受的折扣rate!

Text2.Text=rate*num*600EndSubSelectCaseCombo1.ListIndexCase6To8Ifnum<20Thenrate=0.95Elserate=0.85EndIfCase9,10,0To4Ifnum<20Thenrate=0.8Elserate=0.7EndIfCaseElserate=0.9EndSelect其他月份T訂票<20rate=0.95rate=0.85F訂票<20rate=0.8rate=0.7Frate=0.9T月份7至9月1至5月10月11月任務(wù)8輸入方程的三個系數(shù)A、B和C,求方程Ax2+Bx+C=0的解。界面設(shè)計:SelectCase語句

4.3循環(huán)結(jié)構(gòu)程序設(shè)計學(xué)習(xí)要點掌握DO循環(huán)結(jié)構(gòu)掌握For循環(huán)控制結(jié)構(gòu)循環(huán)的嵌套常用算法

概述任務(wù)1單擊窗體,要求在窗體上顯示6行星號分析:要求顯示的信息是每行是由16個星號所構(gòu)成的字符串,所以可以通過連續(xù)6次調(diào)用窗體的Print方法實現(xiàn)圖形的顯示PrivateSubForm_Click()Print"****************"Print"****************"Print"****************"Print"****************"Print"****************"Print"****************"EndSub若要求顯示10行或更多行這樣的信息若打印信息的行數(shù)要求是由用戶決定專門用于進行重復(fù)操作的語句結(jié)構(gòu)

概述所謂循環(huán)結(jié)構(gòu),表示在執(zhí)行語句時,需要對其中的某個或某部分語句重復(fù)執(zhí)行多次。對于此類情況可以利用各種循環(huán)結(jié)構(gòu)來實現(xiàn)。循環(huán)結(jié)構(gòu)可以分為For循環(huán)、Do循環(huán)和While循環(huán)語句結(jié)構(gòu)。

循環(huán)For循環(huán)Do循環(huán)While循環(huán)For…NextForEach…Next前測型循環(huán)后測型循環(huán)當型循環(huán)直到型循環(huán)當型循環(huán)直到型循環(huán)Do循環(huán)Do循環(huán)可以分為前測型循環(huán)和后測型循環(huán)兩種結(jié)構(gòu)。前測型循環(huán)結(jié)構(gòu)語法格式:

True循環(huán)條件循環(huán)體False格式1(當型)

DoWhile

循環(huán)條件循環(huán)體

LoopFalse循環(huán)條件循環(huán)體True

格式2(直到型)

DoUntil

循環(huán)條件循環(huán)體

Loop當型循環(huán)是當循環(huán)條件為TRUE時進入循環(huán);直到型則是為FALSE進入循環(huán)。Do循環(huán)Do循環(huán)可以分為前測型循環(huán)和后測型循環(huán)兩種結(jié)構(gòu)。后測型循環(huán)結(jié)構(gòu)語法格式:

格式1(當型)Do循環(huán)體LoopWhile

循環(huán)條件格式2(直到型)

Do循環(huán)體

LoopUntil

循環(huán)條件循環(huán)條件循環(huán)體TrueFalse循環(huán)條件循環(huán)體False

True前測型循環(huán)是先判斷循環(huán)條件,循環(huán)體執(zhí)行次數(shù)≥0;后測型循環(huán)是先執(zhí)行循環(huán)體,循環(huán)體執(zhí)行次數(shù)≥1

。Do循環(huán)單擊窗體,要求在窗體上顯示6行星號前測型當型循環(huán):將上面的代碼改為前測型直到型循環(huán)、后測型當型循環(huán)和后測型直到型循環(huán)。DimiAsInteger'定義計數(shù)器變量i來記錄目前已輸出的行數(shù)

i=0

DoWhile

i<6

'當輸出行數(shù)未達到6行,反復(fù)執(zhí)行下面語句

Print"****************"i=i+1

'每輸出一行信息,計數(shù)器i累加1

Loop

'返回到DoWhile行EndSub

DoUntil

i>5

Print"****************"i=i+1

Loop

Do

Print"****************"i=i+1

Loopwhile

i<6

Do

Print"****************"i=i+1

LoopUntili>5

Val(InputBox("請輸入行數(shù):"))注意:在循環(huán)體中,至少要有一條語句使得循環(huán)趨結(jié)束,使循環(huán)語句在有限的時間內(nèi)執(zhí)行完畢,否則將會出現(xiàn)“死循環(huán)”。任務(wù)1求S=1+(1+2)+…+(1+2+3+…+100)的值。

編寫代碼:PrivateSubCommand1_Click()

DimsAsLong,nAsInteger,kAsIntegerLabel1.Caption="s=1+(1+2)+(1+2+3)+...(1+2+3+...100)=?"s=0:n=0:k=1

Don=n+k’求“小和”,即求s中的每一項的和。

s=s+n’求“大和”,即求s的累加和。

k=k+1’“大和”的項數(shù)(亦即“小和”中的末項值)。

LoopWhilek<=100Label2.Caption="s=1+(1+2)+(1+2+3)...+(1+2+3+...+100)="&sEndSubDo循環(huán)Untilk>100Do循環(huán)【例4.9】

編寫程序,求兩個正整數(shù)的最大公約數(shù)。算法分析:①輸入兩個自然數(shù)m、n②求m除以n的余數(shù)r③m←n④n←r⑤若r≠0,則重復(fù)執(zhí)行②③④(循環(huán)),否則轉(zhuǎn)⑥⑥輸出m和n的最大公約數(shù)m輸入兩個自然數(shù)m,nr=mModnm=nn=rr<>0輸出最大公約數(shù)m開始結(jié)束FalseTrueDo循環(huán)設(shè)計采用歐幾里德算法求解兩個自然數(shù)的最大公約數(shù)的程序界面設(shè)計:利用文本框來接收數(shù)據(jù)和顯示結(jié)果,利用命令按鈕的單擊事件完成最大公約數(shù)的計算。False輸入兩個自然數(shù)m,nr=mModnm=nn=rr<>0輸出最大公約數(shù)m開始結(jié)束TruePrivateSubCommand1_Click()

DimmAsInteger,nAsInteger,rAsIntegerm=Val(Text1.Text)n=Val(Text2.Text)EndSubPrivateSubCommand2_Click()

Text1.Text=""Text2.Text=""Text3.Text=""EndSubPrivateSubCommand3_Click()

EndEndSubPrivateSubCommand1_Click()

DimmAsInteger,nAsInteger,rAsIntegerm=Val(Text1.Text)n=Val(Text2.Text)Dor=mModnm=nn=rLoopWhiler<>0Text3.Text=mEndSubPrivateSubCommand2_Click()

Text1.Text=""Text2.Text=""Text3.Text=""EndSubPrivateSubCommand3_Click()EndEndSub習(xí)題1.依次在輸入5、4、3、2、1、-1,輸出結(jié)果是?

PrivateSubCommand_Click()

X=0DoUntilx=-1a=Val(InputBox(“請輸入A的值”))b=Val(InputBox(“請輸入B的值”))x=Val(InputBox(“請輸入X的值”))a=a+b+xprintaLoopEndSub輸出兩個結(jié)果,分別是12和2習(xí)題2.依次在輸入5、4、3、2、1、-1,輸出結(jié)果為_______PrivateSubCommand_Click()

X=0DoUntilx=-1a=Val(InputBox(“請輸入A的值”))b=Val(InputBox(“請輸入B的值”))x=Val(InputBox(“請輸入X的值”))a=a+b+xLoopprintaEndSub輸出結(jié)果只有一個,23.運行下列程序,單擊窗體,則執(zhí)行結(jié)果是()

PrivateSubForm_Click()

s=0Dos=(s+1)*(s+2)Number=Number+1LoopUntils>=30PrintNumber;sEndSubA)01B)3030C)430D)3182習(xí)題4.運行下列程序,單擊窗體,則執(zhí)行結(jié)果是()

PrivateSubForm_Click()

b=1a=2DoWhileb<10b=2*a+bLoopPrintbEndSubA)13B)17C)21D)33習(xí)題習(xí)題5.運行下列程序,單擊窗體,則執(zhí)行結(jié)果是

PrivateSubForm_Click()

a=100Dos=s+aa=a+1LoopWhilea>111PrintaEndSub結(jié)果:a=1016.運行下列程序,單擊窗體,則執(zhí)行結(jié)果是_____PrivateSubForm_Click()

s=0i=1DoWhilei<=100If(i\5)*5=iThens=s+1i=i+1EndIfLoopPrintsEndSub結(jié)果:死循環(huán)習(xí)題7.運行下列程序,單擊窗體,則執(zhí)行結(jié)果是____PrivateSubForm_Click()

s=0i=1DoWhilei<=100If(i\5)*5=iThens=s+1EndIfi=i+1LoopPrintsEndSub結(jié)果:s=20習(xí)題While循環(huán)語法格式:

While

循環(huán)條件

循環(huán)體

Wend這種結(jié)構(gòu)使用完全類似于Do-Loop的當型循環(huán)(格式1),表示當循環(huán)條件為True時,反復(fù)執(zhí)行循環(huán)體,直到循環(huán)條件為False為止。例如:求S=1+(1+2)+…(1+2+…+100)的值。程序代碼:PrivateSubCommand_Click()Dimsaslong,nasInteger,kasIntegers=0:n=0:k=1Whilek<=100n=n+k:s=s+n:k=k+1WendLabel2.Caption=“1+(1+2)+…(1+2+…+100)=”&s語法格式如下:

For循環(huán)變量=初值to終值[step步長]

執(zhí)行語句

Next循環(huán)變量For…Next循環(huán)Truei<=終值循環(huán)體Falsei=i+步長控制變量i=初值注意:步長可以為正、負,也可以是整數(shù)或小數(shù)。若省略,默認值為1。當步長為正數(shù)時,終值>初值;為負數(shù)時,終值<初值。Next表示循環(huán)控制變量取下一個值,即:i=i+步長For循環(huán)的循環(huán)次數(shù)由循環(huán)變量的初值、終值和步長決定:

Int((終值-初值)/步長)+1循環(huán)次數(shù)的一般計算公式:

Int((終值-初值)/步長)+1例如:ForI=2to18step3 c=c+1

NextI

上述For的循環(huán)次數(shù)

=Int((18-2)/3)+1=6第幾次循環(huán)I沒有進行循環(huán)時21528311414517620For…Next語句循環(huán)次數(shù)的兩種特殊情況:初值、終值和步長表達式中所包含的變量在循環(huán)體內(nèi)被改變,也不會影響循環(huán)次數(shù)。For…Next語句例如:c=18

ForI=2tocstep3c=c+1

NextI第幾次循環(huán)cI未循環(huán)時2152831141451762018192021222324說明:代碼段中雖然變量c在循環(huán)體內(nèi)改變,但循環(huán)控制變量I的終值依舊為18,并未改變,因此循環(huán)次數(shù)=6當循環(huán)變量在循環(huán)體內(nèi)被重新賦值,則會影響和改變循環(huán)次數(shù)。For…Next語句例如:c=18

ForI=2to18step3c=c+1I=I+2

NextI說明:循環(huán)體中循環(huán)控制變量I被改變,循環(huán)次數(shù)由原來的6次變?yōu)?次。第幾次循環(huán)cI未循環(huán)時2142931441918192021227121722For…Next循環(huán)For循環(huán)實現(xiàn):單擊窗體,要求在窗體上顯示6行星號分析:循環(huán)體:Print"****************",循環(huán)變量I表示輸出行,從1變化到6,即循環(huán)變量I的初值為1,終值為6,步長為1,循環(huán)次數(shù)為6PrivateSubForm_Click()DimIAsInteger'定義一個循環(huán)變量I來控制輸出的行數(shù)

'當輸出行數(shù)沒有超過6行,就反復(fù)執(zhí)行下面的語句ForI=1To6'步長為1,可省略Step1Print"****************"NextI'完成I根據(jù)步長完成遞增,即I=I+1,并返回到For行EndSub【例4.10】任意輸入一個正整數(shù),判斷它是否為素數(shù)(Prime)。分析:眾所周知,一個素數(shù)當且僅當只能被1和它自己整除,即如果一個自然數(shù)n不被2~n-1中的任一數(shù)整除,則n是素數(shù)。進一步,如果一個自然數(shù)n不被2~Sqr(n)中的任一數(shù)整除,則n是素數(shù)。程序中用2,3,…,Int(Sqr(n))分別整除n,若其中有一個數(shù)能整除n,則n就不是素數(shù),也沒有必要再去判斷它是否能被余下的數(shù)整除了,即此時可以退出循環(huán);否則沒有一個數(shù)能整除n,則n就是素數(shù)了。

PrivateSubForm_Click()N%=Val(InputBox("Pleaseinputanumber:","輸入正整數(shù)"))ForI%=2ToInt(Sqr(N%))IfN%ModI%=0ThenExitForNextI%IfI%>Int(Sqr(N%))ThenPrint"Thenumber";N%;"isaprime."ElsePrint"Thenumber";N%;"isnotaprime."EndIfEndSub習(xí)題1.PrivateSubForm_Click()ForI=7to90step5printINextIEndSub上述程序共執(zhí)行執(zhí)行循環(huán)體的次數(shù)是()

A)14B)15C)16D)172.在窗體上放置一個命令按鈕,然后編寫如下事件過程:

PrivateSubCommand1_Click()x=5Fori=1to20Step2x=x+i\5NextiPrintxEndSub程序運行后,單擊命令按鈕,輸出結(jié)果為()A)21B)22C)23D)24習(xí)題3.運行下列程序,單擊窗體,則執(zhí)行結(jié)果是()

PrivateSubForm_Click()E=1:F=1Forj=1To3E=E+F:F=F+ENextj PrintE;FEndSubA)66B)58C)1321D)3455習(xí)題4.運行下列程序,單擊窗體,則執(zhí)行結(jié)果是()

PrivateSubForm_Click()Forj=1To15a=a+jMod3NextjPrintaEndSubA)1B)15C)90D)120習(xí)題5.運行下列程序,單擊窗體,則執(zhí)行結(jié)果是()

PrivateSubForm_Click()Forj=1To3PrintTab(3*j);(2*j-1)*(2*j-1)NextjPrintEndSub

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論