官术网_书友最值得收藏!

4章 掌握算法和程序控制結(jié)構(gòu)

(名師課堂:1小時(shí)47分)

要使計(jì)算機(jī)能完成人們預(yù)定的工作,首先必須為如何完成預(yù)定的工作設(shè)計(jì)一下算法,然后再根據(jù)算法編寫程序。算法是問題求解過程的精確描述,因此掌握算法是學(xué)習(xí)程序設(shè)計(jì)的基礎(chǔ),也可以說是程序設(shè)計(jì)的入門知識,可以幫助用戶更好、更快地掌握編程思想及編程方法。本章將簡要地介紹算法,使讀者初步了解算法,為日后編程打下良好的基礎(chǔ)。學(xué)好程序的基本控制結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ),本章還詳細(xì)地介紹了程序常用的三種控制結(jié)構(gòu),講解過程中為了便于讀者理解結(jié)合了大量的舉例。

通過學(xué)習(xí)本章,讀者可以達(dá)到以下學(xué)習(xí)目的:

初步了解算法;

掌握順序結(jié)構(gòu)程序設(shè)計(jì)方法中的基本語句、輸入/輸出語句的使用;

掌握賦值語句“=”的使用方法;

掌握選擇結(jié)構(gòu)中If語句的使用方法;

掌握If語句的嵌套;

掌握選擇結(jié)構(gòu)中Select Case語句的使用方法;

掌握循環(huán)結(jié)構(gòu)中For…Next循環(huán)語句的使用方法;

掌握循環(huán)結(jié)構(gòu)中Do…Loop循環(huán)語句的使用方法;

掌握多重循環(huán)的使用方法;

掌握選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)的嵌套。

4.1 了解算法

專題講座:光盤文件\MR\Video\4\算法.exe

視頻速遞:詳細(xì)講解什么是算法及算法的特點(diǎn)

算法是學(xué)習(xí)程序設(shè)計(jì)的基礎(chǔ),也可以說是程序設(shè)計(jì)的入門知識,掌握算法可以幫助讀者快速理清程序設(shè)計(jì)的思路,找出多種解決方法,從而選擇最合適的解決方案。

本節(jié)將介紹什么是算法、算法的特點(diǎn)、算法的描述方法以及構(gòu)成算法的基本結(jié)構(gòu)。

4.1.1 什么是算法

人們使用計(jì)算機(jī),就是要利用計(jì)算機(jī)處理各種不同的問題,而要解決問題,就必須事先對各類問題進(jìn)行分析,確定采用的方法和步驟。為解決某一個(gè)問題所采取的方法和步驟稱為“算法”。

實(shí)例位置:光盤文件\MR\ Instance\4\4.1

例4.1】 例如,設(shè)計(jì)一個(gè)計(jì)算1~5的整數(shù)連乘的算法,并根據(jù)算法編寫程序。

首先,需要定義兩個(gè)整型變量intSum和i,其中intSum用來存放每次乘積的值和最后的計(jì)算結(jié)果,其初始值為1,而i用于存放1~5的整數(shù),初始值為0,用intSum=intSum*i來完成每次連乘后的結(jié)果。算法可以表述如下。

將存放每次乘積的值和最后計(jì)算結(jié)果的變量intSum初始化為1。

將用于乘積運(yùn)算的依次遞增的整型變量i初始化為0。

整型變量i為1~5的整數(shù)。

計(jì)算變量intSum與i的乘積,并將結(jié)果存入intSum,即intSum=intSum*i。

輸出變量intSum。

有了上述算法,就可以在Visual Basic中編寫程序了,程序代碼如下:

        Private Sub Command1_Click()
            Dim intSum As Integer,i As Integer                  '定義整型變量
            intSum=1:i=0                                        '給變量賦初值
            For i=1 To 5                                      '計(jì)算1~5的連乘結(jié)果
                intSum = intSum * i
            Next i
            Debug.Print intSum       '                          輸出最后的計(jì)算結(jié)果
        End Sub

4.1.2 熟悉算法的特點(diǎn)

一個(gè)算法應(yīng)該具有以下的特點(diǎn)。

(1)有窮性:一個(gè)算法必須在執(zhí)行有窮多個(gè)計(jì)算步驟后終止。

(2)確定性:一個(gè)算法給出的每個(gè)計(jì)算步驟,必須是有精確定義、無二義性。

(3)有效性:算法中的每一個(gè)步驟必須有效地執(zhí)行,并能得到確定的結(jié)果。

(4)輸入:一個(gè)算法中可以沒有輸入,也可以有一個(gè)或者多個(gè)輸入信息。這些輸入信息是算法所需的初始數(shù)據(jù)。

(5)輸出:一個(gè)算法應(yīng)該有一個(gè)或者多個(gè)輸出,一個(gè)算法得到的結(jié)果(中間結(jié)果或最后結(jié)果)就是算法的輸出,沒有輸出的算法是沒有意義的。

4.1.3 算法的描述方法

為了讓算法清晰易懂,需要選擇一種好的描述方法。算法的描述方法有很多,有自然語言、傳統(tǒng)流程圖、N-S結(jié)構(gòu)化流程圖等。自然語言就是用人們?nèi)粘J褂玫恼Z言描述解決問題的方法和步驟,例如4.1.1節(jié)中設(shè)計(jì)計(jì)算1~5的整數(shù)連乘的算法中所闡述的。這種描述方法通俗易懂,但比較煩瑣,并且對程序流向等描述不明了、不直觀。針對這些缺點(diǎn)產(chǎn)生了傳統(tǒng)流程圖和N-S結(jié)構(gòu)化流程圖。

下面分別介紹這兩種流程圖。

1.傳統(tǒng)流程圖

傳統(tǒng)流程圖,使用不同的幾何圖形來表示不同性質(zhì)的操作,使用流程線來表示算法的執(zhí)行方向,具有直觀形象、邏輯清楚、易于理解等特點(diǎn),但它占用篇幅較大,流程隨意轉(zhuǎn)向,較大的流程圖不易讀懂。

傳統(tǒng)流程圖的基本符號及說明如表4.1所示。

表4.1 流程圖符號及說明

2.N-S結(jié)構(gòu)化流程圖

N-S結(jié)構(gòu)化流程圖是美國學(xué)者I·Nassi和B·Shneiderman在1973年首次提出的一種描述算法的圖形方法。N-S結(jié)構(gòu)化流程圖將傳統(tǒng)流程圖中的流程線去掉,將全部算法寫在一個(gè)矩形框里,這個(gè)框包含其他從屬于它的從屬框。當(dāng)程序算法比較煩瑣時(shí),一般采用N-S結(jié)構(gòu)化流程圖。另外,N-S結(jié)構(gòu)化流程圖更有利于程序設(shè)計(jì)的結(jié)構(gòu)化。

以上介紹的兩種流程圖各有特點(diǎn),但對于初學(xué)者和編寫較小的程序時(shí),筆者建議使用傳統(tǒng)流程圖來描述算法。

4.1.4 了解程序三種控制結(jié)構(gòu)

在程序設(shè)計(jì)中,構(gòu)成算法的基本結(jié)構(gòu)有三種:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。合理使用這些控制結(jié)構(gòu)可以使程序結(jié)構(gòu)清晰,易讀性強(qiáng),并且易于查錯(cuò)和排錯(cuò)。

1.順序結(jié)構(gòu)

順序結(jié)構(gòu)是最簡單、最基本的結(jié)構(gòu)方式,各流程框依次按順序執(zhí)行。其傳統(tǒng)流程圖的表示方式與N-S結(jié)構(gòu)化流程圖的表示方式分別如圖4.1和圖4.2所示。其執(zhí)行順序?yàn)椋洪_始→語句1→語句2→……→結(jié)束。

圖4.1 順序結(jié)構(gòu)傳統(tǒng)流程圖

圖4.2 順序結(jié)構(gòu)N-S結(jié)構(gòu)化流程圖

2.選擇(分支)結(jié)構(gòu)

選擇結(jié)構(gòu)就是對給定條件進(jìn)行判斷,條件為True時(shí)執(zhí)行一個(gè)分支,條件為False時(shí)執(zhí)行另一個(gè)分支。雙分支和單分支選擇結(jié)構(gòu)的傳統(tǒng)流程圖表示方式與N-S結(jié)構(gòu)化流程圖表示方式如圖4.3和圖4.4所示。

圖4.3 雙分支選擇結(jié)構(gòu)的兩種流程圖

圖4.4 單分支選擇結(jié)構(gòu)的兩種流程圖

3.循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)可以按照需要多次重復(fù)執(zhí)行一行或者多行代碼。循環(huán)結(jié)構(gòu)分為兩種:當(dāng)型循環(huán)和直到型循環(huán)。

當(dāng)型循環(huán),先判斷后執(zhí)行。當(dāng)條件為True時(shí)反復(fù)執(zhí)行語句或語句塊,條件為False時(shí),跳出循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語句,流程圖如圖4.5所示。

圖4.5 當(dāng)型循環(huán)流程圖

直到型循環(huán),先執(zhí)行后判斷。先執(zhí)行語句或語句塊,再進(jìn)行條件判斷,直到條件為False時(shí),跳出循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語句,否則一直執(zhí)行語句或語句塊,流程圖如圖4.6所示。

圖4.6 直到型循環(huán)流程圖

4.2 學(xué)習(xí)使用順序結(jié)構(gòu)

專題講座:光盤文件\MR\Video\4\順序結(jié)構(gòu).exe

視頻速遞:詳細(xì)講解賦值語句和輸入、輸出

順序結(jié)構(gòu)是程序中最簡單、最常用的結(jié)構(gòu),在該結(jié)構(gòu)中各語句按出現(xiàn)的先后次序執(zhí)行。它是任何程序的主體基本結(jié)構(gòu)。

一般的程序設(shè)計(jì)語言中,順序結(jié)構(gòu)的語句主要包括賦值語句、輸入/輸出語句等,Visual Basic 6.0也不例外,其中輸入/輸出可以通過文本框控件、標(biāo)簽控件、InputBox函數(shù)、MsgBox函數(shù)以及Print方法來實(shí)現(xiàn)。

4.2.1 使用賦值語句給變量賦值

賦值語句是將表達(dá)式的值賦給變量或?qū)傩裕ㄟ^Let關(guān)鍵字使用賦值運(yùn)算符“=”給變量或?qū)傩再x值。

語法:

        [Let] <變量名> = <表達(dá)式>

Let:可選的參數(shù)。顯式使用的Let關(guān)鍵字是一種格式,通常都省略該關(guān)鍵字。變量名:必需的參數(shù)。變量或?qū)傩缘拿Q,變量命名遵循標(biāo)準(zhǔn)的變量命名約定。表達(dá)式:必需的參數(shù)。賦給變量或?qū)傩缘闹怠?/p>

例如,定義一個(gè)長整型變量,給這個(gè)變量賦值2205,代碼如下:

        Dim a As Long
        Let a = 2205

上述代碼中可以省略關(guān)鍵字Let。

例如,在文本框中顯示文字,代碼如下:

        Text1.Text="mingrisoft"

賦值語句看起來簡單,但使用時(shí)也要注意以下幾點(diǎn)。

(1)賦值號與表示等于的關(guān)系運(yùn)算符都用“=”表示,Visual Basic 6.0系統(tǒng)會(huì)自動(dòng)區(qū)分,即在條件表達(dá)式中出現(xiàn)的是等號,否則是賦值號。

(2)賦值號左邊只能是變量,不能是常量、常數(shù)符號和表達(dá)式。下面均是錯(cuò)誤的賦值語句:

        X+Y=1                                               '左邊是表達(dá)式
        Visual Basic 6.0Black=myColor                       '左邊是常量,代表黑色
        10=abs(s)+x+y                                       '左邊是常量

(3)當(dāng)表達(dá)式為數(shù)值型并與變量精度不同時(shí),需要強(qiáng)制轉(zhuǎn)換左邊變量的精度。

例如:

        n%=4.6                                          'n為整型變量,轉(zhuǎn)換時(shí)四舍五入,值為5

(4)當(dāng)表達(dá)式是數(shù)字字符串,左邊變量是數(shù)值型時(shí),右邊值將自動(dòng)轉(zhuǎn)換成數(shù)值型再賦值。如果表達(dá)式中有非數(shù)字字符或空字符串,則會(huì)出錯(cuò)。

        n%="123"                                           '將字符串123轉(zhuǎn)換為數(shù)值數(shù)據(jù)123

下列情況會(huì)出現(xiàn)運(yùn)行時(shí)錯(cuò)誤。

        n%="123mr"
        n%=""

(5)當(dāng)邏輯值賦值給數(shù)值型變量時(shí),True轉(zhuǎn)換為?1,F(xiàn)alse轉(zhuǎn)換為0,反之當(dāng)數(shù)值賦給邏輯型變量時(shí),非0轉(zhuǎn)換為True,0轉(zhuǎn)換為False。

實(shí)例位置:光盤文件\MR\ Instance\4\4.2

例4.2】 在“立即”窗口中將單選按鈕被選擇的狀態(tài)賦值給整型變量。

新建一個(gè)工程,在Form1窗體中添加一個(gè)CommandButton控件和兩個(gè)Option Button控件。

在代碼窗口中編寫如下代碼:

        Private Sub Command1_Click()
          Dim a As Integer,b As Integer                      '定義整型變量
          a=Option1.Value     '                              將邏輯值賦給整型變量a
          b=Option2.Value     '                              將邏輯值賦給整型變量b
        Debug.Print "Opt1的值:"&a                           '輸出結(jié)果
        Debug.Print "Opt2的值:"&b
        End Sub

按【F5】鍵運(yùn)行程序,結(jié)果如圖4.7所示。

圖4.7 在“立即”窗口中顯示OptionButton控件的返回值

(6)任何非字符型的值賦值給字符型變量,自動(dòng)轉(zhuǎn)換為字符型。

為了保證程序的正常運(yùn)行,一般利用類型轉(zhuǎn)換函數(shù)將表達(dá)式的類型轉(zhuǎn)換成與左邊變量匹配的類型。

4.2.2 將用戶數(shù)據(jù)輸入到應(yīng)用程序

在程序設(shè)計(jì)時(shí),通常使用文本框(TextBox控件)或InputBox函數(shù)來輸入數(shù)據(jù)。當(dāng)然,也可以使用其他對象或函數(shù)來輸入數(shù)據(jù)。

1.文本框

利用文本框控件的Text屬性可以獲得用戶從鍵盤輸入的數(shù)據(jù),或?qū)⒂?jì)算的結(jié)果輸出。

實(shí)例位置:光盤文件\MR\ Instance\4\4.3

例4.3】 在兩個(gè)文本框中分別輸入“單價(jià)”和“數(shù)量”,然后通過Label控件顯示金額,代碼如下:

        Private Sub Command1_Click()
          Dim mySum As Single     '                        定義單精度浮點(diǎn)型變量
          mySum=Val(Text1.Text)*Val(Text2.Text)            '計(jì)算“單價(jià)”和“數(shù)量”相乘
        Label1.Caption ="金額為:"&mySum    '              顯示計(jì)算結(jié)果
        End Sub

按【F5】鍵運(yùn)行程序,結(jié)果如圖4.8所示。

圖4.8 在標(biāo)簽控件顯示金額

2.輸入對話框InputBox函數(shù)

InputBox函數(shù)提供了一個(gè)簡單的對話框供用戶輸入信息,如圖4.9所示。在該對話框中有一個(gè)輸入框和兩個(gè)命令按鈕。顯示對話框后,將等待用戶輸入。當(dāng)用戶單擊“確定”按鈕后返回輸入的內(nèi)容。InputBox函數(shù)的介紹如下。

圖4.9 InputBox輸入框

語法:

        InputBox (prompt[, title] [, default] [, xpos][, ypos])

InputBox函數(shù)語法中的參數(shù)說明如表4.2所示。

表4.2 InputBox函數(shù)語法中的參數(shù)說明

InputBox輸入函數(shù)有兩種表達(dá)方式,一種為帶返回值的,另一種為不帶返回值的。(1)帶返回值

帶返回值的輸入函數(shù)的使用方法舉例如下:

        MyValue = InputBox("請輸入電話號碼", , 4978981)

上述語句中InputBox函數(shù)其后的一對圓括號不能省略,其中各參數(shù)之間用逗號隔開。(2)不帶返回值

不帶返回值的輸入函數(shù)的使用方法舉例如下:

        InputBox "請輸入電話號碼", 4978981

學(xué)習(xí)手冊

注意 ① InputBox函數(shù)中各項(xiàng)參數(shù)的順序必須一一對應(yīng),除第一項(xiàng)參數(shù)“提示”不能省略外,其余參數(shù)均可省略,省略可選參數(shù)時(shí)其后的逗號不可省。

② 由InputBox函數(shù)返回的數(shù)據(jù)類型為字符類型數(shù)據(jù),如果要得到數(shù)值類型數(shù)據(jù),則必須用Val函數(shù)進(jìn)行類型轉(zhuǎn)換。

4.2.3 將指定信息顯示給用戶

輸出數(shù)據(jù)可以通過Label控件、輸出對話框函數(shù)MsgBox和Print方法等。通過Label控件輸出數(shù)據(jù)較簡單,這里就不介紹了,下面僅介紹MsgBox函數(shù)和Print方法。

1.MsgBox函數(shù)

MsgBox函數(shù)的功能是在對話框中顯示消息,如圖4.10所示,等待用戶單擊按鈕,并返回一個(gè)整數(shù)告訴系統(tǒng)用戶單擊的是哪一個(gè)按鈕。

圖4.10 MsgBox對話框

另外,在使用該函數(shù)時(shí),可以通過設(shè)置其中的可用參數(shù),在消息框中顯示信息、按鈕、圖標(biāo)或警告聲音。

語法:

        MsgBox(prompt[,buttons][,title])

MsgBox函數(shù)語法中的參數(shù)說明如表4.3所示。

表4.3 MsgBox函數(shù)語法中的參數(shù)說明

buttons參數(shù)用于指定對話框中按鈕的數(shù)目及形式、圖標(biāo)樣式、默認(rèn)按鈕等,它的取值如表4.4所示。

表4.4 buttons參數(shù)的取值

MsgBox函數(shù)支持命名參數(shù)。返回一個(gè)整數(shù),表示關(guān)閉對話框前哪一個(gè)按鈕被單擊,具體意義如表4.5所示。

表4.5 MsgBox函數(shù)的返回值

表4.4和表4.5中列出的符號常量是Visual Basic 6.0定義的常量,可以在程序中的任何地方使用,這些符號常量所對應(yīng)的值就是表中“值”列中的數(shù)。

MsgBox函數(shù)有兩種表達(dá)方式,一種為帶返回值的,另一種為不帶返回值的。

(1)帶返回值

帶返回值的函數(shù)的使用方法舉例如下:

        myvalue=MsgBox("注意:請輸入數(shù)值型數(shù)據(jù)",2+Visual Basic 6.0Exclamation,"錯(cuò)誤提示")
        If myvalue=3 Then End

上述語句中MsgBox函數(shù)其后的一對圓括號不能省略,其中各參數(shù)之間用逗號隔開。

(2)不帶返回值

不帶返回值的輸入函數(shù)的使用方法舉例如下:

        MsgBox "請輸入數(shù)值型數(shù)據(jù)!", , "提示"

2.Print方法

Print是輸出數(shù)據(jù)、文本的一個(gè)重要方法,其格式如下:

        窗體名稱.Print[<表達(dá)式>[,|;[<表達(dá)式>]…]]

參數(shù)說明:

<表達(dá)式>:可以是數(shù)值或字符串表達(dá)式。對于數(shù)值表達(dá)式,先計(jì)算表達(dá)式的值,然后輸出;而字符串則原樣輸出。如果表達(dá)式為空,則輸出一個(gè)空行。

當(dāng)輸出多個(gè)表達(dá)式時(shí),各表達(dá)式用分隔符(逗號、分號或空格)隔開。若用逗號分隔將以14個(gè)字符位置為單位把輸出行分成若干個(gè)區(qū)段,每個(gè)區(qū)段輸出一個(gè)表達(dá)式的值。而表達(dá)式之間用分號或空格作為分隔符,則按緊湊格式輸出。

一般情況下,每執(zhí)行一次Print方法將自動(dòng)換行,可以通過在末尾加上逗號或分號的方法使輸出結(jié)果在同一行顯示。

學(xué)習(xí)手冊

注意 Print方法除了可以作用于窗體外,還可以作用于其他多個(gè)對象,如立即窗口(Debug)、圖片框(PictureBox)、打印機(jī)(Printer)等。如果省略“對象名”,則在當(dāng)前窗體上輸出。

實(shí)例位置:光盤文件\MR\ Instance\4\4.4

例4.4】 使用Print方法在窗體中輸出圖書排行數(shù)據(jù),代碼如下:

        Private Sub Form_Click()
            Print                                                         '輸出空行
            Font.Size=14                                                  '設(shè)置字體
          Font.Name  ="華文行楷"
          Print  Tab(45);Year(Date)&"年"&Month(Date)&"月份圖書銷售排行"
            '打印標(biāo)題
          CurrentY  =700
          Font.Size  =9
          Font.Name  ="宋體"
          Print  Tab(15);"書名";Tab(55);"出版社";Tab(75);"銷售數(shù)量"
            Print Tab(14);String(75,"-")     '                              輸出線
            '打印內(nèi)容
          Print  Tab(15);"Visual Basic經(jīng)驗(yàn)技巧寶典";Tab(55);"人民郵電出版社";Tab(75);10
          Print  Tab(15);"Visual Basic數(shù)據(jù)庫系統(tǒng)開發(fā)案例精選";Tab(55);"人民郵電出版社";Tab(75);6
          Print  Tab(15);"Delphi數(shù)據(jù)庫系統(tǒng)開發(fā)案例精選";Tab(55);"人民郵電出版社";Tab(75);8
        End Sub

代碼說明:

Tab(n):內(nèi)部函數(shù),用于將指定表達(dá)式從窗體第n列開始輸出。

Spc(n):內(nèi)部函數(shù),用于在輸出表達(dá)式前插入n個(gè)空格。

Print:如果Print后面沒有內(nèi)容,則輸出空行。

按【F5】鍵,運(yùn)行工程,單擊窗體,效果如圖4.11所示。

圖4.11 使用Print語句在窗體中輸出數(shù)據(jù)

4.3 學(xué)習(xí)使用選擇結(jié)構(gòu)

專題講座:光盤文件\MR\Video\4\選擇結(jié)構(gòu).exe

視頻速遞:詳細(xì)講解If語句和Select Case語句

選擇結(jié)構(gòu)屬于分支結(jié)構(gòu)中的一種,也可以稱為判定結(jié)構(gòu)。程序通過判斷所給的條件和判斷條件的結(jié)果執(zhí)行不同的程序段。

4.3.1 單分支If…Then語句

If…Then語句用于判斷表達(dá)式的值,滿足條件時(shí)執(zhí)行其包含的一組語句,執(zhí)行流程如圖4.12所示。

圖4.12 If…Then語句執(zhí)行流程圖

If…Then語句有兩種形式,即單行和塊形式。

1.單行形式

顧名思義,單行形式的If…Then語句只能在一行內(nèi)書寫完畢,即不能一行超過255個(gè)字符的限制。

語法:

        If條件表達(dá)式 Then 語句

If和Then都是關(guān)鍵字。“條件表達(dá)式”應(yīng)該是一個(gè)邏輯表達(dá)式,或者其值是可以轉(zhuǎn)換為邏輯值的其他類型表達(dá)式。

當(dāng)程序執(zhí)行到此語句時(shí),首先檢查“條件表達(dá)式”,以確定下一步的流向。如果“條件”為True,則執(zhí)行Then后面的語句;如果“條件”為False,則不執(zhí)行“語句”中的任何語句,直接跳到下一條語句執(zhí)行。

下面是一條單行形式的If…Then語句:

2.塊形式

塊形式的If…Then語句是以連續(xù)數(shù)條語句的形式給出的。

語法:

        If條件表達(dá)式Then
            語句塊
        End If

其中“語句塊”可以是單個(gè)語句,也可以是多個(gè)語句。多個(gè)語句可以寫在多行中,也可以寫在同一行中,并用冒號“:”隔開。

當(dāng)程序執(zhí)行到此語句時(shí),首先檢查“條件表達(dá)式”,以確定下一步的流向。如果“條件”為True,則執(zhí)行Then后面的語句塊;如果“條件”為False則跳過Then后面的語句或語句塊。如果邏輯表達(dá)式為數(shù)值表達(dá)式,計(jì)算結(jié)果為非0時(shí)表示True,計(jì)算結(jié)果為0時(shí)表示False。

學(xué)習(xí)手冊

注意 塊形式的If…Then…End If語句必須使用End If關(guān)鍵字作為語句的結(jié)束標(biāo)志,否則會(huì)出現(xiàn)語法錯(cuò)誤或邏輯錯(cuò)誤。

實(shí)例位置:光盤文件\MR\ Instance\4\4.5

例4.5】 判斷“密碼”文本框中的值是否為“111”,如果是則提示用戶登錄成功,代碼如下:

按【F5】鍵,運(yùn)行工程,單擊窗體,效果如圖4.13所示。

圖4.13 用戶登錄

4.3.2 雙分支If…Then…Else語句

在If…Then…Else語句中,可以有若干組語句塊,根據(jù)實(shí)際條件只執(zhí)行其中的一組,其執(zhí)行流程如圖4.14所示。

圖4.14 If…Then…Else語句執(zhí)行流程圖

If…Then…Else語句也分為單行形式和塊形式。

1.單行形式

語法:

        If 條件表達(dá)式 Then 語句塊1 Else 語句塊2

當(dāng)條件滿足時(shí)(即“條件表達(dá)式”的值為True),執(zhí)行“語句塊1”,否則執(zhí)行“語句塊2”,然后繼續(xù)執(zhí)行If語句下面的語句。

例如,下面就是一個(gè)單行形式的If…Then…Else語句:

2.塊形式

如果單行形式的兩個(gè)語句塊中的語句較多,則寫在單行不易讀,且容易出錯(cuò),這時(shí)就應(yīng)該使用塊形式的If…Then…Else語句。

語法:

        If條件表達(dá)式T hen
            語句塊1
        Else
            語句塊2
        End If

塊形式的If…Then…Else…End If語句與單行形式的If…Then…Else語句功能相同,只是塊形式更便于閱讀和理解。

另外,塊形式中的最后一個(gè)End If關(guān)鍵字不能省略,它是塊形式的結(jié)束標(biāo)志,如果省略會(huì)出現(xiàn)編譯錯(cuò)誤,如圖4.15所示。

圖4.15 省略最后一個(gè)End If出現(xiàn)錯(cuò)誤

實(shí)例位置:光盤文件\MR\ Instance\4\4.6

例4.6】 下面用塊形式判斷用戶輸入的密碼,如果“密碼”文本框中的值為“111”,則提示用戶登錄成功,否則提示用戶“密碼錯(cuò)誤,請重新輸入!”,代碼如下:

        Private Sub Command1_Click()
            If Text1.Text="111"Then                             '判斷"密碼"文本框中的值是否為"111"
                MsgBox"登錄成功!",,"提示"                       '提示登錄成功
            Else
                MsgBox"密碼錯(cuò)誤,請重新輸入!",,"提示"   '        否則提示密碼錯(cuò)誤
            End If
        End Sub

4.3.3 If語句的嵌套

一個(gè)If語句的“語句塊”中可以包括另一個(gè)If語句,這種就是“嵌套”。在Visual Basic 6.0中允許If語句嵌套。

下面語句就是If語句的嵌套形式:

        If條件表達(dá)式1 Then     '                                  最外層If語句
            語句塊1
            If條件表達(dá)式2 Then         '                          內(nèi)層If語句
                語句塊2
            Else
                If條件表達(dá)式4 Then …語句塊3 Else …語句塊4   '   最內(nèi)層If語句
            End If                                                '內(nèi)層If結(jié)束語句
            語句塊5
        Else                                                      '最外層If語句
            語句塊6
            If條件表達(dá)式3 Then      '                              內(nèi)層If語句
                語句塊7
            End If                                                '內(nèi)層If結(jié)束語句
            語句塊8
        End If                                                    '最外層If結(jié)束語句

上面的語句看起來不太直觀,下面用流程圖來表示,如圖4.16所示。

圖4.16 If語句嵌套執(zhí)行流程圖

對于這種結(jié)構(gòu),書寫時(shí)應(yīng)該采用縮進(jìn)形式,這樣可以使程序代碼看上去結(jié)構(gòu)清晰,增強(qiáng)代碼的可讀性,便于日后修改調(diào)試。另外,Else或End If必須與它相關(guān)的If語句相匹配,構(gòu)成一個(gè)完整的If結(jié)構(gòu)語句。

實(shí)例位置:光盤文件\MR\ Instance\4\4.7

例4.7】 下面通過一個(gè)典型的“用戶登錄”實(shí)例,介紹If語句的嵌套在實(shí)際項(xiàng)目開發(fā)中的應(yīng)用,設(shè)計(jì)步驟如下。

新建一個(gè)工程,在Form1窗體中添加Label控件、ComboBox控件和TextBox等控件,如圖4.17所示。

圖4.17 用戶登錄界面設(shè)計(jì)效果

設(shè)置窗體和控件的相關(guān)屬性,設(shè)置結(jié)果如表4.6所示。

表4.6 各窗體和控件的主要設(shè)置

在代碼窗口中編寫如下代碼:

        Option Explicit
        Public intMyTimes As Integer
        Const MaxTimes As Integer = 3
        Private Sub Form_Load()
            intMyTimes=1                                      '給變量賦初值
            '窗體載入時(shí),將用戶添加到ComboBox控件中
          cboUserName.AddItem  "管理員"
          cboUserName.AddItem  "操作員1"
          cboUserName.AddItem  "操作員2"
        End Sub
        Private Sub cmdOK_Click()
            If cboUserName.Text<>""Then                     '如果操作員不為空
                If txtPassword.Text=""Then                  '判斷密碼是否為空
                  MsgBox "請輸入密碼!", , "提示窗口"
                  txtPassword.SetFocus
                  Exit Sub
                End If
                If txtPassword.Text<>"11"Then               '如果密碼不是"11"
                  If intMyTimes>MaxTimes Then                '密碼輸入次數(shù)大于3次,則退出程序
                      MsgBox "您無權(quán)使用該軟件!", , "提示窗口"
                      End
                  Else                                     '否則提示密碼輸入不正確
                      intMyTimes=intMyTimes+1  '每輸入一次錯(cuò)誤的密碼,變量intMyTimes就加1
                      MsgBox "密碼不正確,請重新輸入!", , "提示窗口"
                      txtPassword.SetFocus
                  End If
                Else                                       '否則登錄成功
                  MsgBox "登錄成功!", , "提示窗口"
                End If
            Else:                                          '提示用戶操作員不能為空
                MsgBox "操作員不能為空!", , "提示窗口"
                Exit Sub
            End If
        End Sub
        Private Sub cmdCancel_Click()
            End                                             '退出程序
        End Sub

按【F5】鍵,運(yùn)行工程。選擇操作員,輸入密碼,單擊“確定”按鈕,如圖4.18所示。

圖4.18 操作員為空

具體執(zhí)行過程如下。

① 判斷操作員是否為空,如果操作員為空則提示用戶,如圖4.18所示,否則執(zhí)行②。

② 判斷密碼是否為空,如果密碼為空則提示用戶,如圖4.19所示,否則執(zhí)行③。

圖4.19 密碼為空

③ 判斷密碼輸入是否正確,如果正確則提示“登錄成功”,如圖4.20所示,否則執(zhí)行④。

圖4.20 登錄成功

④ 判斷密碼輸錯(cuò)的次數(shù)是否大于3次,如果大于3次,則提示用戶無權(quán)使用,如圖4.21所示,然后退出程序,否則執(zhí)行⑤。

圖4.21 密碼輸錯(cuò)次數(shù)大于3次

⑤ 每輸入一次錯(cuò)誤的密碼,變量intMyTimes就加1,并提示用戶密碼輸入有誤,如圖4.22所示。

圖4.22 提示用戶密碼有誤

4.3.4 多分支If…Then…ElseIf語句

只有塊形式的寫法,語句格式為:

        If條件表達(dá)式1 Then
            語句塊1
        ElseIf條件表達(dá)式2 Then
            語句塊2
        ElseIf條件表達(dá)式3 Then
            語句塊3
            ……
        ElseIf條件表達(dá)式n Then
            語句塊n
            ……
        [Else
            語句塊n+1]
        End If

該語句的作用是根據(jù)不同的條件確定執(zhí)行哪個(gè)語句塊,其執(zhí)行順序?yàn)闂l件表達(dá)式1、條件表達(dá)式2、……,一旦條件表達(dá)式的值為True,則執(zhí)行該條件下的語句塊。

多分支If…Then…ElseIf語句的執(zhí)行流程如圖4.23所示。

圖4.23 多分支If…Then…ElseIf語句執(zhí)行流程圖

在Visual Basic 6.0中,該語句中的條件表達(dá)式和語句塊的個(gè)數(shù)沒有具體限制。另外,書寫時(shí)應(yīng)注意,關(guān)鍵字ElseIf中間沒有空格。

實(shí)例位置:光盤文件\MR\ Instance\4\4.8

例4.8】 下面通過一個(gè)實(shí)例,介紹多分支If語句的應(yīng)用。將輸入的分?jǐn)?shù)做不同程度的分類,即“優(yōu)”、“良”、“及格”和“不及格”,先判斷分?jǐn)?shù)是否等于100,再判斷是否>=80,是否>=60,……以此類推。程序設(shè)計(jì)步驟如下。

啟動(dòng)Visual Basic 6.0,新建工程,在新建的Form1窗體中添加一個(gè)文本框(Text1)、3個(gè)標(biāo)簽(Label1、Label2和Label3)和一個(gè)命令按鈕(Command1)。

在代碼窗口中編寫如下代碼:

        Private Sub Command1_Click()
            Dim a As Integer      '                                      定義一個(gè)整型變量
            a=Val(Text1.Text)                                            '給變量a賦值
            If a = 100 Then
                lblResult.Caption = "優(yōu)"
            ElseIf a >= 80 Then
                lblResult.Caption = "良"
            ElseIf a >= 60 Then
                lblResult.Caption = "及格"
            Else
                lblResult.Caption = "不及格"
            End If
        End Sub

按【F5】鍵,運(yùn)行工程,在第一個(gè)文本框中輸入一個(gè)整數(shù),單擊“判斷”按鈕,程序會(huì)在第二個(gè)文本框中顯示判斷結(jié)果,如圖4.24所示。

圖4.24 多分支If實(shí)例運(yùn)行效果圖

4.3.5 利用Select Case語句處理多分支控制結(jié)構(gòu)

當(dāng)選擇的情況較多時(shí),使用If語句實(shí)現(xiàn)就會(huì)很麻煩,而且不直觀,而Visual Basic 6.0中提供的Select Case語句可以方便、直觀地處理多分支的控制結(jié)構(gòu)。

語法:

        Select Case測試表達(dá)式
            Case表達(dá)式1
                語句塊1
            Case表達(dá)式2
                語句塊2
                ……
            Case表達(dá)式n
                語句塊n
            [Case Else
                語句塊n+1]
        End Select

Select Case語句的執(zhí)行流程如圖4.25所示。

圖4.25 Select Case語句的執(zhí)行流程圖

執(zhí)行過程說明。

首先計(jì)算“測試表達(dá)式”的值。

然后用這個(gè)值與Case后面表達(dá)式1,表達(dá)式2,……中的值比較。

若有相匹配的,則執(zhí)行Case表達(dá)式后面的語句塊,執(zhí)行完該語句塊則結(jié)束Select Case語句,不再與后面的表達(dá)式比較。

當(dāng)“測試表達(dá)式”的值與后面所有表達(dá)式的值都不相匹配時(shí),若有Case Else語句,則執(zhí)行Case Else后面的語句塊n+1,若沒有Case Else語句,則直接結(jié)束Select Case語句。

在Select Case語句中“表達(dá)式”通常是一個(gè)具體的值(如Case 1),每一個(gè)值確定一個(gè)分支。“表達(dá)式”的值稱為域值,有以下4種方法可以設(shè)定該值。

(1)表達(dá)式列表為表達(dá)式,例如:X+100。

        Case X+100                                         '表達(dá)式列表為表達(dá)式

(2)一組值(用逗號隔開),例如:

        Case 1,4,7                                          '表示條件在1、4、7范圍內(nèi)取值

(3)表達(dá)式1To表達(dá)式2,例如:

        Case 50 To 60                                       '表示條件取值范圍為50~60

(4)Is關(guān)系表達(dá)式,例如:

        Case Is<4                                           '表示條件在小于4的范圍內(nèi)取值

實(shí)例位置:光盤文件\MR\ Instance\4\4.9

例4.9】 將4.3.4節(jié)中的多分支If語句的應(yīng)用實(shí)例改寫為Select Case語句形式,代碼如下:

        Private Sub Command1_Click()
            Dim a As Integer    '                           定義一個(gè)整型變量
            a=Val(Text1.Text)                               '給變量a賦值
          Select  Case a
            Case Is = 100
                lblResult.Caption = "優(yōu)"
            Case Is >= 80
                lblResult.Caption = "良"
            Case Is >= 60
                lblResult.Caption = "及格"
            Case Else
                lblResult.Caption = "不及格"
            End Select
        End Sub

比較二者之間的區(qū)別,可以看出,在多分支選擇的情況下,使用Select Case語句,結(jié)構(gòu)更清晰。當(dāng)然,若只有兩個(gè)分支或分支數(shù)很少的情況下,直接使用If…Then語句更好一些。

4.3.6 使用IIf函數(shù)簡化程序

在使用Visual Basic 6.0設(shè)計(jì)程序時(shí),往往會(huì)遇到一個(gè)變量或?qū)傩耘c另一個(gè)變量或?qū)傩赃M(jìn)行比較的情況,根據(jù)這個(gè)比較的條件(大于、小于、等于、大于等于、小于等于等),將之前的變量或?qū)傩灾匦沦x予一個(gè)新值。如果使用If…Then…Else等語句實(shí)現(xiàn),程序的代碼就比較煩瑣,而使用IIf函數(shù)就比較簡單了。

IIf函數(shù)的作用是根據(jù)表達(dá)式的值,返回兩部分中其中一個(gè)的值或表達(dá)式。

語法:

        IIf(<表達(dá)式>,<值或表達(dá)式1>, <值或表達(dá)式2>)

參數(shù)說明:

表達(dá)式:必要參數(shù)。用來判斷值的表達(dá)式。

值或表達(dá)式1:必要參數(shù)。如果表達(dá)式為True,則返回這個(gè)值或表達(dá)式。

值或表達(dá)式2:必要參數(shù)。如果表達(dá)式為False,則返回這個(gè)值或表達(dá)式。

學(xué)習(xí)手冊

注意 如果表達(dá)式1與值或表達(dá)式2中任何一個(gè)在計(jì)算時(shí)發(fā)生錯(cuò)誤,那么程序就會(huì)發(fā)生錯(cuò)誤。

實(shí)例位置:光盤文件\MR\ Instance\4\4.10

例4.10】 將4.3.1節(jié)中的實(shí)例,即如果“密碼”文本框中的值為“111”,則提示用戶輸入正確,否則提示用戶“密碼不正確,請重新輸入!”,分別使用If…Then…Else語句與IIf函數(shù)實(shí)現(xiàn),比較它們用法的區(qū)別。

1.使用If…Then…Else語句實(shí)現(xiàn)

        Private Sub Command1_Click()
            If Text1.text="111"Then     '                   判斷“密碼”文本框中的值是否為“111”
      MsgBox"輸入正確!",,"提示"                            '是“111”則提示用戶輸入正確
            Else
      MsgBox"密碼不正確,請重新輸入!",,"提示"              '否則提示用戶密碼不正確
            End If
        End Sub

2.使用IIf函數(shù)實(shí)現(xiàn)

        Private Sub Command1_Click()
            Dim str As String                               '定義字符型變量
            str = IIf(Text1.Text = "111", "輸入正確!", "密碼不正確,請重新輸入!")
            MsgBox str, , "提示"
        End Sub

4.3.7 情景應(yīng)用——十進(jìn)制轉(zhuǎn)換為其他進(jìn)制

開發(fā)項(xiàng)目時(shí),經(jīng)常會(huì)遇到進(jìn)制間的相互轉(zhuǎn)換。下面通過一個(gè)實(shí)例講解如何實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)換為其他進(jìn)制功能。

實(shí)例位置:光盤文件\MR\ Instance\4\4.11

例4.11】 這里介紹的是將一個(gè)十進(jìn)制整數(shù)轉(zhuǎn)換成二至十六任意進(jìn)制的數(shù)值,進(jìn)制轉(zhuǎn)換的算法思想是:將十進(jìn)制正整數(shù)n不斷除進(jìn)制數(shù)r取余數(shù),直到商為零,將得到的值反序連接,即最后得到的余數(shù)在最高位。本例實(shí)現(xiàn)將十進(jìn)制整數(shù)轉(zhuǎn)換成二至十六任意進(jìn)制的字符串。程序設(shè)計(jì)步驟如下。

新建一個(gè)標(biāo)準(zhǔn)工程。

在工程中添加一個(gè)窗體,窗體的名稱使用其默認(rèn)名稱,Caption屬性設(shè)置為“進(jìn)制轉(zhuǎn)換”,StartUpPosition屬性設(shè)置為“2-屏幕中心”。

在窗體上添加4個(gè)Label控件,前兩個(gè)Label控件用于顯示提示信息,后兩個(gè)Label控件用于顯示最大公約數(shù)和最小公倍數(shù)的值。

在窗體上添加兩個(gè)TextBox控件,名稱使用默認(rèn)名稱,用于輸入兩個(gè)自然數(shù);在窗體上添加一個(gè)CommandButton控件,Caption屬性設(shè)置為“計(jì)算”,用于執(zhí)行計(jì)算命令。

程序的運(yùn)行代碼如下。

        Private Sub Command1_Click()
            If Text1.Text = "" Or Text2.Text = "" Then
                MsgBox "請輸入正確數(shù)值!", vbInformation, "信息提示"
                Exit Sub
            End If
          Te xt3.Text=TrDec(Text1.Text,Text2.Text)               '獲取轉(zhuǎn)換后的數(shù)值
        End Sub
        Private Function TrDec(idec As Integer, ibase As Integer) As String
          Dim  strDecR$,iDecR%
            strDecR = ""
          Do  While idec<>0
            iDecR   =idec Mod ibase                             '用十進(jìn)制數(shù)除以轉(zhuǎn)換進(jìn)制數(shù)取余數(shù)
            If   iDecR>=10 Then
                  strDecR=Chr$(65+iDecR-10)&strDecR   '
                Else
                  strDecR = iDecR & strDecR
                End If
            idec   =idec\ibase
          Loop
            TrDec = strDecR
        End Function

程序的運(yùn)行結(jié)果如圖4.26所示。

圖4.26 進(jìn)制轉(zhuǎn)換程序運(yùn)行界面

4.4 學(xué)習(xí)使用循環(huán)結(jié)構(gòu)

專題講座:光盤文件\MR\Video\4\循環(huán)結(jié)構(gòu).exe

視頻速遞:詳細(xì)講解For語句、Do語句、Do…While語句用法

當(dāng)程序中有重復(fù)的工作要做時(shí),就需要用到循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)是指程序重復(fù)執(zhí)行循環(huán)語句中一行或多行代碼。例如,在窗體上輸出10次1,每個(gè)1單獨(dú)一行。如果使用順序結(jié)構(gòu)實(shí)現(xiàn),就需要書寫10次“Print 1”這樣的代碼,而使用循環(huán)語句則簡單多了,使用For…Next語句實(shí)現(xiàn)的代碼如下:

        For i = 1 To 11
            Print 1
        Next i

在上述代碼中i是一個(gè)變量,用來控制循環(huán)次數(shù)。

Visual Basic 6.0提供了3種循環(huán)語句來實(shí)現(xiàn)循環(huán)結(jié)構(gòu):For…Next、Do…Loop和While…Wend,下面分別進(jìn)行介紹。

4.4.1 For…Next循環(huán)語句

當(dāng)循環(huán)次數(shù)確定時(shí),可以使用For…Next語句。

語法:

        For循環(huán)變量= 初值To終值[S tep步長]
            循環(huán)體
            [Exit For]
            循環(huán)體
        Next循環(huán)變量

For…Next語句執(zhí)行過程如圖4.27所示。

圖4.27 For語句的執(zhí)行流程圖

(1)如果不指定“步長”,則系統(tǒng)默認(rèn)步長為1;當(dāng)“初值<終值”時(shí),“步長”為0;當(dāng)“初值>終值”時(shí),“步長”應(yīng)小于0。

(2)Exit For用來退出循環(huán),執(zhí)行Next后面的語句。

(3)如果出現(xiàn)循環(huán)變量的值總是不超出終值的情況,則會(huì)產(chǎn)生死循環(huán)。此時(shí),可按【Ctrl+Break】組合鍵,強(qiáng)制終止程序的運(yùn)行。

(4)循環(huán)次數(shù)N=Int((終值-初值)/步長+1)。

(5)Next后面的循環(huán)變量名必須與For語句中的循環(huán)變量名相同,并且可以省略。

實(shí)例位置:光盤文件\MR\ Instance\4\4.12

例4.12】 在ComboBox下拉列表控件中添加1~12個(gè)月,代碼如下:

        Private Sub Form_Load()
            Dim i%                              '定義一個(gè)整型變量
            For i = 1 To 12
            Combo1.AddItem   i&"月"
            Next i
        End Sub

按【F5】鍵,運(yùn)行工程,效果如圖4.28所示。

圖4.28 For語句的簡單應(yīng)用

如果只顯示2、4、6等偶數(shù)月份,則應(yīng)將上述代碼改為:

        Private Sub Form_Load()
          Dim  i%
            For i = 1 To 12 Step 2
            Combo1.AddItem   i+1&"月
            Next i
        End Sub

如果只顯示1、3、5等奇數(shù)月份,則只需要將上述代碼中的Combo1.AddItem i + 1 & "月"改為Combo1.AddItem i & "月"。

另外,F(xiàn)or循環(huán)中的計(jì)數(shù)還可以是倒數(shù),只要把間隔值設(shè)為負(fù)值(即間隔值小于0),而令初始值大于終止值就可以了。這時(shí),循環(huán)的停止條件將會(huì)變成當(dāng)計(jì)數(shù)值小于終止值時(shí)停止。

例如,在窗體上輸出10~1的整數(shù),代碼如下:

        Private Sub Form_Click()
          Dim  i%
            For i = 10 To 1 Step -1
                Print i
            Next i
        End Sub

4.4.2 For Each…Next循環(huán)語句

For Each…Next語句用于依照一個(gè)數(shù)組或集合中的每個(gè)元素,循環(huán)執(zhí)行一組語句。

語法:

        For Each數(shù)組或集合中元素In數(shù)組或集合
            循環(huán)體
            [Exit For]
            循環(huán)體
        Next數(shù)組或集合中元素

學(xué)習(xí)手冊

說明 ①“數(shù)組或集合中元素”:必要參數(shù),是用來遍歷集合或數(shù)組中所有元素的變量。對于集合,可能是一個(gè)Variant類型變量、一個(gè)通用對象變量或任何特殊對象變量;對于數(shù)組,這個(gè)變量只能是一個(gè)Variant類型變量。

②“數(shù)組或集合”:必要參數(shù),對象集合或數(shù)組的名稱(不包括用戶定義類型的數(shù)組)。

③ 循環(huán)體:可選參數(shù),循環(huán)執(zhí)行的一條或多條語句。

實(shí)例位置:光盤文件\MR\ Instance\4\4.13

例4.13】 單擊窗體時(shí)使用For Each…Next語句列出窗體上所有控件名稱,代碼如下:

        Private Sub Form_Click()
          Dim  Myctl As Control
            For Each Myctl In Me.Controls      '                       遍歷窗體中的控件
                Print Myctl.Name
            Next Myctl
        End Sub

按【F5】鍵,運(yùn)行工程,效果如圖4.29所示。

圖4.29 在窗體中顯示所有控件名稱

4.4.3 Do…Loop循環(huán)語句

對于那些循環(huán)次數(shù)難以確定,但控制循環(huán)的條件或循環(huán)結(jié)束的條件已知的情況下,常常使用Do…Loop語句。Do…Loop語句是最常用、最有效、最靈活的一種循環(huán)結(jié)構(gòu),它有以下4種不同的形式。

1.Do While…Loop

使用While關(guān)鍵字的Do…Loop循環(huán)稱為“當(dāng)型循環(huán)”,是指當(dāng)循環(huán)條件的值為True時(shí)執(zhí)行循環(huán)。

語法:

        Do While <循環(huán)條件>
            循環(huán)體1
            <Exit Do>
            循環(huán)體2
        Loop

該語句的執(zhí)行流程如圖4.30所示。

圖4.30 Do While…Loop語句執(zhí)行流程圖

從流程圖可以看出,Do While…Loop語句的執(zhí)行過程如下。

<循環(huán)條件>定義了循環(huán)的條件,是邏輯表達(dá)式,或者能轉(zhuǎn)換成邏輯值的表達(dá)式。當(dāng)程序執(zhí)行到Do While…Loop語句時(shí),首先判斷While后面的<循環(huán)條件>,如果其值為True,則由上到下執(zhí)行“循環(huán)體”中的語句,當(dāng)執(zhí)行到Loop關(guān)鍵字時(shí),返回到循環(huán)開始處再次判斷While后面的<循環(huán)條件>是否為True。如果為True,則繼續(xù)執(zhí)行循環(huán)體中的語句,否則跳出循環(huán),執(zhí)行Loop后面的語句。

實(shí)例位置:光盤文件\MR\ Instance\4\4.14

例4.14】 下面使用Do While…Loop語句計(jì)算1+2+3+…+50的值,代碼如下:

        Private Sub Form_Click()
            Dim i%,mySum%                                '定義整型變量
            Do While i < 50
                i=i+1                                    '每循環(huán)一次,變量i就加1
                mySum=mySum+i                            '每循環(huán)一次,變量mySum就加變量i
            Loop
            Print mySum                                  '輸出計(jì)算結(jié)果
        End Sub

結(jié)果為:1225

2.Do…Loop While

這是“當(dāng)型循環(huán)”的第二種形式,它與第一種形式的區(qū)別在于While關(guān)鍵字與<循環(huán)條件>在Loop關(guān)鍵字后面。

語法:

        Do
            循環(huán)體1
            <Exit Do>
            循環(huán)體2
        Loop While <循環(huán)條件>

該語句的執(zhí)行流程如圖4.31所示。

圖4.31 Do…Loop While語句執(zhí)行流程圖

從流程圖可以看出,Do…Loop While語句的執(zhí)行過程為:

當(dāng)程序執(zhí)行Do…Loop While語句時(shí),首先執(zhí)行一次循環(huán)體,然后判斷While后面的<循環(huán)條件>,如果其值為True,則返回到循環(huán)開始處再次執(zhí)行循環(huán)體,否則跳出循環(huán),執(zhí)行Loop后面的語句。

實(shí)例位置:光盤文件\MR\ Instance\4\4.15

例4.15】 下面使用Do…Loop While語句計(jì)算1+2+3+…+myVal的值,myVal值通過InputBox輸入對話框輸入,代碼如下:

        Private Sub Form_Click()
            Dim i%,mySum%,myVal%    '                         定義整型變量
          my Val=Val(InputBox("請輸入一個(gè)數(shù):"))    '         得到輸入的值
            Do While i < myVal
              i=i+1                                           '每循環(huán)一次,變量i就加1
            my   Sum=mySum+i                                  '每循環(huán)一次,變量mySum就加變量i
            Loop
            Print mySum                                       '輸出計(jì)算結(jié)果
        End Sub

上述代碼中,如果myVal的值大于等于256時(shí),程序會(huì)出現(xiàn)“溢出錯(cuò)誤”,因?yàn)榇a中變量myVal定義的是整型,整型的有效范圍是?32768~32768,因此出現(xiàn)錯(cuò)誤。

解決辦法有兩種:一種是將變量myVal定義為長整型,這樣輸入值的有效范圍會(huì)大些;另一種就是在代碼i = i + 1后面加上代碼If myVal >= 256 Then Exit Do,判斷如果變量myVal的值大于等于256,則使用Exit Do語句退出循環(huán)。

3.Do Until…Loop

使用Until關(guān)鍵字的Do…Loop循環(huán)被稱為“直到型循環(huán)”。

語法:

        Do Until <循環(huán)條件>
            循環(huán)體1
            <Exit Do>
            循環(huán)體2
        Loop

該語句的執(zhí)行流程如圖4.32所示。

圖4.32 Do Until…Loop語句執(zhí)行流程圖

從流程圖可以看出,用Until關(guān)鍵字代替While關(guān)鍵字的區(qū)別在于,當(dāng)循環(huán)條件的值為False時(shí)才進(jìn)行循環(huán),否則退出循環(huán)。

實(shí)例位置:光盤文件\MR\ Instance\4\4.16

例4.16】 下面使用Do Until…Loop語句計(jì)算階乘n!,n值通過InputBox輸入對話框輸入,代碼如下:

        Private Sub Form_Click()
            Dim i%,n%,mySum&                            '定義整型和長整型變量
          n  =Val(InputBox("請輸入一個(gè)數(shù):"))    '      得到輸入的值
            mySum=1                                     '給變量mySum賦初值
            Do Until i = n
                i=i+1                                   '每循環(huán)一次,變量i就加1
                mySum=mySum*i                           '每循環(huán)一次,變量mySum就乘以變量i
            If   n>12 Then Exit Do                      '如果輸入數(shù)大于12,就退出循環(huán)
          Loop
            Print mySum                                 '輸出計(jì)算結(jié)果
        End Sub

4.Do…Loop Until

Do…Loop Until語句是“直到型循環(huán)”的第二種形式。

語法:

        Do
            循環(huán)體1
            <Exit Do>
            循環(huán)體2
        Loop Until <循環(huán)條件>

該語句的執(zhí)行流程如圖4.33所示。

圖4.33 Do…Loop Until流程圖

從流程圖可以看出,Do…Loop Until語句的執(zhí)行過程為:

當(dāng)程序執(zhí)行Do…Loop Until語句時(shí),首先執(zhí)行一次循環(huán)體,然后判斷Until后面的<循環(huán)條件>,如果其值為False,則返回到循環(huán)開始處再次執(zhí)行循環(huán)體;否則跳出循環(huán),執(zhí)行Loop后面的語句。

學(xué)習(xí)手冊

注意 因?yàn)楦↑c(diǎn)數(shù)和精度問題,兩個(gè)看似相等的值實(shí)際上可能不精確相等,所以,在構(gòu)造Do…Loop循環(huán)條件時(shí)要注意,如果測試的是浮點(diǎn)類型的值,要避免使用相等運(yùn)算符“=”,應(yīng)盡量使用運(yùn)算符“>”或“<”進(jìn)行比較。

4.4.4 掌握While…Wend循環(huán)語句

While…Wend語句只要指定的條件為True,就會(huì)重復(fù)執(zhí)行一行或多行語句。可以嵌套使用,但要注意每個(gè)Wend語句都與前面最近的While語句匹配。

語法:

        While <循環(huán)條件>
            循環(huán)體
        Wend

當(dāng)循環(huán)條件的值為True時(shí),執(zhí)行循環(huán)體,否則退出循環(huán),執(zhí)行Wend后面的語句。While…Wend語句是早期Basic語言的循環(huán)語句,它的功能已經(jīng)完全被Do…Loop語句包括,所以建議實(shí)際開發(fā)中盡量不用它。

4.4.5 在應(yīng)用程序中使用多重循環(huán)

在一個(gè)循環(huán)體內(nèi)又包含了循環(huán)結(jié)構(gòu)稱為多重循環(huán)或循環(huán)嵌套。循環(huán)嵌套對For…Next語句、Do…Loop語句均適用。在Visual Basic 6.0中,對嵌套的層數(shù)沒有限制,可以嵌套任意多層。嵌套一層稱為二重循環(huán),嵌套兩層稱為三重循環(huán)。

學(xué)習(xí)手冊

說明 ① 外循環(huán)必須完全包含內(nèi)循環(huán),不可以出現(xiàn)交叉現(xiàn)象。

② 內(nèi)循環(huán)與外循環(huán)的循環(huán)變量名稱不能相同。

下面介紹幾種合法且常用的二重循環(huán)形式,如表4.7所示。

表4.7 合法的循環(huán)嵌套形式

實(shí)例位置:光盤文件\MR\ Instance\4\4.17

例4.17】 將100元錢換成零錢(5元、10元、20元中的任意多個(gè)面值)有很多種換法。

下面通過一個(gè)簡單的例子演示兩重For…Next循環(huán),代碼如下。多重循環(huán)的道理相同:

          第一種形式:
          Private Sub Form_Click()
          Dim i%,j%    '              定義整型變量
          For i=1 To 3                '外層循環(huán)
            Print"i=";i               '輸出變量i
            For j=1 To 3              '內(nèi)層循環(huán)
              Print Tab;"j=";j        '輸出變量j
            Next j
          Nex t i
          End Sub
           第二種形式:
         Private Sub Form_Click()
         Dim i%,j%    '                定義整型變量
         For i=1 To 3                  '外層循環(huán)
            For j=1 To 3               '內(nèi)層循環(huán)
           P  rint"i=";i;"j=";j        '輸出變量i和j
           Next j
           Print                       '輸出空行
        Nex t i
       End Sub

上述兩段程序只是輸出形式不同(即輸出語句上有些區(qū)別),運(yùn)行結(jié)果分別如圖4.34和圖4.35所示。從這兩段程序的執(zhí)行情況可以看出,外層循環(huán)執(zhí)行一次(如i=1),內(nèi)層循環(huán)要從頭循環(huán)一遍(如j=1、j=2和j=3)。

圖4.34 多重循環(huán)示例(1)

圖4.35 多重循環(huán)示例(2)

4.4.6 學(xué)會(huì)選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)的嵌套

在Visual Basic 6.0中,所有的控制結(jié)構(gòu)(包括If語句、Select Case語句、Do…Loop語句、For…Next語句等)都可以嵌套使用。

實(shí)例位置:光盤文件\MR\ Instance\4\4.18

例4.18】 將100元錢換成零錢(5元、10元、20元中的任意多個(gè)面值)有很多種換法。組成100元的零錢中,最多有20個(gè)5元、10個(gè)10元和5個(gè)20元。判斷所有的組合中,總和正好是100元的,代碼如下。這類方法稱為“窮舉法”,也稱為“列舉法”。

        Private Sub Form_Click()
            Dim x%,y%,z%,n%                                                 '定義整型變量
            Print"5元個(gè)數(shù)","10元個(gè)數(shù)","20元個(gè)數(shù)"                            '輸出標(biāo)題
            For x=0 To 20                                                   '5元的個(gè)數(shù)
                For y=0 To 10                                               '10元的個(gè)數(shù)
                  For z=0 To 5                                              '20元的個(gè)數(shù)
                If      5*x+y*10+z*20=100 Then                              '滿足條件
                      n=n+1                                                 '滿足條件的組合數(shù)
                      Print x,y,z                                           '輸出結(jié)果
                      End If
                  Next z
                Next y
            Next x
            Print"共有"&n&"種換法"                                          '輸出滿足條件的組合數(shù)
        End Sub

上述程序使用了三重For…Next循環(huán),循環(huán)計(jì)數(shù)器變量分別為x、y、z,代表5元、10元和20元的個(gè)數(shù),20個(gè)5元、10個(gè)10元和5個(gè)20元之內(nèi)共有21×11×6=1386種組合,內(nèi)嵌If…Then判斷總和正好等于100元的只有36種,如圖4.36所示。

圖4.36 兌換零錢

4.4.7 情景應(yīng)用——起泡排序算法的實(shí)現(xiàn)

起泡排序(BubbleSort)就是依次比較相鄰兩個(gè)元素,將小數(shù)放在前面,大數(shù)放在后面。即數(shù)列中的第1個(gè)元素與第2個(gè)元素進(jìn)行比較,將小數(shù)放前,大數(shù)放后,然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后,以此類推,直至比較最后兩個(gè)數(shù)。

實(shí)例位置:光盤文件\MR\ Instance\4\4.19

例4.19】 創(chuàng)建一個(gè)Visual Basic應(yīng)用程序,在一個(gè)文本框中輸入一組數(shù)字,利用起泡排序算法,在另一個(gè)文本框中按照從小到大的順序輸出,要求寫出排序的整個(gè)過程。

程序的設(shè)計(jì)過程如下:

在工程中新建一個(gè)窗體,窗體的名稱使用其默認(rèn)名稱Form1,窗體的Caption屬性設(shè)置為“起泡插入排序”,StartUpPosition屬性設(shè)置為“2-屏幕中心”。

在窗體上添加兩個(gè)Label控件,名稱均使用其默認(rèn)名稱,并分別設(shè)置其Caption屬性為“請輸入數(shù)組:”和“按照從小到大的順序排列:”。

在窗體上添加兩個(gè)TextBox控件,名稱均使用其默認(rèn)名稱,BoderStyle屬性均設(shè)置為“0-None”,MultiLine屬性均設(shè)置為True,Text2控件的ScrollBars屬性設(shè)置為“2-Vertical”。

在窗體上添加一個(gè)CommandButton控件,名稱使用其默認(rèn)名稱Command1,Caption屬性設(shè)置為“排列”。

程序代碼如下:

        Private Sub Command1_Click()
            Call BubbleSort      '                                  調(diào)用過程
        End Sub
        Private Sub BubbleSort()
            Dim i,j,h As Integer      '                              定義整型變量
            Dim r()As String     '                                   定義字符串變量數(shù)組
            Dim k As String                                          '定義字符串變量
            r()=Split(Text1.Text,",")       '                        給數(shù)組賦值
          Te xt2.Text=Text2.Text&"[初始關(guān)鍵字]:"
            For t=0 To UBound(r)    '                                循環(huán)語句
                Text2.Text=Text2.Text&r(t)&"  "                     '顯示初始關(guān)鍵字
            Next t
            Text2.Text=Text2.Text&vbCrLf&vbCrLf                     '文本框內(nèi)部換行
            For i=0 To UBound(r)–1                                 '外循環(huán)
                For j=0 To UBound(r)-i–1                           '內(nèi)循環(huán)
              If     Val(r(j))>Val(r(j+1))Then      '判斷條件
                      k=r(j)                        '賦值語句
                      r(j)=r(j+1)                   '賦值語句
                      r(j+1)=k                      '賦值語句
                  End If
                Next j
                '顯示第幾趟排序結(jié)果
                Text2.Text=Text2.Text&i+1&" 趟排序結(jié)果:"
            For   t=0 To UBound(r)
                  Text2.Text=Text2.Text&r(t)&"  "
                Next t
                Text2.Text=Text2.Text&vbCrLf  '文本框內(nèi)部換行
            Next i
        End Sub

程序的運(yùn)行結(jié)果如圖4.37所示。

圖4.37 起泡排序算法運(yùn)行結(jié)果

4.5 了解其他輔助控制語句

專題講座:光盤文件\MR\Video\4\其他輔助控制語句.exe

視頻速遞:詳細(xì)講解Goto語句、With…End With、Exit和End語句用法

本節(jié)主要介紹其他輔助控制語句,包括跳轉(zhuǎn)語句GoTo、復(fù)用語句With…End With、退出語句Exit和結(jié)束語句End。

4.5.1 跳轉(zhuǎn)語句GoTo

GoTo語句使程序無條件跳轉(zhuǎn)到過程中指定的語句行執(zhí)行。

語法:

        GoTo<行號|行標(biāo)簽>

學(xué)習(xí)手冊

說明 ① GoTo語句只能跳轉(zhuǎn)到它所在過程中的行。

② 行標(biāo)簽是任何字符的組合,不區(qū)分大小寫,必須以字母開頭,以冒號“:”結(jié)尾,且必須放在行的開始位置。

③ 行號是一個(gè)數(shù)字序列,且在使用行號的過程中該序列是唯一的。行號必須放在行的開始位置。

④ 太多的GoTo語句,會(huì)使程序代碼不容易閱讀及調(diào)試。所以應(yīng)盡可能少用或不用GoTo語句。

例如,在程序中使用GoTo語句,代碼如下:

        Private Sub Command1_Click()
          GoTo l1
        End
        Ex it Sub
        l1:
          Print "沒有退出"
        End Sub

當(dāng)程序執(zhí)行到GoTo語句時(shí),程序跳轉(zhuǎn)到l1標(biāo)簽下的語句去執(zhí)行,而不執(zhí)行End語句結(jié)束程序。

學(xué)習(xí)手冊

說明 Exit Sub的作用是立即退出Command1_Click的Sub過程。

4.5.2 復(fù)用語句With…End With

With語句是在一個(gè)定制的對象或一個(gè)用戶定義的類型上執(zhí)行的一系列語句。

語法:

        With <對象>
            [<語句組>]
        End With

參數(shù)說明:

對象:必要參數(shù)。一個(gè)對象或用戶自定義類型的名稱。

語句組:可選參數(shù)。要在對象上執(zhí)行的一條或多條語句。

With語句可以嵌套使用,但是外層With語句的對象或用戶自定義類型會(huì)在內(nèi)層的With語句中被屏蔽,所以必須在內(nèi)層的With語句中使用完整的對象或用戶自定義類型名稱來引用在外層的With語句中的對象或用戶自定義類型。

實(shí)例位置:光盤文件\MR\ Instance\4\4.20

例4.20】 嵌套使用With語句,在窗體Load事件中設(shè)置按鈕與窗體的部分屬性,代碼如下:

        Private Sub Form_Load()
            With Form1                                           '外層With語句
            .Height   =10000
            .Width   =10000
            With   Command1                                    '內(nèi)層With語句
              .Height     =2000
              .Width     =2000
                  .Caption = "按鈕高度與寬度都是2000"
                  Form1.Caption = "窗體高度與寬度都是10000"
                End With
            End With
        End Sub

在外層嵌套With語句中直接設(shè)置Form1窗體的高度和寬度,在內(nèi)層嵌套With語句中直接設(shè)置Command1按鈕的高度、寬度和顯示的標(biāo)題。在設(shè)置Form1的顯示標(biāo)題時(shí)需要寫入窗體的名稱。

4.5.3 退出語句Exit

Exit語句用來退出Do…Loop、For…Next、Function、Sub或Property代碼塊。Exit語句包括了以下幾種類型。

        Exit Do
        Exit For
        Exit Function
        Exit Property
        Exit Sub

Exit語句中各類型的作用如表4.8所示。

表4.8 Exit語句中各類型的作用

例如,在For…Next循環(huán)語句中,當(dāng)滿足某種條件時(shí)退出循環(huán),就可以通過使用Exit For語句實(shí)現(xiàn),程序代碼如下:

        Dim I As Long
        For I = 1 To 100
            If I=50 Then Exit For                            '當(dāng)I=50時(shí)退出循環(huán)
        Next I
        Debug.Print I 'I  的值為50

4.5.4 結(jié)束語句End

End語句用來結(jié)束一個(gè)過程或塊。End語句與Exit語句容易混淆,Exit語句是用來退出Do…Loop、For…Next、Function、Sub或Property的代碼塊,并不說明一個(gè)結(jié)構(gòu)的終止;而End語句是終止一個(gè)結(jié)構(gòu)。

語法:

        End
        End Function
        End If
        End Property
        End Select
        End Sub
        End Type
        End With

End語句中各類型的作用如表4.9所示。

表4.9 End語句中各類型的作用

學(xué)習(xí)手冊

注意 在使用End語句關(guān)閉程序時(shí),Visual Basic 6.0不調(diào)用Unload、QueryUnload、Terminate事件或任何其他代碼,而是直接終止程序(代碼)執(zhí)行。

實(shí)例位置:光盤文件\MR\ Instance\4\4.21

例4.21】 下面分別使用End語句與Unload語句關(guān)閉程序和窗體。在使用End語句關(guān)閉程序時(shí),窗體不發(fā)生Unload事件而直接被關(guān)閉。在使用Unload語句關(guān)閉窗體時(shí),窗體發(fā)生Unload事件,調(diào)用對話框選擇是否退出程序。

程序代碼如下:

        Private Sub Command1_Click()
            End                                         '退出程序
        End Sub
        Private Sub Command2_Click()
            Unload Form1      '                           卸載窗體
        End Sub
        Private Sub Form_Unload(Cancel As Integer)
            If MsgBox("是否退出?", Visual Basic 6.0YesNo, "提示") = Visual Basic 6.0No Then Cancel = 1
        End Sub

學(xué)習(xí)手冊

說明 窗體Unload事件中的Cancel參數(shù)是一個(gè)整數(shù),決定了窗體是否被關(guān)閉。只要Cancel參數(shù)值不為0,窗體就不會(huì)被關(guān)閉。

4.6 實(shí)戰(zhàn)練習(xí)

4.6.1 求100以內(nèi)的素?cái)?shù)

難度系數(shù):★★★

題目描述

求100以內(nèi)的素?cái)?shù)。本例通過使用循環(huán)結(jié)構(gòu)語句實(shí)現(xiàn)素?cái)?shù)算法,程序運(yùn)行以后,單擊窗體將100以內(nèi)的所有素?cái)?shù)顯示在窗體上。

本例要實(shí)現(xiàn)的就是在程序運(yùn)行時(shí),用鼠標(biāo)單擊窗體,在窗體上輸出100以內(nèi)的素?cái)?shù),程序的運(yùn)行結(jié)果如圖4.38所示。

圖4.38 求100以內(nèi)的素?cái)?shù)

技術(shù)指導(dǎo)

素?cái)?shù)又稱質(zhì)數(shù)。指在一個(gè)大于1的自然數(shù)中,除了1和他自身以外,不能被其他自然數(shù)整除的數(shù)。換句話說,只有兩個(gè)正因數(shù)(1和其本身)的自然數(shù)即為素?cái)?shù)。素?cái)?shù)在數(shù)論中占有很重要的地位。

緊急救援

如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網(wǎng)址獲取本例題的源碼和技術(shù)文檔。

救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/4.6.1

4.6.2 用Do While語句求最大公約數(shù)和最小公倍數(shù)

難度系數(shù):★★★

題目描述

使用While關(guān)鍵字的Do…Loop循環(huán)稱為“當(dāng)型循環(huán)”,是指當(dāng)循環(huán)條件的值為True時(shí)執(zhí)行循環(huán)。本練習(xí)要求開發(fā)一個(gè)程序,使用Do while語句計(jì)算兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù),效果如圖4.39所示。

圖4.39 計(jì)算兩個(gè)自然數(shù)的最大公約數(shù)和最小公倍數(shù)

技術(shù)指導(dǎo)

本例主要通過使用最大公約數(shù)和最小公倍數(shù)的算法來實(shí)現(xiàn)。下面介紹實(shí)現(xiàn)計(jì)算兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)的算法。

(1)已知兩個(gè)自然數(shù)m和n,使得m>n。

(2)m除以n得余數(shù)r。

(3)判斷,若r=0,則n是最大公約數(shù),算法結(jié)束;否則執(zhí)行(4)。

(4)將n值賦給m,r值賦給n,重復(fù)執(zhí)行(2)。

最大公約數(shù)算法流程圖如圖4.40所示。

圖4.40 最大公約數(shù)算法流程圖

這里使用Do While…Loop語句判斷循環(huán)條件余數(shù)r是否為零,不滿足條件繼續(xù)循環(huán)。

最小公倍數(shù)為兩個(gè)自然數(shù)的乘積除以這兩個(gè)數(shù)的最大公約數(shù),即:最小公倍數(shù)=兩個(gè)數(shù)之積/最大公約數(shù)。

緊急救援

如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網(wǎng)址獲取本例題的源碼和技術(shù)文檔。

救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/4.6.2

4.6.3 簡單的加密解密算法

難度系數(shù):★★★★

題目描述

將26個(gè)英文字母進(jìn)行加密解密,加密后的字母為該字母向后推五位(即A加密后為F,B加密后為G,……,Z加密后為E)。本練習(xí)要求開發(fā)一個(gè)程序,這里利用For…Next語句分別取出文本框中的每個(gè)字母進(jìn)行加密,結(jié)果如圖4.41所示。

圖4.41 加密解密算法運(yùn)行結(jié)果

技術(shù)指導(dǎo)

簡單的加密的思想是:將要加密的而每個(gè)字母加上或減去一個(gè)序數(shù),例如,加上序數(shù)5,這時(shí)“A”→“F”,“a”→“f”,“B”→“G”,“Y”→“D”,“Z”→“E”。這里要注意對加密后字符范圍超出英文字母范圍時(shí)的判斷。

程序中用到了字母的ASCII碼值,通過使用ASC函數(shù)和CHR函數(shù)進(jìn)行ASCII碼值和字母的相互轉(zhuǎn)換。

緊急救援

如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網(wǎng)址獲取本例題的源碼和技術(shù)文檔。

救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/4.6.3

4.7 本章小結(jié)

通過本章的學(xué)習(xí),讀者可能發(fā)現(xiàn)了看似簡單的幾個(gè)控制語句能夠構(gòu)筑出靈活多變的程序流程,因此學(xué)好控制語句是掌握好一門語言的基礎(chǔ)。

最后在本章即將結(jié)束的時(shí)候,筆者對初學(xué)者提出幾點(diǎn)要求。

(1)結(jié)構(gòu)必須有入口和出口,即結(jié)構(gòu)的起始語句和終止語句。

(2)結(jié)構(gòu)的控制功能由結(jié)構(gòu)本身決定,控制的依據(jù)是條件,控制機(jī)理是當(dāng)前變量的值與預(yù)先設(shè)定的臨界值進(jìn)行比較,得到一個(gè)邏輯值“真”或“假”,然后根據(jù)這一邏輯值選擇程序的執(zhí)行流程。

(3)在程序中僅有結(jié)構(gòu)語句沒有任何意義,結(jié)構(gòu)中必須“裝”進(jìn)內(nèi)容。結(jié)構(gòu)中可以“裝入”任何合法的語句及結(jié)構(gòu)。

(4)在書寫結(jié)構(gòu)時(shí)盡量采用縮排格式,以增強(qiáng)代碼的可讀性。

另外,為了提高編程效率,應(yīng)掌握一些常用編程定式:累加定式、連乘定式、窮舉法等。

主站蜘蛛池模板: 安顺市| 门头沟区| 黔江区| 金华市| 通海县| 家居| 京山县| 华宁县| 承德县| 汝南县| 什邡市| 临夏县| 凤山县| 旬邑县| 安国市| 兴安盟| 苏州市| 上饶市| 锡林郭勒盟| 潮安县| 莎车县| 丁青县| 石棉县| 乳山市| 武宁县| 神池县| 西和县| 泰州市| 厦门市| 库尔勒市| 房山区| 蒲城县| 长顺县| 黄大仙区| 宁国市| 元谋县| 东乌珠穆沁旗| 福海县| 嘉荫县| 即墨市| 上林县|