- Visual Basic學(xué)習(xí)手冊
- 鞏建華 孫秀梅 安劍等編著
- 427字
- 2018-12-27 17:51:21
第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)掌握一些常用編程定式:累加定式、連乘定式、窮舉法等。
- VMware View Security Essentials
- 國際大學(xué)生程序設(shè)計(jì)競賽中山大學(xué)內(nèi)部選拔真題解(二)
- TensorFlow Lite移動(dòng)端深度學(xué)習(xí)
- Visual C++實(shí)例精通
- Visual FoxPro 程序設(shè)計(jì)
- C/C++算法從菜鳥到達(dá)人
- Python爬蟲開發(fā)與項(xiàng)目實(shí)戰(zhàn)
- Scratch 3游戲與人工智能編程完全自學(xué)教程
- Haxe Game Development Essentials
- Java實(shí)戰(zhàn)(第2版)
- Babylon.js Essentials
- Hands-On GUI Programming with C++ and Qt5
- 從零開始:UI圖標(biāo)設(shè)計(jì)與制作(第3版)
- Troubleshooting Citrix XenApp?
- 智能手機(jī)故障檢測與維修從入門到精通