【正文】
環(huán)( WhileEnd While循環(huán))和 Do循環(huán)( DoLoop循環(huán))。其中 ForNext循環(huán)按規(guī)定的次數(shù)執(zhí)行循環(huán)體,而 While循環(huán)和 Do循環(huán)則是在給定的條件滿足時(shí)執(zhí)行循環(huán)體。 For循環(huán)控制結(jié)構(gòu) For循環(huán)也稱(chēng) ForNext循環(huán)或計(jì)數(shù)循環(huán)。其一般格式如下: For 循環(huán)變量 = 初值 To 終值 [Step 步長(zhǎng) ] [循環(huán)體 ] [Exit For] Next [循環(huán)變量 ] For循環(huán)按指定的次數(shù)執(zhí)行循環(huán)體。例如: For x = 1 to 100 Step 1 Sum = Sum + x Next x 該例從 1到 100,步長(zhǎng)為 1,共執(zhí)行 100次 Sum = Sum + x。其中 x是循環(huán)變量,1是初值, 100是終值, Step后面的 1是步長(zhǎng)值, Sum = Sum + x是循環(huán)體。 【 例 】 有如下 10個(gè)數(shù): 2, 73, 82, 76, 1, 24, 321, 25, 89, 20 試編寫(xiě)一程序,打印出其中的每個(gè)負(fù)數(shù),分別計(jì)算并輸出正數(shù)及負(fù)數(shù)的和。 程序如下: Private Sub Form1_Click(ByVal sender As Object, _ ByVal e As ) Handles Dim i, number As Integer Dim NegativeSum = 0 Dim PositiveSum = 0 For i = 1 To 10 number = InputBox(Enter Data:) If number 0 Then MsgBox(number) NegativeSum = NegativeSum + number Else PositiveSum = PositiveSum + number End If Next i MsgBox(Negative sum is: amp。 NegativeSum _ amp。 Chr(13) amp。 Chr(10) amp。 _ Positive sum is: amp。 PositiveSum, , ) End Sub 當(dāng)循環(huán)控制結(jié)構(gòu) 當(dāng)循環(huán)控制結(jié)構(gòu)通過(guò)當(dāng)循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn),其格式如下: While 條件 [語(yǔ)句塊 ] [Exit While] End While 【 例 】 從鍵盤(pán)上輸入字符,對(duì)輸入的字符進(jìn)行計(jì)數(shù),當(dāng)輸入的字符為“?”時(shí),停止計(jì)數(shù),并輸出結(jié)果。 由于需要輸入的字符的個(gè)數(shù)沒(méi)有指定,無(wú)法用 For循環(huán)來(lái)編寫(xiě)程序。停止計(jì)數(shù)的條件是輸入的字符為“?”,可以用當(dāng)循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)。 程序如下: Private Sub Form1_Click(ByVal sender As Object, _ ByVal e As ) Handles Dim ch1 As Char Dim msg As String Const ch = ? Dim counter As Short = 0 msg = Enter a character: ch1 = InputBox(msg) While ch1 ch counter = counter + 1 ch1 = InputBox$(msg) End While MsgBox(Number of characters entered: amp。 counter) End Sub Do循環(huán)控制結(jié)構(gòu) Do循環(huán)的格式如下: ( 1) Do [語(yǔ)句塊 ] [Exit Do] Loop [While | Until 循環(huán)條件 ] ( 2) Do [While | Until 循環(huán)條件 ] [語(yǔ)句塊 ] [Exit Do] Loop Do循環(huán)語(yǔ)句的功能是:當(dāng)指定的“循環(huán)條件”為 True或直到指定的“循環(huán)條件”變?yōu)?True之前重復(fù)執(zhí)行一組語(yǔ)句(即循環(huán)體)。 【 例 】 目前世界人口為 60億,如果以每年 %的速度增長(zhǎng),多少年后世界人口達(dá)到或超過(guò) 70億。 程序如下: Private Sub Form1_Click(ByVal sender As Object, _ ByVal e As ) Handles Dim p As Double = Dim r As Single = Dim n As Integer n = 0 Do Until p = p = p * (1 + r) n = n + 1 ‘或 n+=1 Loop MsgBox(Str(n) amp。 年后世界人口達(dá) amp。 Str(Int(p + )), , ) End Sub GoTo語(yǔ)句 ? GoTo是早期 BASIC中的語(yǔ)句, Visual 了 GoTo語(yǔ)句,但取消了 OnGoTo語(yǔ)句。盡管 GoTo語(yǔ)句會(huì)影響程序質(zhì)量,但在某些情況下還是有用的。 ? GoTo語(yǔ)句可以改變程序執(zhí)行的順序,跳過(guò)程序的某一部分去執(zhí)行另一部分,或者返回已經(jīng)執(zhí)行過(guò)的某語(yǔ)句使之重復(fù)執(zhí)行。因此,用 GoTo語(yǔ)句可以構(gòu)成循環(huán)。 GoTo語(yǔ)句的一般格式為: GoTo {標(biāo)號(hào) | 行號(hào) } 【 例 】 編寫(xiě)程序,用來(lái)計(jì)算存款利息。 Private Sub Form1_Click(ByVal sender As Object, _ ByVal e As ) Handles Dim p As Double = 10000 Dim r As Single = Dim t As Short = 1 Dim i As Short Again: If t 10 Then GoTo 100 i = p * r p = p + i t = t + 1 GoTo Again 100: MsgBox(10 年本利合計(jì)為 : amp。 Str(p) amp。 元 , , ) End Sub 過(guò)程的建立和調(diào)用 ? 在前面各章中,我們已多次見(jiàn)過(guò)事件過(guò)程,這樣的過(guò)程是當(dāng)發(fā)生某個(gè)事件(如 Click、 Load、TextChanged)時(shí),對(duì)該事件作出響應(yīng)的程序段,這種事件過(guò)程構(gòu)成了 Visual 。有時(shí)候,多個(gè)不同的事件過(guò)程可能需要使用一段相同的程序代碼,可以把這一段代碼獨(dú)立出來(lái),作為一個(gè)過(guò)程,這樣的過(guò)程叫做“通用過(guò)程”( General procedure),它可以單獨(dú)建立,供事件過(guò)程或其他通用過(guò)程調(diào)用。 ? 在 Visual ,通用過(guò)程分為兩類(lèi),即子程序過(guò)程和函數(shù)過(guò)程,前者叫做 Sub過(guò)程,后者叫做Function過(guò)程。 建立過(guò)程 1. 定義 Sub過(guò)程 通用 Sub過(guò)程的結(jié)構(gòu)與前面多次見(jiàn)過(guò)的事件過(guò)程的結(jié)構(gòu)類(lèi)似。一般格式如下: [Private][Public] Sub 過(guò)程名 [(參數(shù)表列 )] 語(yǔ)句塊 [Exit Sub] [語(yǔ)句塊 ] [Return] End Sub 說(shuō)明 ? ( 1) Sub過(guò)程以 Sub開(kāi)頭,以 End Sub結(jié)束,在 Sub和 End Sub之間是描述過(guò)程操作的語(yǔ)句塊,稱(chēng)為“過(guò)程體”或“子程序體”。 ? ( 2) End Sub標(biāo)志著 Sub過(guò)程的結(jié)束。為了能正確運(yùn)行,每個(gè) Sub過(guò)程必須有一個(gè) End Sub子句。當(dāng)程序執(zhí)行到 End Sub時(shí),將退出該過(guò)程,并立即返回到調(diào)用語(yǔ)句下面的語(yǔ)句。此外,在過(guò)程體內(nèi)可以用一個(gè)或多個(gè) Exit Sub語(yǔ)句或 Return語(yǔ)句從過(guò)程中退出。 ? ( 3) Sub過(guò)程不能嵌套。也就是說(shuō),在 Sub過(guò)程內(nèi),不能定義 Sub過(guò)程或 Function過(guò)程;不能用 GoTo語(yǔ)句進(jìn)入或退出一個(gè) Sub過(guò)程,只能通過(guò)調(diào)用執(zhí)行 Sub過(guò)程,而且可以嵌套調(diào)用。 特別注意: ① Private:表示 Sub過(guò)程是私有過(guò)程,只能被本模塊中的其他過(guò)程訪問(wèn),不能被其他模塊中的過(guò)程訪問(wèn)。 ② Public:表示 Sub過(guò)程是公有過(guò)程,可以在程序的任何地方調(diào)用它。各模塊通用的過(guò)程一般用 Public定義,在窗體層定義的通用過(guò)程通常在本窗體模塊中使用,如果在其他窗體模塊中使用,則應(yīng)定義窗體的對(duì)象。 ③過(guò)程名:是一個(gè)長(zhǎng)度不超過(guò) 255個(gè)字符的變量名,在同一個(gè)模塊中,同一個(gè)變量名不能既用作 Sub過(guò)程名又用作Function過(guò)程名。 ④參數(shù)表列:含有在調(diào)用時(shí)傳送給該過(guò)程的簡(jiǎn)單變量名或數(shù)組名,各名字之間用逗號(hào)隔開(kāi)?!皡?shù)表列”指明了調(diào)用時(shí)傳送給過(guò)程的參數(shù)的類(lèi)型和個(gè)數(shù),每個(gè)參數(shù)的格式為: [ Optional ] [{ ByVal | ByRef }][ ParamArray ] 變量名[()][As 數(shù)據(jù)類(lèi)型 ][= 默認(rèn)值 ] 例如: Sub tryout(ByVal x As Integer, ByVal y As Integer) x = x + 100 y = y * 6 (x = amp。 Str(x) amp。 y = amp。 Str(y))) End Sub 2. 定義 Function過(guò)程 Function過(guò)程定義的格式如下: [Private][Public] Function 過(guò)程名 [(參數(shù)表列 )][As 類(lèi)型 ] [語(yǔ)句塊 ] [過(guò)程名=表達(dá)式 ] [Exit Function] [語(yǔ)句塊 ] [Return] End Function 用上面的格式可以定義一個(gè) Function過(guò)程。 說(shuō)明 ? ( 1) Function過(guò)程以 Function開(kāi)頭,以 End Function結(jié)束,在兩者之間是描述過(guò)程操作的語(yǔ)句塊,即“過(guò)程體”或“函數(shù)體”。格式中的“過(guò)程名”、“參數(shù)表列”、“ Private‖、“ Public‖、“ Exit Function‖的含義與 Sub過(guò)程中相同。“ As 類(lèi)型”是由 Function過(guò)程返回的值的數(shù)據(jù)類(lèi)型,可以是 Boolean、 Short、 Integer、 Long、Single、 Double、 Decimal或 String,如果省略,則為 Object。 ? ( 2)和 Sub過(guò)程一樣,可以在窗體、模塊、類(lèi)、接口或結(jié)構(gòu)中定義 Function 過(guò)程。默認(rèn)情況下, Function過(guò)程的訪問(wèn)性是 Public。從 Function過(guò)程返回調(diào)用程序后,繼續(xù)執(zhí)行調(diào)用它的語(yǔ)句后面的語(yǔ)句。 ? ( 3)用 Exit Function 語(yǔ)句可以從 Function過(guò)程退出。該語(yǔ)句可以出現(xiàn)在過(guò)程內(nèi)的任何位置,而且數(shù)量沒(méi)有限制。 ? ( 4)調(diào)用 Sub過(guò)程相當(dāng)于執(zhí)行一個(gè)語(yǔ)句,不直接返回值;而調(diào)用 Function過(guò)程要返回一個(gè)值,因此可以像內(nèi)部函數(shù)一樣在表達(dá)式中使用。由 Function過(guò)程返回的值放在上述格式中的“表達(dá)式”中,并通過(guò)“過(guò)程名=表達(dá)式”把它的值賦給“過(guò)程名”。為了能使一個(gè) Function過(guò)程完成所指定的操作,通常要在過(guò)程體中為“過(guò)程名”賦值。 ? ( 5)如果在 Fuction過(guò)程中省略“過(guò)程名 = 表達(dá)式”或“ Return 表達(dá)式”,則過(guò)程返回一個(gè)默認(rèn)值。對(duì)于 Byte、 Char、 Decimal、 Double、 Integer、 Long、 Short和Single,該默認(rèn)值為 0;對(duì)于 Object、 String和所有數(shù)組是 Nothing;對(duì)于 Boolean是 False;而對(duì)于 Date則是 1/1/0001 12:00 AM。 ? ( 6)“參數(shù)表列”可以含有 0個(gè)或多個(gè)形式參數(shù),各參數(shù)之間用逗號(hào)隔開(kāi),每個(gè)參數(shù)具有如下的格式: ? [ Optional ] [{ ByVal | ByRef }][ ParamArray ] 變量名 [()][As 數(shù)據(jù)類(lèi)