程式語言 (programming language) 使用 Visual Basic 劉和師 Part 2
基本元件 (Button Label TextBox) 視窗程式都是由這些基本元件組成的, 你應該用的很熟了 TextBox Button Label 2
基本元件 (Button Label TextBox) 這裡有幾個物件? 3
基本元件 (Button Label TextBox) 這裡有幾個物件? Label Form PictureBox Button 4
按鈕 (Button) 大概是最常用到的元件了, 主要是讓使用者點選 常用屬性 : Text: 按鈕上顯示的文字 Font: 按鈕上顯示文字的字型 常用事件 : Click: 當按鈕被滑鼠點一下時 5
標籤 (Label) 也是很常用到的元件, 主要是用來顯示文字 常用屬性 : Text: 標籤上要顯示的文字 Font: 按鈕上顯示文字的字型 Visiable: 該標籤是否顯示出來或隱藏 常用事件 : 比較沒有, 因為通常就是顯示資訊, 不當作控制項 6
文字方塊 (TextBox) 用來接受使用者的輸入資訊 常用屬性 : MultiLine: 是否接受多行 MaxLength: 最多可接受多少字元 PasswordChar: 使用者輸入以 * 號顯示, 通常用於輸入密碼欄位 ScrollBars: 是否使用捲軸 常用事件 : TextChange: 輸入項內的文字發生改變時觸發 7
練習 請做出這個畫面 8
練習 設計如下之程式, 輸入攝氏溫度, 轉換為華氏溫度 ( 公式 :F = ( 9.0 * C ) /5.0 + 32 ) Page 6-15 9
參考作法 程式碼 : TextBox 輸入的皆視為字串, 要做運算需做適當轉換 & 運算子串接不同格式的資料格式成為字串 CSng( ) 函數是將字元轉換成單精度數值 10
基本輸出入 程式常需要與使用者互動, 有下列基本指令 : 視窗模式 : MsgBox( ) 自 VB6 就有的指令, 簡單易用 MessageBox( ) VB2010 增加了這個, 跟 MsgBox( ) 一樣的功能, 但更強一些 InputBox( ) 請使用者輸入訊息 命令列模式 ( 前面介紹過了 ): Console.Write( ) Console.Read( ) 11
MsgBox( ) 語法 : MsgBox( 訊息, 樣式, 視窗標題 ) 例 :MsgBox(" 這是訊息 ", vbyesnocancel, " 範例 ") 12
MsgBox( ) 關於樣式 : MsgBox( 訊息, 樣式, 視窗標題 ) + 13
MsgBox( ) 練習 請顯示下列訊息框 MsgBox(" 樣式練習 ", vbyesnocancel + vbinformation, " 這是標題 ") 14
MsgBox( ) 傳回值 那怎麼知道使用者是按了哪個件呢? MsgBox( ) 會傳回一個數值來表示使用者按了哪個鍵 例如 : 如果傳回 1 或 vbok, 就表示使用者按了 OK 這個按鈕 15
貼心的 VB 環境 系統在幫得上忙的地方就會自動跳出視窗提示你可用的選項 16
MessageBox( ) 與 MsgBox( ) 相同, 請參考課本 略過 17
InputBox( ) 請使用者輸入訊息, 語法 : InputBox( 提示, 標題, 預設值 ) 例 : instr = InputBox(" 請輸入資訊 ", " 請求輸入 ", " 你好嗎?") 由一個變數來接收使用者的輸入 18
InputBox( ) 從 InputBox( ) 輸入的資料一律為 字串, 所以如果是要求輸入數值的話要自己轉換一下 很方便的一個指令, 但也可以直接在表單上設計好, 讓使用者經由 TextBox 元件輸入資訊 19
作業 Page 6-16 ~ 17 請練習這些基本指令 20
程式語言的三種控制結構 1. 循序結構 由上往下, 依序執行 2. 選擇結構 根據條件成立與否來選擇要執行的路徑 3. 重複結構 利用迴圈重複執行一個區塊 沒有具備這三種結構的就不能稱為程式語言 (HTML 就不算是正式的程式語言, 因為它沒有選擇和重複的結構指令 ) 21
選擇結構 如果 22
If Then 指令 如果 那就 語法 : If 條件式 Then 敘述 條件式結果為假則略過敘述, 往下執行 條件式結果為真時執行 例 : If A > B Then A = 10 23
If Then 指令 例 : Dim A As Integer = 300 Dim B As Integer = 150 If A > 200 Then A = A * 0.8 If B > 200 Then B = B * 0.8 執行結果 : A 為 240 B 為 150 ( 為什麼?) 24
If Then End If 指令 如果條件成立需要執行多行敘述, 則可以寫成 : 假 If 條件式 Then 敘述一真敘述二 : : End If 下一道敘述 25
If Then End If 指令 例 : Dim A, B, C As Intege Dim X As Integer = 10 A = 5 : B = 5 : C = 5 If X >= 10 Then A = A + 1 B = B + 1 C = C + 1 End If 執行結果 :A, B, C 的值各被加 1 26
If Then End If 指令 例 : Dim A, B, C As Intege Dim X As Integer = 10 A = 5 : B = 5 : C = 5 If X > 10 Then A = A + 1 B = B + 1 C = C + 1 End If 執行結果 :A, B, C 維持原值 ( Why? ) 27
If Then Else 指令 如果 那就 否則 條件式成立或不成立都有敘述要做 語法 : 條件式結果為真時執行 If 條件式 Then 敘述一 Else 敘述二 條件式結果為假時執行 28
If Then Else 指令 例 : Dim A As Integer = 300 If A>500 Then A = A*0.8 Else A = A*0.9 執行結果 :270 值 ( Why? ) 29
If Then Else 指令 多行式寫法 : 假 If 條件式 Then 敘述一真 : Else 敘述二 : End If 30
If Then Else 指令 多行式寫法例 : Dim A As Integer = 300 If A>500 Then A = A*0.8 Else A = A*0.9 End If 31
If 指令流程圖 32
If 練習 1. 輸入一數值, 若大於等於 60 則印出 及格, 否則印出 不及格 2. 輸入兩數值, 印出較大者 3. 輸入三數值, 印出最大者 4. 判斷 PH 酸鹼值, 若輸入小於 7 則印出 酸性, 若等於 7 則印出 中性, 若大於 7 則印出 鹼性 33
參考寫法 題目 1( 命令列模式 ): Dim x As Integer Console.Write(" 請輸入數值 : ") x = Val(Console.ReadLine()) If x >= 60 Then Console.WriteLine(" 及格 ) Else Console.WriteLine(" 不及格 ) End If Console.Read() 34
參考寫法 題目 1( 視窗模式 ): Dim x As Integer x = Val(InputBox(" 請輸入數值 : ")) If x >= 60 Then MsgBox(" 及格 ") Else MsgBox(" 不及格 ") End If 35
參考寫法 題目 2( 命令列模式 ): Dim a, b As Integer Console.Write(" 輸入第一個數值 : ") a = Val(Console.ReadLine()) Console.Write(" 輸入第二個數值 : ") b = Val(Console.ReadLine()) If a > b Then Console.WriteLine(a) Else Console.WriteLine(b) End If Console.Read() 36
參考寫法 題目 2( 視窗模式 ): Dim a, b As Integer a = Val(InputBox(" 輸入第一個數值 : ")) b = Val(InputBox(" 輸入第二個數值 : ")) If a > b Then MsgBox(a & " 比較大 ") Else MsgBox(b & " 比較大 ") End If 37
參考寫法 題目 3( 命令列模式 ): 38 Dim A, B, C, MAX As Integer Console.Write(" 請輸入第一個數值 : ") A = Val(Console.ReadLine()) Console.Write(" 請輸入第二個數值 : ") B = Val(Console.ReadLine()) Console.Write(" 請輸入第三個數值 : ") C = Val(Console.ReadLine()) If A > B Then Max = A Else Max = B If MAX > C Then Console.WriteLine(MAX) Else Console.WriteLine(C) End If Console.Read()
參考寫法 題目 3( 視窗模式 ): Dim A, B, C, MAX As Integer A = Val(InputBox(" 請輸入第一個數值 : ")) B = Val(InputBox(" 請輸入第二個數值 : ")) C = Val(InputBox(" 請輸入第三個數值 : ")) If A > B Then MAX = A Else MAX = B If MAX > C Then MsgBox(MAX & " 是最大值 ") Else MsgBox(C & " 是最大值 ") End If 39
參考寫法 題目 4( 命令列模式 ): Dim PH As Single Console.Write(" 請輸入酸鹼值 : ") PH = Val(Console.ReadLine()) If PH > 7 Then Console.WriteLine(" 鹼性 ") If PH = 7 Then Console.WriteLine(" 中性 ") If PH < 7 Then Console.WriteLine(" 酸性 ") Console.Read() 40
參考寫法 題目 4( 視窗模式 ): Dim PH As Single PH = Val(InputBox(" 請輸入酸鹼值 : ")) If PH > 7 Then MsgBox(" 鹼性 ") If PH = 7 Then MsgBox(" 中性 ") If PH < 7 Then MsgBox(" 酸性 ") 41
參考寫法 題目 1( 視窗模式 ): 設計執行結果 Label1 TextBox1 Button1 Form1 Label2 42
參考寫法 題目 1( 視窗模式 ): Private Sub Button1_Click(sender As Object Dim x As Integer x = Val(TextBox1.Text) If x >= 60 Then Label2.Text = " 及格 Else Label2.Text = " 不及格 End If End Sub 43
參考寫法 題目 2( 視窗模式 ): 設計執行結果 Label1 Label3 Form1 TextBox1 TextBox2 Button1 Label2 44
參考寫法 題目 2( 視窗模式 ): Private Sub Button1_Click(sender As Object If Val(TextBox1.Text) >= Val(TextBox2.Text) Then Label2.Text = TextBox1.Text Else Label2.Text = TextBox2.Text End If End Sub 45
參考寫法 題目 3( 視窗模式 ): 設計執行結果 Label1 Label3 Label4 Form1 TextBox1 TextBox2 TextBox3 Button1 Label2 46
參考寫法 題目 3( 視窗模式 ): Private Sub Button1_Click(sender As Object Dim a, b, c, max As Integer a = Val(TextBox1.Text) b = Val(TextBox2.Text) c = Val(TextBox3.Text) If a > b Then max = a Else max = b If max < c Then max = c Label2.Text = max End Sub 47
參考寫法 題目 4( 視窗模式 ): 設計執行結果 Label1 TextBox1 Form1 Button1 Label2 48
參考寫法 題目 4( 視窗模式 ): Private Sub Button1_Click(sender As Object Dim PH As Single PH = Val(TextBox1.Text) If PH > 7 Then Label2.Text = " 鹼性 " If PH = 7 Then Label2.Text = " 中性 " If PH < 7 Then Label2.Text = " 酸性 " End Sub 49
IIF( ) 條件函數 當 IF 的判斷很單純時, 可以使用此方式 語法 : 變數 = IIF( 條件運算式, 設定值 1, 設定值 2) 條件運算式為真 條件運算式為假 50
IIF( ) 條件函數 簡化三數比大小的寫法 : Private Sub Button1_Click(sender As Object Dim a, b, c, max As Integer a = Val(TextBox1.Text) b = Val(TextBox2.Text) c = Val(TextBox3.Text) max = IIf( a > b, a, b ) Label2.Text = IIf( max > c, max, c ) End Sub 51
If Then ElseIf 當有多重的判斷時, 可以這樣用 If Then 敘述一 Else If Then 敘述二 Else If Then 敘述三 Else 敘述四 End If End If End If If Then 敘述一 ElseIf Then 敘述二 ElseIf Then 敘述三 Else 敘述四 End If 有沒有簡化很多呢? 52
練習 請把 Page 7-12 的範例做出來 53
Select Case 判斷式 當需要多重判斷時, 還有比 If ElseIf 更簡潔的方式, 就是用 Select Case, 語法 : Select Case 變數 Case 條件式一敘述一 Case 條件式二敘述二 : Case Else 敘述 End Select 可以有很多 Case 第一個符合條件的 Case 會被執行, 之後的都忽略 Case Else 可省略 54
Select Case 判斷式 流程圖 只有一個程式區塊會被執行到 若所有 Case 皆不成立, 也沒有 Case Else, 則直接離開, 沒有任何程式區塊會被執行 若所有 Case 皆不成立, 則執行 Case Else 的區塊 55
Select Case 判斷式 輸入月份, 顯示是第幾季 : 設計執行結果 Label1 TextBox1 Form1 Button1 Label2 56
Select Case 判斷式 參考寫法 : 57 Dim M As Integer M = TextBox1.Text Select Case M Case 1, 2, 3 Label2.Text = " 第一季 " Case 4 To 6 Label2.Text = " 第二季 " Case 7 Label2.Text = " 第三季 " Case 8, 9 Label2.Text = " 第三季 " Case 10 To 12 Label2.Text = " 第四季 " Case Is > 12 Label2.Text = " 一年只有 12 個月 " Case Else Label2.Text = " 你輸入了什麼?" End Select
Select Case 判斷式 Case 可接受的運算式 : Case 運算式 Case 100 Case ABC Case 1 To 5 Case 1, 2, 3 Case Is > 100 說明直接寫出數值直接寫出字元或字串是否介於某一範圍個別列舉是否大或小於某一值 58
Select Case 練習 1. 依據氣象局規定 : 風速每小時低於 62 公里時為熱帶低氣壓, 達 62~117 公里為輕度颱風,118~183 公里為中度颱風,184~220 公里為強烈颱風, 超過 220 公里則為超級颱風, 寫一程式, 依輸入風速來判定為何種等級的台風 2. 寫一程式判斷成績等第 (90~100 分為優等,80~89 分為甲等,70~79 為乙等,60~69 分為丙等,60 分以下為丁等 ) 59
Select Case 練習 題 1. 參考寫法 : W = Val(TextBox1.Text) Select Case W Case Is < 62 Label2.Text=" 熱帶低氣壓 " Case 62 To 117 Label2.Text=" 輕度颱風 " Case 118 To 183 Label2.Text=" 中度颱風 " Case 184 To 220 Label2.Text=" 強烈颱風 " Case Is > 220 Label2.Text=" 超級颱風 " End Select 60
Select Case 練習 題 2. 參考寫法 : S = Val(TextBox1.Text) Select Case S Case 90 To 100 Label2.Text=" 優等 " Case 80 To 89 Label2.Text=" 甲等 " Case 70 To 79 Label2.Text=" 乙等 " Case 60 To 69 Label2.Text=" 丙等 " Case Is < 60 Label2.Text=" 丁等 " End Select 61
Select Case 注意事項 如果 S 輸入 100, 雖然所有 Case 都符合條件, 但只有第一個符合的會被執行, 其他敘述會被忽略 S = Val(TextBox1.Text) Select Case S Case 100 Label2.Text=" 優等 " Case 90 To 100 Label2.Text=" 甲等 " Case Is > 60 Label2.Text=" 乙等 " End Select 62
重複結構 重複執行某個區段, 又稱迴圈, 一共有四種 : For While Do loop For each( 於陣列時介紹 ) 63
重複結構 64
For Next 敘述 讓程式區段依照給定的起始值及終止值, 重複執行多次, 語法 : For 變數 = 起始值 To 終止值 Step 增 / 減量 : : 可省略程式區段 : : Next 變數 可省略 65
For Next 敘述 範例練習, 印出 10 次 I Love VB : For I = 1 To 10 Step 1 Console.WriteLine(I & I Love VB ) Next I 執行結果 : 66
For Next 敘述 變數 = 起始值 To 終止值 Step 增 / 減量 For I = 1 To 10 Step 1 Console.WriteLine(I & I Love VB ) Next I I = 1 時, 印一行 I Love VB I = 2 時, 印一行 I Love VB : I = 10 時, 印一行 I Love VB 一共印出 10 行 67
For Next 敘述 也可以用倒數的 : For I = 10 To 1 Step -1 Console.WriteLine(I & I Love VB ) Next I 執行結果 : 68
For Next 敘述 增 / 減量也可以不是整數 : 插入一個跳格 (Tab) For I = 1 To 10 Step 0.5 Console.WriteLine(I & vbtab & I Love VB ) Next I 執行結果 : (20 次 ) 69
For Next 敘述 增 / 減量是 +1 時可省略,Next 後面的變數可省略 : For I = 1 To 10 Step 1 Console.WriteLine(I & I Love VB ) Next I For I = 1 To 10 ( 省略 ) Console.WriteLine(I & I Love VB ) Next ( 省略 ) 在多重迴圈中若需要辨識, 還是可以寫出來 70
For Next 敘述 錯誤的用法 :( 一次都不會執行 ) For I = 10 To 1 Step 1 Console.WriteLine(I & I Love VB ) Next I 或 For I = 1 To 10 Step -1 Console.WriteLine(I & I Love VB ) Next I 原因 : 增 / 減量無法讓初始值趨向終止值 71
For 練習一 1. 計算 1+2+3 +1000 的值 2. 計算 1+3+5 +99 的值 3. 印出 1~100 之間可被 7 整除的數 4. 印出 1~1000 之間可被 7 和 13 整除的數 72
For 練習一參考寫法 1. 計算 1+2+3 +1000 的值 Dim Sum As Integer = 0 For i = 1 To 1000 Sum = Sum + i Next Console.WriteLine(Sum) 印出結果 Console.Read() 暫停螢幕 73
For 練習一參考寫法 2. 計算 1+3+5 +99 的值 Dim Sum As Integer = 0 For i = 1 To 99 Step 2 Sum += i Next Console.WriteLine(Sum) 印出結果 Console.Read() 暫停螢幕 74
For 練習一參考寫法 印出 1~100 之間可被 7 整除的數 For i = 1 To 100 If i Mod 7 = 0 Then Console.WriteLine(i) End If Next Console.Read() 75
For 練習一參考寫法 印出 1~1000 之間可被 7 和 13 整除的數 For i = 1 To 100 If i Mod 7 = 0 And I Mod 13 = 0 Then Console.WriteLine(i) End If Next Console.Read() 76
For 巢狀迴圈 就是迴圈裏面還有迴圈 For I = n to m For j = x To y : 程式區塊 : Next Next 注意 : 套得越多層, 效率越差 77
For 巢狀迴圈 範例說明 : Console.WriteLine("i j") Console.WriteLine("-------------") For i = 1 To 3 Console.Write(i & ": ") For j = 10 To 30 Step 10 Console.Write(j & " ") Next Console.WriteLine() Next Console.Read() 執行結果 : 78
For 巢狀迴圈 印出一個 9*9 乘法表, 參考寫法 : For i = 1 To 9 For j = 1 To 9 Console.Write(i * j & vbtab) Next Console.WriteLine() Next Console.Read() 79
For 巢狀迴圈 印出一個 9*9 乘法表執行結果 : 80
For 巢狀迴圈 練習做出下面的 9*9 乘法表 81
For 巢狀迴圈 9*9 乘法表參考寫法 : For i = 1 To 9 Step 3 For j = 1 To 9 Console.WriteLine( i & " * " & j & " = " & i * j & vbtab & i + 1 & " * " & j & " = " & (i + 1) * j & vbtab & i + 2 & * & j & = & (i + 2) * j & vbtab ) Next Console.WriteLine() Next Console.Read() 82
For 巢狀迴圈 9*9 乘法表另一種寫法 : For i = 1 To 9 Step 3 For j = 1 To 9 Console.Write( {0} * {1} = {2}, i, j, i * j & vbtab) Console.Write("{0} * {1} = {2} ", i + 1, j, (i + 1) * j & vbtab) Console.WriteLine("{0} * {1} = {2} ", i + 2, j, (i + 2) * j & vbtab) Next Console.WriteLine() Next Console.Read() 83
補充 Consloe.Write( ) 可以對輸出做格式化 : Console.Write( {0} * {1} = {2}, i, j, i * j) 格式化字串 變數內容依序交給格式化字串裡的 {n} 位置 雖然現在都是視窗程式了, 但有時還是會用到命令列模式輸出 84
For 練習 印出下列圖形 : * ** *** **** * ** *** **** * *** ***** ******* * *** ***** ******* ***** *** * A AB ABC ABCD A ABA ABCBA ABCDCBA 4321 321 21 1 7531 531 31 1 13 135 1357 提示 :Space(n) 函數可以印出 n 個空白 提示 :Chr(n) 函數可以轉換數值為字元 85
函數說明 Space 函數可印出指定數目的空白 : Console.Write(Space(10) & * ) 會印出 10 個空白和一個 * Chr( ) 與 Asc( ) 函數 : Console.Write(Chr(65)) 印出 A Console.Write(Asc( A )) 印出 65 ( 會印出數值 65 相對的 ASCII 字碼 (65=A)) ( 會印出字母 A 相對的 ASCII 值 (A=65)) 86
For 練習參考寫法 1. For i = 1 To 4 For j = 1 To i Console.Write("*") Next Console.WriteLine() Next Console.Read() * ** *** **** 87
For 練習參考寫法 2. For i = 1 To 4 Console.Write(Space(4 - i)) For j = 1 To i Console.Write("*") Next Console.WriteLine() Next Console.Read() * ** *** **** 88
For 練習參考寫法 3. Dim X As Integer = 3 For i = 1 To 7 Step 2 Console.Write(Space(X)) X = X - 1 For j = 1 To i Console.Write("*") Next Console.WriteLine() Next Console.Read() * *** ***** ******* 89
For 練習參考寫法 4. 90 Dim X As Integer = 3 For i = 1 To 7 Step 2 ' 畫上半部 Console.Write(Space(X)) X = X - 1 For j = 1 To i Console.Write("*") Next Console.WriteLine() Next X = 1 For i = 5 To 1 Step -2 ' 畫下半部 Console.Write(Space(X)) X = X + 1 For j = 1 To i Console.Write("*") Next Console.WriteLine() Next Console.Read() * *** ***** ******* ***** *** *
For 練習參考寫法 5. 提示 : 數值 65 是 A 的 ASCII 值 For i = 0 To 3 For j = 65 To 65 + i Console.Write(Chr(j)) Next Console.WriteLine() Next Console.Read() A AB ABC ABCD 91
For 練習參考寫法 6. Dim S As Integer = 3 For i = 0 To 3 Console.Write(Space(S)) S = S - 1 For j = 65 To 65 + i Console.Write(Chr(j)) Next For j = 64 + i To 65 Step -1 Console.Write(Chr(j)) Next Console.WriteLine() Next Console.Read() A ABA ABCBA ABCDCBA 92
For 練習參考寫法 7. For i = 4 To 1 Step -1 For j = i To 1 Step -1 Console.Write(j) Next Console.WriteLine() Next Console.Read() 4321 321 21 1 93
For 練習參考寫法 8. ' 畫上半部 For i = 7 To 1 Step -2 For j = i To 1 Step -2 Console.Write(j) Next Console.WriteLine() Next ' 畫下半部 For i = 3 To 7 Step 2 For j = 1 To i Step 2 Console.Write(j) Next Console.WriteLine() Next Console.Read() 94 7531 531 31 1 13 135 1357
Exit For 敘述 此敘述可以強迫跳出所在的迴圈, 不執行剩下的敘述 範例 : For j = 1 To 10 Console.Write(j) If j = 5 Then Exit For End If Next 跳出迴圈, 執行迴圈外的下一道敘述 95
Exit For 敘述 Exit For 只能跳出所在的迴圈, 不會一次全跳出來 For i = 1 To 10 For j = 1 To 10 Console.Write(j) If j = 5 Then Exit For End If Next Console.WriteLine() Next 96
重複結構 While 97
While End While 敘述 使用 For 迴圈時是依照起始值及終止值計算需重複多少次, 那如果不確定要執行幾次呢? 例如賽車遊戲, 如果在時間內繞完一圈, 就再玩一次, 否則就結束, 所以高手和魯蛇玩的次數一定不同, 那迴圈要執行幾次呢? 這是不能寫死的 這種不確定要執行 幾次的情況就用 : 98
While End While 敘述 當條件為真時執行迴圈, 為假時結束迴圈 While 條件真 : : 敘述 : : End While 假 99
While End While 敘述 範例練習, 印出 10 次 I Love VB : Dim i As Integer i = 1 While i <= 10 Console.WriteLine(i & " I Love VB") i += 1 增 / 減量 End While Console.Read() 執行結果 : 每次執行條件測試, 看是否為真 100
While End While 敘述 無盡迴圈, 因無意或故意, 讓迴圈永遠不會結束 例 : While 1=1 : : End While While 1 : : End While 故意的, 因為測試條件永遠是真 i = 1 While i <= 10 Console.WriteLine(i)? End While 無意的, 因為忘了改變 i 值, 使測試條件永遠是真 101
While End While 敘述 While 當無盡迴圈用是常見的 不是的話記得要有敘述改變測試條件 While 測試條件 : 敘述 : End While 控制迴圈要不要繼續的關鍵 102
Exit While 敘述 此敘述可以強迫跳出所在的迴圈, 不執行剩下的敘述, 功能與 Exit For 相同 範例 : While X <= 100 Console.Write(X) If X = 10 Then Exit While End If X += 1 End While 跳出迴圈, 執行迴圈外的下一道敘述 103
While 練習 1. 由鍵盤輸入 10 個數值並將其加總 2. 由鍵盤輸入 n 個數值, 直到輸入 999 為止 (999 不算 ), 將輸入之數值加總印出 3. 承上題, 增加印出最大值及最小值 4. 實作 Page 7-24 的範例 104
While 練習參考寫法 1. 由鍵盤輸入 10 個數值並將其加總 Dim i, x, sum As Integer i = 0 : sum = 0 While i < 10 x = Console.ReadLine() sum += x i += 1 End While Console.WriteLine("Sum= " & sum) Console.Read() 說明 : 冒號 : 是將多行敘述寫在同一行時當分隔符號 105
While 練習參考寫法 2. 由鍵盤輸入 n 個數值, 直到輸入 999 為止 (999 不算 ), 將輸入之數值加總印出 Dim x, sum As Integer x = 0 : sum = 0 While x <> 999 sum += x x = Console.ReadLine() End While Console.WriteLine("Sum= " & sum) Console.Read() 106
While 練習參考寫法 3. 承上題, 增加印出最大值及最小值 107 Dim x, sum, max, min As Integer x = 0 : sum = 0 max = Int32.MinValue : min = Int32.MaxValue While x <> 999 sum += x x = Console.ReadLine() If x <> 999 Then If x > max Then max = x If x < min Then min = x End If End While 說明 : Int32.MinValue 是取得整數可表示的最小值 Int32.MaxnValue 是取得整數可表示的最大值 Console.WriteLine( Max= & max &, Min= " & min) Console.WriteLine("Sum= " & sum) Console.Read()
While 練習參考寫法 4. 實作 Page 7-24 的範例 ( 請參看課本 ) 108
Do Loop 109
Do Loop 敘述 區分為前測式與後測式迴圈 : 前測式後測式 先判斷條件再執行迴圈 Do While 條件 : : Loop 先執行迴圈再判斷條件 Do : : Loop While 條件 Do Until 條件 : : Loop Do : : Loop Until 條件 110
Do Loop 敘述 前測式效果與 While 敘述相同, 端看各位喜歡用哪種敘述來寫 Do While 條件 : 真 : 敘述 : : Loop 假 111
Do Loop 敘述 後測式語法 While: 真 Do : 敘述 : : Loop While 條件 假 112
Do Loop 敘述 後測式語法 Until: 假 Do : 敘述 : : Loop Until 條件 真 113
Do Loop 敘述 記住 : While 是條件為真時要重複為假時要離開 Until 是條件為假時要重複為真時要離開 真 While 假 假 Until 真 114
Do Loop 敘述 後測式是先執行迴圈內的敘述, 再判斷要不要繼續重複執行 後測式最大的不同是迴圈內的敘述一定會執行至少一次 Do While 條件 ( 假 ) : 執行了 0 次 : Loop 條件為假, 故不進入迴圈, 直接離開 Do : 執行了一次 : Loop While 條件 ( 假 ) 執行了一次, 但條件為假, 故不回頭重複 115
Exit Do 敘述 此敘述可以強迫跳出所在的迴圈, 不執行剩下的敘述, 功能與 Exit While 相同 範例 : Do While X <= 100 Console.Write(X) If X = 10 Then Exit Do End If X += 1 Loop 跳出迴圈, 執行迴圈外的下一道敘述 116
Continue 指令 Continue For: 跳過 For 迴圈剩下的指令, 回到 For 的開頭, 執行下一個 For/Next 迴圈 Continue Do: 忽略之後的指令, 跳回 Do 去執行 跟 Exit 指令相反 117
Continue 指令 範例 : Dim i, sum As Integer Do While i < 10 i = i + 1 If i Mod 2 = 0 Then Continue Do End If sum = sum + 1 Loop Console.WriteLine(sum) Console.Read() 執行結果 : 5 118
Continue 指令 範例 : Dim i, sum As Integer For i = 1 To 10 If i Mod 2 = 0 Then Continue For End If sum = sum + 1 Next Console.WriteLine(sum) Console.Read() 執行結果 : 5 119
Do Loop 練習 將 While 的程式改寫為 Do Loop 型式 1. 由鍵盤輸入 10 個數值並將其加總 2. 由鍵盤輸入 n 個數值, 直到輸入 999 為止 (999 不算 ), 將輸入之數值加總印出 3. 實作 Page 7-39 的範例 120
Do Loop 練習參考寫法 1. 由鍵盤輸入 10 個數值並將其加總 ( 前置 ) Dim i, x, sum As Integer i = 0 : sum = 0 Do While i < 10 x = Console.ReadLine() sum += x i += 1 Loop Console.WriteLine("Sum= " & sum) Console.Read() 說明 : 冒號 : 是將多行敘述寫在同一行時當分隔符號 121
Do Loop 練習參考寫法 1. 由鍵盤輸入 10 個數值並將其加總 ( 後置 ) Dim i, x, sum As Integer i = 0 : sum = 0 Do x = Console.ReadLine() sum += x i += 1 Loop While i < 10 Console.WriteLine("Sum= " & sum) Console.Read() 說明 : 冒號 : 是將多行敘述寫在同一行時當分隔符號 122
Do Loop 練習參考寫法 1. 由鍵盤輸入 10 個數值並將其加總 ( 前置 ) Dim i, x, sum As Integer i = 0 : sum = 0 Do Until i >= 10 x = Console.ReadLine() sum += x i += 1 Loop Console.WriteLine("Sum= " & sum) Console.Read() 說明 : 冒號 : 是將多行敘述寫在同一行時當分隔符號 123
Do Loop 練習參考寫法 1. 由鍵盤輸入 10 個數值並將其加總 ( 後置 ) Dim i, x, sum As Integer i = 0 : sum = 0 Do x = Console.ReadLine() sum += x i += 1 Loop Until i >= 10 Console.WriteLine("Sum= " & sum) Console.Read() 說明 : 冒號 : 是將多行敘述寫在同一行時當分隔符號 124
Do Loop 練習參考寫法 2. 由鍵盤輸入 n 個數值, 直到輸入 999 為止 (999 不算 ), 將輸入之數值加總印出 ( 前置 ) Dim x, sum As Integer x = 0 : sum = 0 Do While x <> 999 sum += x x = Console.ReadLine() Loop Console.WriteLine("Sum= " & sum) Console.Read() 125
Do Loop 練習參考寫法 2. 由鍵盤輸入 n 個數值, 直到輸入 999 為止 (999 不算 ), 將輸入之數值加總印出 ( 後置 ) Dim x, sum As Integer x = 0 : sum = 0 Do sum += x x = Console.ReadLine() Loop While x <> 999 Console.WriteLine("Sum= " & sum) Console.Read() 126
Do Loop 練習參考寫法 2. 由鍵盤輸入 n 個數值, 直到輸入 999 為止 (999 不算 ), 將輸入之數值加總印出 ( 前置 ) Dim x, sum As Integer x = 0 : sum = 0 Do Until x = 999 sum += x x = Console.ReadLine() Loop Console.WriteLine("Sum= " & sum) Console.Read() 127
Do Loop 練習參考寫法 2. 由鍵盤輸入 n 個數值, 直到輸入 999 為止 (999 不算 ), 將輸入之數值加總印出 ( 後置 ) Dim x, sum As Integer x = 0 : sum = 0 Do sum += x x = Console.ReadLine() Loop Until x = 999 Console.WriteLine("Sum= " & sum) Console.Read() 128
Do Loop 練習參考寫法 4. 實作 Page 7-39 的範例 ( 請參看課本 ) 129
亂數 讓電腦隨機產生一個數值, 而且不可預期, 如果產生一連串數值, 那看起來必須是沒有任何規律的數列 是電腦遊戲不可或缺的功能 使用兩個函數來達成 : Randomize( ) Rnd( ) 130
亂數 Randomize( ): 亂數起使種子 亂數函數也是一段小程式, 是程式就會有固定的程序, 所以為了避免產生的亂數發生 亂中有序 的情況, 我們用 Randomize( ) 函數給它一個起始值 ( 通常是系統時間, 因為每分每秒的值都不同 ), 讓亂數的產生每次起始條件都不同, 這樣就能保證真的很亂! 語法 : Randomize() 就這樣, 寫在 Rnd( ) 使用前就可以了 131
亂數 Rnd( ) 函數 : 會產生 0.0000.1 ~0.9999.9 之間的任意值 再經過運算得到我們想要的範圍 語法 : 變數 = Int( Rnd() * 範圍 ) + 起始值 Ex: n = Int( Rnd() * 10 ) + 1 可得到 1~10 之間的任意整數 132
亂數 產生 1~10 之間的任意整數說明 : n = Int( Rnd() * 10 ) + 1 產生 0.00 1 ~ 0.99 9 *10 後變成 0.00 1 ~ 9.99 9 Int 後變成 0 ~ 9 n = +1 後變成 1 ~ 10 133
亂數 範例 : Dim n As Integer Randomize() For i = 1 To 10 n = Int( Rnd() * 10 ) + 1 Console.WriteLine(n) Next Console.Read() 134
亂數 範例 : 產生 1~49 之間的亂數 Int( Rnd() * 49 ) + 1 1~49 一共有 49 種變化 產生 -5~+5 之間的亂數 Int( Rnd() * 11 ) - 5-5~+5 一共有 11 種變化 (-5,-4,-3,-2,-1,0,1,2,3,4,5) 135
亂數練習 練習 : 1. 印出六個 1~49 之間的亂數 2. 印出 100 個 1~50 之間的亂數, 並統計 25 出現幾次 3. 產生 100 個 0~100 之間的亂數, 印出最小值及最大值 平均值 4. 寫一個簡易猜數字大小的遊戲 : 產生一個 1~100 之間的亂數, 請玩家猜大小, 要提示猜得太大或太小了 136
亂數練習參考寫法 1. 印出六個 1~49 之間的亂數 Dim n As Integer Randomize() For i = 1 To 6 n = Int( Rnd() * 49) + 1 Console.WriteLine(n) Next Console.Read() 137
亂數練習參考寫法 2. 印出 100 個 1~50 之間的亂數, 並統計 25 出現幾次 Dim n, m As Integer m = 0 Randomize() For i = 1 To 100 n = Int( Rnd() * 50) + 1 Console.Write(n & ",") If n = 25 Then m += 1 Next Console.WriteLine(vbCrLf & "25 出現了 " & m & " 次 ") Console.Read() 138
亂數練習參考寫法 3. 產生 100 個 0~100 之間的亂數, 印出最小值及最大值 平均值 Dim n, max, min As Integer Dim avg As Double Randomize() max = 0 : min = 100 For i = 1 To 100 n = Int( Rnd() * 101) If n > max Then max = n If n < min Then min = n avg += n Next Console.WriteLine(" 最小值 : " & min) Console.WriteLine(" 最大值 : " & max) 為什麼是 101? Console.WriteLine(" 平均值 : " & avg / 100) Console.Read() 139
亂數練習參考寫法 4. 寫一個簡易猜數字大小的遊戲 : 產生一個 1~100 之間的亂數, 請玩家猜大小, 要提示猜得太大或太小了 Dim num, x As Integer Randomize() num = Int( Rnd() * 100) + 1 Do Console.Write(" 請輸入數字 : ") x = Console.ReadLine() If x < num Then Console.WriteLine(" 太小了 ") If x > num Then Console.WriteLine(" 太大了 ") Loop Until num = x Console.WriteLine(" 答對了!!") Console.Read() 140
上學期進度結束 ~ 141