新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.

Slides:



Advertisements
Similar presentations
编程加工 信息的. 趣味导入拓展提升大显身手总结反思学以致用 传说古代印度有个国王叫舍罕,他很迷恋棋类,而 宰相达依尔是个聪明的大臣,发明了国际象棋。国王玩 得爱不释手,决定奖赏宰相。达依尔说:陛下,我别无 他求,请你在这张棋盘的第一个格子里赏我 1 粒麦子; 在第二个格子里赏我 2 粒麦子;在第三个格子里赏我.
Advertisements

1 程式語言 Visual Basic 循序結構、選擇結構 黃瀧輝 老師 Long Hwai,Huang.
Visual Basic 程序设计 第四讲.
第 1 章 公共基础知识 第 2 章 Visual Basic程序开发环境 第 3 章 对象及其操作 第 4 章 数据类型及其运算
語文教學 教學理念 竹大附小 陳枝田 將地方圖案插入此投影片 選取〔插入〕功能表 〔圖片〕指令 選取〔從檔案〕指令 選取你的標幟圖片檔案
計算機概論 第4章 基本視窗程式應用 4-1 程式語言簡介 4-2 演算法與流程圖 4-3 視窗程式語言設計 4-4 資料結構.
課程名稱:程式設計 授課老師:________
第四章 控制结构.
赋值语句与输入、输出语句.
高中信息技术新课程探讨 算法与程序设计教学实践与探讨 江苏省新海高级中学  张丽.
Access数据库程序设计 总复习.
Visual Basic 期中報告 組長:沈亞臻 組員:蔣佳育 張庭茹
算法和程序设计 第4课 分支结构的算法设计 •.
第五章 数组.
Visual Basic程序设计.
BLANK overview.
Chapter 1 複習.
Visual Basic 2010 程式設計16堂特訓 第七堂 VB的迴圈流程控制.
課程名稱:程式設計 授課老師:________
第6章 数 组 6.1 一维数组 6.2 控件数组 6.3 二维数组.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
数组 第 6 章.
第5章 数组 Visual Basic程序设计.
1 巨集 2 資料型態 3 物件、屬性、方法與事件 4 陳述式與副函式 5 其他注意事項 6 範例
过程 第 7 章.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
初识Visual Basic.
Access VBA程序设计 本章重点 Access Basic编程语言 运算符、函数与表达式 Access Basic语句 模块的使用
第4章 程序控制结构与算法基础.
Visual Basic 程序设计教程 机械工业出版社同名教材 配套电子教案 2003 年 6月.
第4章 基本的控制结构 4.1 顺序结构 4.2 选择结构程序设计 4.3 循环结构 4.4 综合实例 退出.
数学3(必修)—— 算 法 ALGORITHM 苏州大学数学科学学院 徐稼红
流程控制、陣列 台南市聖功女子高級中學 毛全良.
程式語言Visual Basic 重複結構 黃瀧輝 老師 Long Hwai,Huang.
6-1 For…Next迴圈敘述 6-2 While…End While迴圈敘述 6-3 Do…Loop迴圈敘述 6-4 巢狀迴圈敘述
第12章 VBA模块设计.
RWM600 (13.56MHz) Reader Antenna.
RWM600 (13.56MHz) Reader Antenna.
第3 章 VBScript的控制结构.
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
新觀念的 VB6 教本 第 6 章 資料型別.
第5章 Visual Basic控制结构 之 常用算法举例
PCR300 (13.56MHz) Reader RS232/USB.
算法与程序设计 周少品.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
程式設計 Visual Basic簡介 週次:2 建國技術學院 資管系 饒瑞佶 2003年9月17日.
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
程式語言(I)- Visual Basic 6.0 第 8 章 模組化程式設計I-副程式與自定函數.
For x = 0 To 9 For y = 0 To 9 z = *x + 10*y …… Next y
江西财经大学信息管理学院 《数据库应用》课程组2007
第六章 選擇結構 (應用:核取方塊、選項按鈕、框架)
小结 郭清溥.
经典算法之 冒 泡 排 序.
Visual Basic 程序设计教程.
Ch04 VB.NET的流程控制 網頁程式設計.
程式結構&語法.
现代信息技术 微电子技术 计算机技术 传感技术 通信技术 处理、存储信息的技术 传感、采集技术 传递信息的技术
第二章、第三章错题分析.
Excel高级功能培训 PSMT质量部 王新民
計算機概論 跨越講義 第4章 基本視窗程式應用 4-1 程式語言簡介 4-2 結構化VS物件導向程式設計
第四章 控制结构 1、顺序控制结构 2、选择结构 3、循环结构.
單元名稱:結構化程式設計 報告人 劉洲溶.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
程式設計 Visual Basic簡介 週次:4 建國技術學院 資管系 饒瑞佶 2003年10月18日.
1、过程概述 2、函数过程 3、子过程 4、过程的使用 5、传递参数 6、过程的嵌套
算法与Visual Basic程序基础(二)
程序调试与错误处理.
1.2.3 循环语句.
講師:劉俊民(金剛) Idea 創意應用科技有限公司
Presentation transcript:

新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述

7-1 強制跳躍的 GoTo

強制跳躍 GoTo GoTo 是 "跳到…" 的意思,執行之後可以跳到前面的敘述,也可以跳到後面的敘述,但使用 GoTo 以前必須先有「標記」存在。

標記的設定 設定標記的方法十分簡單,只要把標記名稱加在敘述前面,並且用 ':' 分開即可,例如:

標記設定 -- 完整的規則 標記必須放在敘述的前面,並且以冒號 ‘:’ 分隔。 標記之後可以不必接續任何敘述,唯 ‘:’ 仍不可省略。 標記的命名規則與變數的命名規則相同,有關變數的命名規則請參考2-5節「變數與常數」。 除了標記名稱可以作為標記之外,數字0~2147483647也可以作為標記,若以數字作為標記,與敘述分隔用的 ‘:’ 可以省略。 已使用的標記不能重複使用。

標記設定 -- 正確的使用法 使 用 例 說 明 123: Print 數字標記 2000 Print "2000 年" 使 用 例 說 明 123: Print 數字標記 2000 Print "2000 年" 數字標記後面的 ':' 可以省略 標記_X: X = 10 標記名稱也可以使用中文 Label_A: 標記後面可以不必接續任何敘述

標記設定 -- 錯誤的使用法 錯誤的使用例 說 明 9999999999: X = 10 數字標記超過 0~2147483647 的範圍 說 明 9999999999: X = 10 數字標記超過 0~2147483647 的範圍 Label-X: Print 使用減號 '-',不符合命名規則 100: Print "100" 100: Print "200" 標記 100 重複使用

GoTo 敘述 GoTo 可以跳到前面的敘述,也可以跳到後面的敘述,但是當 GoTo 跳到前面的敘述時,要特別小心,請觀察以下例子:

GoTo 敘述 -- 無窮迴圈 每次執行到 GoTo L10 之後,都會回到前面的敘述重新執行,進入所謂的無窮迴圈,結果會發現整個系統都變得不能操作了,即使是按結束命令鈕也沒有效,這時候解救方法是按下 Ctrl 鍵+Break 鍵,讓 VB 進入中斷模式,然後再結束程式。

GoTo 敘述 -- 溢位的示誤訊息(1) 出現在無窮迴圈的另一個現象是溢位的示誤訊息,例如以下是一個連續列印 1、2、3…的程式:

GoTo 敘述 -- 溢位的示誤訊息(2) 這是一個無窮迴圈的程式,所以迴圈中的 I% = I% + 1 會不斷地被執行,使 I% 值一直往上加,最後加到32768,就超過了整數型別的最大容量,所以 VB 便發出溢位的訊息。

If-Then-GoTo 避免無窮迴圈,可在 GoTo 前面增加條件式的判斷,以決定是否讓 GoTo 繼續往回跳,使用的敘述是: If 條件式 Then GoTo 標記 假如 '條件式' 成立,就跳到 '標記' 所在的敘述來執行,否則就向下執行。

If-Then-GoTo 的實例研究 改良第四章 score.vbp 專案程式 -- 如果使用者輸入的成績小於0或大於100,則要求其重新輸入。原程式如下: Private Sub Command1_Click() A = Val(InputBox("請輸入[數學]成績")) B = Val(InputBox("請輸入[英文]成績")) C = Val(InputBox("請輸入[國文]成績")) Print "平均分數="; (A + B + C) / 3 End Sub

If-Then-GoTo 的實例研究 – Step1 檢查使用者輸入的「數學」成績是否位於0~ 100區間,如果不是,則跳回 「A = Val(InputBox(“請輸入[數學]成績”))」敘 述之前,程式如下: 因此只要A小於0或A大於100,程式都會跳回 L10的標記位置,緊接著又會執行 InputBox 敘 述,要求使用者重新輸入數學成績。 L10: A = Val(InputBox("請輸入[數學]成績(0~100)")) If A < 0 Or A > 100 Then Goto L10

If-Then-GoTo 的實例研究 – Step2 改良後完整的程式如下: Private Sub Command1_Click() L10: A = Val(InputBox("請輸入[數學]成績(0~100)")) If A < 0 Or A > 100 Then Goto L10 L20: B = Val(InputBox("請輸入[英文]成績(0~100)")) If B < 0 Or B > 100 Then Goto L20 L30: C = Val(InputBox("請輸入[國文]成績(0~100)")) If C < 0 Or C > 100 Then Goto L30 Print "平均分數="; (A + B + C) / 3 End Sub

7-2 有條件執行的 If 敘述

If-Then 格式 其實 If-Then 不一定要配合 GoTo 一起使用,比較通則性的 If-Then 格式是: 如果 '條件式' 成立,就執行 Then 之後的 '敘述',否則繼續向下執行。其中 '敘述' 部份可以是任何合乎規定的敘述,例如將它換成 GoTo 敘述,就變成了上一節所看到的 If-Then-GoTo 格式,If-Then 敘述在程式設計中十分常用。

If-Then 的實例練習 求 X 的絕對值 X = Val(InputBox("請輸入一數值")) If X < 0 Then X = -X Print X

If-Then – Then 後面執行多行敘述 If I < 10 Then Print I : I = I + 1 : GoTo L10 敘述 1 敘述 2 敘述 3

If-Then 的實例研究 如果使用者輸入的成績小於 0 或大於 100,則先顯示一個訊息窗,然後才要求其重新輸入。 Private Sub Command1_Click() L10: A = Val(InputBox("請輸入[數學]成績(0~100)")) If A < 0 Or A > 100 Then MsgBox "超出範圍, 請重輸入!" : Goto L10 L20: B = Val(InputBox("請輸入[英文]成績(0~100)")) If B < 0 Or B > 100 Then MsgBox "超出範圍, 請重輸入!" : Goto L20 L30: C = Val(InputBox("請輸入[國文]成績(0~100)")) If C < 0 Or C > 100 Then MsgBox "超出範圍, 請重輸入!" : Goto L30 Print "平均分數="; (A + B + C) / 3 End Sub

結構化的 If-Then 格式(1) 當 Then 後面的敘述很多時,整個 If-Then 敘述將會拖得很長,對閱讀來說十分不方便,所以 VB 又提供了另一種比較結構化的 If-Then 格式:

結構化的 If-Then 格式(2) 介於 Then 及 End If 間的敘述稱「敘述區塊」, 所以有時候這個格式會表示成: 而在寫法上,我們通常會將整個敘述區塊後退幾 格,讓程式更容易閱讀,例如: If 條件式 Then 敘述區塊 End If

If-Then-Else 格式(1) 有時候我們會說:「如果…就做第一件事,否則就做第二件事。」,這表示成 VB 的敘述是:

If-Then-Else 格式(2) 結構化的寫法:

If-Then-Else 實例研究(1) 在所完成的「計算平均分數」程式中,最後以訊息窗顯示平均分數是否及格。

If-Then-Else 實例研究(2) Private Sub Command1_Click() L10: A = Val(InputBox("請輸入[數學]成績(0~100)")) If A < 0 Or A > 100 Then MsgBox "超出範圍, 請重輸入!" : Goto L10 L20: B = Val(InputBox("請輸入[英文]成績(0~100)")) If B < 0 Or B > 100 Then MsgBox "超出範圍, 請重輸入!" : Goto L20 L30: C = Val(InputBox("請輸入[國文]成績(0~100)")) If C < 0 Or C > 100 Then MsgBox "超出範圍, 請重輸入!" : Goto L30 Average = (A + B + C) / 3 If Average > = 60 Then MsgBox "平均分數=" & Average & ", 及格" Else MsgBox "平均分數=" & Average & ", 不及格" End If End Sub

巢狀 If 敘述 由於 If 敘述本身也是一種敘述,所以它也可以成為另一個 If 裡的一個敘述,而形成了 If 裡面又有 If 的情形,這種情形即稱為巢狀 If 敘述,例如:

巢狀 If 敘述 -- 實例研究(1) 輸入一正整數 N,並且判斷這個正整數是一位數、二位數、或是三位數以上 。

巢狀 If 敘述 -- 實例研究(2) Private Sub Command1_Click() L10: N = Val(InputBox(“請輸入一正整數”)) If N < 0 Then MsgBox “請輸入正整數!” : Goto L10 If N < 100 Then ’ 判斷是否小於三位數 If N < 10 Then ’ 判斷是否為一位數 Print N; “一位數” ’ 敘述區塊 1-1 Else Print N; “二位數” ’ 敘述區塊 1-2 End If Else Print N; “三位數(含)以上” ’ 敘述區塊 2 End If End Sub

逐一過濾條件的 ElseIf 先判斷第一條件,如果第一條件不成立,再判斷第二條件的情形,像這樣一一過濾條件的句子,在 VB 裡的敘述是:

逐一過濾條件的 ElseIf 例子 以前面判斷一正整數 N 為幾位數的程式為例,利用 ElseIf 逐一過濾條件,程式會變得比較容易閱讀,如下: If N < 10 Then Print N; "一位數" ElseIf N < 100 Then Print N; "二位數" ElseIf N < 1000 Then Print N; "三位數" Else Print N; "四位數(含)以上" End If

7-3 多執行路徑的 Select Case 敘述

Select Case敘述(1) Select Case 敘述,則可以將程式分成更 多的執行路徑,其格式如下: Select Case 資料或運算式 Case 條件值 1 敘述區塊 1 Case 條件值 2 敘述區塊 2 : Case 條件值 N 敘述區塊 N Case Else 敘述區塊 N+1 End Select

Select Case敘述(2) 資料(或運算式)的值符合條件值 1 時,執行敘述區塊 1, 符合條件值 2 時,執行敘述區塊 2…,符合條件值 N 時,執行敘述區塊 N,如果任何條件值都不符合,則 執行敘述區塊 N+1。

Select Case敘述 -- 實例一(1) Select Case 在程式設計中非常實用,例如電腦遊戲開始之前,經常都有讓使用者選擇遊戲等級的畫面,此時就可以用Select Case 來加以判別。

Select Case敘述 -- 實例一(2) Private Sub Command1_Click() N = Val(InputBox("遊戲等級:1.初級 2.進階 3.專家")) Select Case N Case 1 Print "初級" Case 2 Print "進階" Case 3 Print "專家" Case Else Print "資料輸入錯誤" End Select End Sub

Select Case敘述 -- 實例二 Select Case也可以適用於非數值性的資料,例: Private Sub Command1_Click() S = InputBox("請輸入英文的四季名稱") Select Case S Case "spring" Print "春天" Case "summer" Print "夏天" Case "autumn" Print "秋天" Case "winter" Print "冬天" End Select End Sub

Select Case敘述 -- 實例三 在 'Case 條件值' 中的條件值,並不限定於單一的常數資料,它還可以是一個範圍的資料,例如: Private Sub Command1_Click() age = Val(InputBox("請輸入年齡")) Select Case age Case 0 To 5 ' age 等於 0 到 5,都符合這個條件 S = "普通級" Case 6,7,8,9,10,11 ' 逐一列出條件值 S = "保護級" Case 12 To 17 S = "輔導級" Case Is >= 18 ' age ≧ 18,都符合這個條件 S = "限制級" End Select Print age; "歲可看「"; S; "」電影" End Sub

7-4 具重複執行能力的迴圈

具重複執行能力的迴圈 所謂迴圈就是重複執行同一個(或一些)敘述,使程式更加精簡。 我們在7-1節利用 GoTo 及 If-Then 敘述,寫了 一個從1列印到10的程式,就是一個典型的迴 圈程式,不過用 GoTo 來寫迴圈程式的缺點是 不容易閱讀且容易出錯,因此VB另外提供了 幾種控制迴圈的敘述,它們有:For-Next、 While-Wend、及Do-Loop。

計次執行的 For-Next(1) 如果已經確定迴圈的執行次數,使用 For-Next 敘述最方便,例如從1列印到10的程式是: 在這個程式中,最重要的一個地方是變數 I, 它在迴圈裡的角色是一個計次器,而計次範圍 是從1到10(1 To 10),所以迴圈內的 Print I 會 執行10次,也就可以從1列印到10。 For I = 1 To 10 Print I Next I

計次執行的 For-Next(2) For-Next 的格式: 撰寫 For-Next 迴圈時,若步進值等於1, 則可以省略格式中的 Step 步進值,例如 「For I = 1 To 10」即表示「For I = 1 To 10 Step 1」。 For 計次變數 = 起始值 To 終止值 Step 步進值 敘述區塊 Next 計次變數

計次執行的 For-Next(3)-1 For-Next 是怎麼執行迴圈的呢?其實跟起始值、終止值、及步進值都有關係,讓我們以前面的程式為例,來研究 For – Next 的執行過程:

計次執行的 For-Next(3)-2 第一次進入迴圈時,計次變數 I 會被設定為起始值。 執行過迴圈內的敘述,來到 Next I,Next I 有兩個作用,首先會將 I 值加上步進值,然後回到迴圈的前頭,如此循環,形成迴圈。 最後這個程式在 I 值等於11時脫離迴圈。

For-Next 步進值>1時的例子 起始值等於3,終止值等於25,步進值等於6: 這個例子 I 值從 3 開始執行,每執行到 Next I 時, I 值加 6,所以 I 值的變化過程是 3、9、 15、21、27,到了 27 時,由於大於終止值25, 不再進入迴圈,所以印出的值有 3、9、15、21。 For I = 3 To 25 Step 6 Print I Next I

For-Next 步進值<0時的例子(1) For-Next 敘述中的步進值也可以是負數,但此時的起始值必須大於終止值,而 For-Next 判斷脫離迴圈的條件則變成:計次變數值<終止值,例如: For I = 10 To 1 Step -1 Print I Next I

For-Next 步進值<0時的例子(2) For I = 10 To 1 Step -1 Print I Next I

For-Next 實例研究1-1 計算 Sum = 1 + 2 + 3 + ... + 20。這個題目很簡單,寫成以下程式如何呢? Sum = 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20 Print Sum

For-Next 實例研究1-2 我們可以把 Sum = 1 + 2 + 3 + … + 20 表示成:

For-Next 實例研究1-3 而由於 Sum 的初值等於0,所以「Sum = Sum + 1 + 2 + 3 + … + 20」等於「Sum = 1 + 2 + 3 + … + 20」,因此「Sum = 1 + 2 + 3 + … + 20」可以視為 Sum = 0、Sum = Sum + 1、Sum = Sum + 2 … Sum = Sum + 20 連續運算的結果, 所以使用 For 迴圈來計算此一運算式最為合適,程式如下: Sum = 0 For I = 1 To 20 Sum = Sum + I Next I Print Sum

For-Next 實例研究2-1 計算 Sum = 1 + 4 + 7 + 10 + … + 301。 Sum = 0 For I = 1 To 301 Step 3 Sum = Sum + I Next I Print Sum

While-Wend 迴圈 如果程式執行前已經確定迴圈要執行的次數, 使用 For-Next 十分方便,如果不能確定迴圈要 執行的次數,可以考慮使用 While-Wend 迴圈, 其格式是: 意思是:只要 '條件式' 成立,就繞迴圈執行。 而每繞迴圈一次,須重新判斷條件式。 While 條件式 敘述區塊 Wend

While-Wend vs. For-Next 例如從 1 列印到 10 的程式也可以寫成: 這比起使用 For-Next 多了兩行程式,可見已知 迴圈的執行次數時,還是使用 For-Next 比較方 便。以下例子則因不知迴圈會執行幾次,適合 用 While-Wend。 I = 1 While I <= 10 ' 只要 I ≦ 10,就繞迴圈執行 Print I I = I + 1 Wend

While-Wend 的實例一 計算 2048 是 2 的幾次方。 程式如下: Private Sub Command1_Click() N = 0 ' 先假設是 0 次方 While 2^N < 2048 ' 2 的 N 次方還沒達到 2048 N = N + 1 ' 增加 1 次方,再試試看 Wend Print "2048 是 2 的"; N; "次方" End Sub

While-Wend 的實例二 While-Wend 也經常被應用在連續性的資料輸入上面,例如:持續讀取使用者輸入的資料,並加以判斷處理,直到使用者輸入了 “quit” 為止。 程式如下: Private Sub Command1_Click() X = InputBox(“請輸入指令”) While X <> “quit” ' 若輸入 ≠ “quit”,即進入迴圈 MsgBox “您輸入了 ” + X X = InputBox(“請輸入指令”) ' 繼續讀取資料 Wend MsgBox "您輸入了 quit,再見!" End Sub

迴圈的組成要件 舉凡迴圈都是由 “繞行迴圈” 及 “脫離迴圈 或繼續執行的條件式” 兩種敘述所組成的,以 While-Wend 為例: 其中 “繞行迴圈” 敘述的功用就跟 GoTo 一樣, 用來跳回迴圈的前頭,至於 “脫離迴圈或繼續 執行的條件式”,則是讓迴圈有條件地結束掉。

Do-Loop 迴圈(1) 最陽春的 Do-Loop 迴圈: 如果我們這樣寫: 將是一個無窮迴圈,因為迴圈中缺了 "脫離迴圈或繼續 執行的條件式"。 I = 1 Do Print I I = I + 1 Loop

Do-Loop 迴圈(2) 為了讓 Do-Loop 能夠結束迴圈,VB 提供了 While 及 Until 兩種條件判斷的敘述,來搭配 Do-Loop 使用,其中: 格式一 格式二 While 表示 "只要…,就…" Until 表示 "做…,直到…" Do While 條件式 敘述區塊 Loop Do 敘述區塊 Loop Until 條件式

Do-Loop 迴圈(3) 格式一例子 Do-While-Loop表示:只要 '條件式' 成立 ,就繼續執行迴圈。例如: I = 1 Do While I <= 10 ' 只要 I ≦ 10,就繼續執行迴圈, Print I ' 而當 I > 10 時,即脫離迴圈。 I = I + 1 Loop

Do-Loop 迴圈(4) 格式二例子 Do-Loop-Until 表示:執行迴圈,直到 '條 件式' 成立。例如: I = 1 Do ’ 執行迴圈,… Print I I = I + 1 Loop Until I > 10 ’ 直到 I > 10 為止, ’ 也就是 I > 10 時,脫離迴圈。

Do-Loop 迴圈(5)-1 如果比較 Do-While-Loop 及 Do-Loop-Until,我們發現 Do-While-Loop 是條件式成立時繼續執行迴圈,而 Do-Loop-Unitl 是條件式成立時脫離迴圈,除此之外,Do-While-Loop 會先判斷條件式再執行迴圈,而 Do-Loop-Until 則是先執行迴圈再判斷條件式,所以:

Do-Loop 迴圈(5)-2 I = 11 Do While I <= 10 ' 第一次判斷條件式就不成立,所以 Print I ' 迴圈內的敘述一次也沒有執行。 I = I + 1 Loop I = 11 Do ‘ 先進入迴圈執行一次 Print I I = I + 1 Loop Until I > 10 ’ 也是第一次判斷, 條件式就不成立, ' 但迴圈內的敘述至少執行過一次。

Do-Loop 迴圈(6) 以下是 Do-While-Loop 及 Do-Loop-Until 的比較表: Do-Loop 格式 條件式成立時 迴圈及條件式的先後次序 Do-While-Loop 繼續執行迴圈 先判斷條件式,再執行迴圈 Do-Loop-Until 脫離迴圈 先執行迴圈,再判斷條件式

Exit Do 與 Do-Loop(1) Exit Do 是脫離 Do-Loop 迴圈的意思,例如:

Exit Do 與 Do-Loop(2) 如果利用 Do-While-Loop 及 Do-Loop-Until 來撰寫迴圈,判斷迴圈繼續執行或脫離的條件式,不是放在迴圈的前頭,就是後頭,但如果利用 Exit Do,再配合 If-Then 敘述的使用,則可以把繼續執行或脫離迴圈的條件式放在迴圈內的任何位置,如下: Do : If 條件式 Then Exit Do : Loop

Exit Do 與 Do-Loop(3) 例如: 此例中,脫離迴圈時的 I 值等於 10,與前面 Do- While-Loop 或 Do-Loop-Until 的 I 值等於 11 不 同。 I = 1 Do Print I If I = 10 Then Exit Do ' 當I=10 時,立刻跳出,不再執行以下敘述 I = I + 1 Loop

巢狀迴圈(1) 在迴圈裡面也可以又有迴圈,這種情形即稱為巢狀迴圈,例如:

巢狀迴圈(2) 這個程式執行後,其輸出結果如下: 外迴圈變數 1 內迴圈變數 1 內迴圈變數 2 內迴圈變數 3 外迴圈變數 2 內迴圈變數 1 內迴圈變數 2 內迴圈變數 3 外迴圈變數 3 內迴圈變數 1 內迴圈變數 2 內迴圈變數 3

巢狀迴圈(3) 我們可以看出外迴圈每執行一次,內迴圈即執行一週期(本例是 3 次),所以內迴圈內的敘述總共會被執行 3×3 次,即外迴圈執行次數×內迴圈一週期的執行次數。 在實際應用上,內迴圈的執行次數也經常會由外迴圈變數的值來控制。

巢狀迴圈(4) 例子: 結果印出: For I = 1 To 5 Print "I ="; I, "J ="; For J = 1 To I ' 內迴圈的執行次數,由外迴圈 Print J; ' 變數 I 的值來控制。 Next J Print Next I I = 1 J = 1 I = 2 J = 1 2 I = 3 J = 1 2 3 I = 4 J = 1 2 3 4 I = 5 J = 1 2 3 4 5

7-5 程式的流程追蹤

逐行執行程式(1) 在程式的開發中,如果程式執行結果不正確,我們也希望能夠逐行執行,以找出問題之所在。 在 VB 裡面,如果我們按開始命令鈕啟 動程式,程式會一路執行下去,直到執 行完所有的敘述為止,如果我們想逐行 執行程式,啟動程式的方法必須改按 F8 鍵或功能表的「偵錯/逐行」。

逐行執行程式 – 實例練習 以下程式在計算存款一年後的總金額,總金額 =本金×(1+年利率)。 首先在表單上佈置一命令鈕,並且將表單的 AutoRedraw 屬性設定為 True,然後把以上程 式寫到命令鈕裡面。 Private Sub Command1_Click() V = 10000 ' 本金 I = 0.07 ' 年利率 S = V * (1 + I) ' 計算總金額 Print S End Sub

逐行執行程式 – 實例練習 Step1 按下 F8鍵啟動程式的執行,然後按下表單上的命令鈕 啟動上述程式,接著我們可以看到程式視窗被彈到最 前端,如下: 請注意程式的第一行前面有箭號,箭號的目的在指出 下一個被執行的敘述。

逐行執行程式 – 實例練習 Step2 接著每按 F8鍵一次,VB 就會執行箭號所指的敘述,然後把箭號移到下一個敘述。

逐行執行程式 – 實例練習 Step3 按 F8鍵執行 V = 10000。按 F8鍵執行 I = 0.07。按 F8鍵執行 S = V * (1 + I)。最後箭號移到 Print S上。 您是否注意到每按 F8鍵執行一行敘述後, VB 都會進入中斷模式,所以我們可以按 Ctrl 鍵 + G 鍵或功能表的「檢視/即時運 算視窗」把即時運算視窗調到最前端, 然後利用它來檢驗程式執行的結果。

逐行執行程式 – 實例練習 Step4 例如以下就是利用即時運算視窗來檢驗 V、I、 S 的值: 最後再按下 F8 鍵執行 Print S,然後檢視表單, 可看到 Print S 執行的結果。

逐行執行程式 – F8鍵與開始命令鈕 F8 鍵是逐行執行程式,開始命令鈕則是一路執行下去,不過這兩種執行模式是可以切換的。如果一開始按 F8 鍵逐行執行程式,中途想進入一路執行的模式,只要再按開始命令鈕即可;如果一開始就按開始命令鈕一路執行,想中途切到逐行執行的模式,必須先進入中斷模式(按中斷命令鈕或 Ctrl 鍵 + Break 鍵 ),接著才可以利用 逐行執行程式。

設定程式的中斷點 逐步執行對於檢驗程式的執行過程,當程式很大,或迴圈重複執行的次數很多時,逐行執行就要花費很多時間,所以有時候我們希望 VB 不要每執行一行都中斷一次,而只要在我們設定的地方中斷就好了,這樣子可以省去逐步按 F8 鍵,逐行執行所浪費的時間。

設定程式的中斷點 -- 實例練習 以前一個程式為例來說明: Private Sub Command1_Click() V = 10000 I = 0.07 S = V * (1 + I) ' 希望在此設定中斷點 Print S End Sub

設定程式的中斷點 -- 實例練習Step1 打開程式視窗,並且把輸入游標移到欲中斷的 敘述上,然後按下 F9鍵 ,此時該行敘述前面 會出現小圓圈,如下: 這表示我們已經成功地把中斷點設定在這行敘 述了。

設定程式的中斷點 -- 實例練習Step2 啟動程式的方法不是按下 F8 鍵逐行執行的,而是按下一路執行的開始命令鈕,然後再按下表單上的命令鈕,啟動上述程式,程式就會一直執行到中斷點的地方才暫停,如下:

設定程式的中斷點 -- 實例練習Step3 所謂程式暫停就是進入中斷模式,所以接下來我們可以使用即時運算視窗、按 F8 鍵逐行執行,或者再按開始命令鈕繼續執行。

設定程式的中斷點 -- 實例練習Step4 設定好的中斷點,也可以依需要將它們清除,方法是把輸入游標移到中斷點的敘述上,按下 F9鍵 ,此時敘述前面的小圓圈會消失,就表示清除中斷點了。

設定程式的中斷點 -- Stop 敘述(1) 以上方法是利用 F9鍵 來設定中斷點,有一個 敘述 – Stop 也有同樣的功效,例如: 這樣子 VB 每執行到 Stop 敘述時,就會暫停程 式進入中斷模式。 Private Sub Command1_Click() V = 10000 I = 0.07 Stop ' VB 執行到此一敘述即會進入中斷模式 S = V * (1 + I) Print S End Sub

設定程式的中斷點 -- Stop 敘述(2) Stop 敘述的功用與 F9鍵 完全相同,但Stop 敘述可以隨著專案的儲存而一起被儲存起來,而利用 F9鍵 所設定的中斷點,則會在退出 VB 時一併消失掉。