第 7 章 流程控制 ─ 重複執行同一段程式.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

Introduction to C Programming
計算機程式語言實習課.
第8章 迴圈與訊息視窗 [利息計算程式和猜數字遊戲]
認識倍數(一) 設計者:建功國小 盧建宏.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
第五章 迴圈結構 授課老師:___________.
Chapter 5 迴圈.
Chapter 1 複習.
簡易C++除錯技巧 長庚大學機械系
9/28號專題報告 Web網頁遊戲 曾建瑋.
2-3 基本數位邏輯處理※.
Google Data API Spreadsheet
Controls.
SQL Stored Procedure SQL 預存程序.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
第4章 程序控制结构与算法基础.
程式語言Visual Basic 重複結構 黃瀧輝 老師 Long Hwai,Huang.
第6章 迴圈結構 6-1 計數迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-4 While/End While迴圈 6-5 跳出與繼續迴圈
Visual Basic 物件導向程式設計簡介.
PR150 (125K) Reader RS232.
邏輯關係運算 == 等於 & 且 (logical and) ~= 不等於 | 或 (logical or) < 小於
第一章 直角坐標系 1-1 數系的發展.
第一單元 建立java 程式.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
第二次電腦實習課 說明者:吳東陽 2003/10/07.
Ch20. 計算器 (Mac 版本).
網路程式設計期末project B 張芸菱.
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
HTML – 超連結與圖片 資訊教育.
條件判斷指令 -if 指令 -switch 指令 迴圈指令 - for 迴圈 - while迴圈 - break、continue 指令
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
Introduction to C Programming
打地鼠(陣列版).
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
CH05. 選擇敘述.
期末考.
挑戰C++程式語言 ──第8章 進一步談字元與字串
雙按button1,2,3,4 Method 方法/動作 textBox2.Text textBox1 textBox3.Text 轉為數字 c是數字 int c = int.Parse(textBox1.Text) + …; textBox3.Text = c.ToString();
Controls.
CVPlayer下載及安裝& IVS操作說明
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
自停式向下計數器 通訊一甲 B 楊穎穆.
函數應用(二)與自定函數.
亂數 隨機產生亂數 Random類別支援的方法: Next多載方法 Next :傳回亂數。
Scratch: 動畫或遊戲編程 任務10:尋找小鬼.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
12797: Letters ★★★☆☆ 題組:Problem Set Archive with Online Judge
11058: Encoding ★☆☆☆☆ 題組:Problem Set Archive with Online Judge
作業
Commando War ★★☆☆☆ 題組:Problem Set Archive with Online Judge
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
1-1 二元一次式運算.
可變式計數器 通訊一甲 B 楊穎穆.
第一章 直角坐標系 1-3 函數及其圖形.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
迴圈(重複性結構) for while do while.
Scratch: 動畫或遊戲編程 任務6:太空旅遊.
多國語系 建國科技大學 資管系 饒瑞佶.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
Array(陣列) Anny
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

第 7 章 流程控制 ─ 重複執行同一段程式

本章重點提要 7-1 For-Next:計次執行的迴圈 7-2 While 與 Do-Loop:有條件執行的迴圈 7-3 直接跳出迴圈的敘述 7-4 巢狀迴圈 7-5 Timer 控制項:定時執行程式

本章閱讀建議 上一章我們介紹了 If、Select Case 等『選擇性執行』的流程控制, 本章則要介紹『迴圈』, 就是讓同一段程式不斷重複執行, 直到某些條件發生變化為止。這二種流程控制都非常重要, 如能善加應用, 就能寫出更多變化且條理分明的程式。 迴圈的原理其實不難, 請讀者先看完底下的重點介紹, 然後再往下學習時就能事半功倍。

本章閱讀建議 7-1 For-Next:計次執行的迴圈:最經典的例子就是由 1 加到 100, 若使用 For-Next 迴圈只需 3 行程式, 而不用真得去加 100 次!這就是迴圈的威力。 7-2 While 與 Do-Loop:有條件執行的迴圈:如果迴圈的次數不一定, 那麼就可改用 While 或 Do-Loop 敘述, 以便依照特定條件來決定是否繼續迴圈。

本章閱讀建議 7-3 直接跳出迴圈的敘述:在迴圈中可使用 Exit For、ExitWhile、Exit Do 等指令來直接跳出迴圈, 它們通常會搭配 If 來使用, 例如『If 某狀況發生 Then Exit For』。 7-4 巢狀迴圈:迴圈中還有迴圈, 就形成巢狀迴圈。巢狀迴圈可以輕鬆處理像是『九九乘法表』之類, 看似複雜但又有規則可循的問題。 7-5 Timer 控制項:定時執行程式:Timer 控制項可以定時觸發Tick 事件, 就好像時鐘會每秒鐘發出滴答聲 (Tick)一樣。最經典的例子是小時鐘程式, 因為我們可利用 Timer 控制項來每秒鐘更新一次時間。

7-1 For-Next:計次執行的迴圈 在寫程式時, 常常會遇到一些需要重複執行的動作, 此時如果知道要重複的次數, 那麼使用 For-Next 敘述最為方便。

簡單型的 For-Next 迴圈 在 For-Next 敘述中至少要包含『計數器』、『起始值』、與『終止值』, 例如底下由 1 加到 100 的範例:

簡單型的 For-Next 迴圈 For 後面要接一個計數器 (i), 其計數範圍是 1 到 100 (i = 1 To100)。當第一次執行迴圈時, 計數器的值會等於 1 (起始值), 然後每執行一次迴圈計數器就加 1, 如此重複執行到計數器等於 100(終止值), 然後結束迴圈, 繼續執行迴圈之後的程式。

簡單型的 For-Next 迴圈

簡單型的 For-Next 迴圈 因此, 以上程式會執行 100 次迴圈, 第 1 圈時 (i=1) sum 會加 1, 第2 圈時 (i=2) sum 再加 2, 第 3 圈時 (i=3) sum 再加 3...:

簡單型的 For-Next 迴圈 撰寫一個由 9 加到 999 的程式。 請建立 Windows Form 應用程式專案 Ch07-01。

簡單型的 For-Next 迴圈 用滑鼠雙按表單, 然後在 Form1 的 Load 事件程序中加入以下程式:

簡單型的 For-Next 迴圈 請問前面的程式共會執行多少次迴圈? 999 - 9 + 1 = 991 次。

簡單型的 For-Next 迴圈 請寫程式計算由 5 乘到 15 的結果。(注意, 5x6x7x...x15 結果會是一個非常大的數值!)

簡單型的 For-Next 迴圈 以上我們宣告變數 m 來儲存相乘的結果, 但由於是計算乘法, 所以必須先將 m 的初值設為 1 (不指定初值時預設為 0, 而 0 乘任何數的結果仍為 0)。 另外, 如果在迴圈中不斷進行累加或累乘, 則有可能在不知不覺中產生很大的數值!像本例的計算結果就超出了整數可表達的範圍(-2147483648 ~ 2147483647), 因此我們特別將 m 宣告為 Long 型別。

簡單型的 For-Next 迴圈 如果是宣告為 Integer 型別, 那麼在執行時會出現如下的錯誤訊息:

指定增減量的 For-Next 迴圈 在前面的範例中, 都是讓計數器每執行完一迴圈就加 1, 這是 For-Next 的預設狀況。但有時我們會希望計數器每迴圈能加 2, 例如計算連續偶數的累加;或是每迴圈能減 1, 例如由 100 加到 1, 這時就可用 Step 來指定計數器的『增減量』:

指定增減量的 For-Next 迴圈 『增減量』就是用來控制每迴圈計數器要加多少或減多少, 如果起始值 < 終止值, 那麼增減量應為正值;反之,如果起始值 > 終止值(例如由 100 To 1), 那麼增減量應為負值。

指定增減量的 For-Next 迴圈 在表單中畫出金字塔, 如下圖所示。 請建立 Windows Form 應用程式專案 Ch07-02。

指定增減量的 For-Next 迴圈 加入一個 Label 控制項, 並設定屬性如下:

指定增減量的 For-Next 迴圈 在表單空白處雙按滑鼠, 然後在 Form1 的 Load 事件程序中加入以下程式:

指定增減量的 For-Next 迴圈 首先我們將 Label1 的 TextAlign (文字對齊) 屬性設為MiddleCenter (垂直水平均置中對齊), 然後利用迴圈來產生每一列所需的 $ 字串。 其中的 StrDup(n, s) 函式可以產生包含 n 個 s 的字串, 而 vbCrLf則為 VB 預先定義好的換行符號。

指定增減量的 For-Next 迴圈 在 StrDup(n, s) 函式中, 若 s 包含 2 個以上的字元, 則只會取出第一個字元來重複 n 次, 例如 StrDup(3, "ab") 的傳回值為 "aaa"。

指定增減量的 For-Next 迴圈 在表單中畫出倒三角形, 如下圖所示。

指定增減量的 For-Next 迴圈 所有的設定均與上題相同, 只須更改 For 的起始值、終止值、與增減量:

要避免『起始值、終止值、與增減量』的錯亂! VB 會依照增減量的正負, 來決定計數器如何與終止值比對。當增減量為正值時, 計數器必須小於或等於終止值, 否則結束迴圈;當增減量為負值時, 則計數器必須大於或等於終止值, 否則結束迴圈:

要避免『起始值、終止值、與增減量』的錯亂!

要避免『起始值、終止值、與增減量』的錯亂!

要避免『起始值、終止值、與增減量』的錯亂! 如果將起始值、終止值、與增減量的關係弄錯了, 例如: 由於增減量為負數, 因此執行迴圈的條件是『i >= 5』, 但一開始時 i 的值為 1,所以會因不符條件而立即結束迴圈, 結果連一次迴圈都沒執行到!所以當我們使用負的增減量時, 一定要特別小心。

指定增減量的 For-Next 迴圈 在表單中畫出用數字拼出來的沙漏形狀, 如下圖所示。

指定增減量的 For-Next 迴圈 所有的設定與上題相同, 只須將程式改為 2 個迴圈 (分別畫出上、下二個三角形), 並利用計數器 (i) 來算出每行要顯示幾個字元:

指定增減量的 For-Next 迴圈 在以上程式中, 計數器是用來代表每行要顯示多少個字元;但由於每行要顯示的數字不同, 因此我們還要利用計數器來算出每行要顯示的數字 (7→1→7), 算法為『CStr(i \ 4 + 1)』, 其中 \ 是整數除法(會捨去餘數), 而 CStr() 函式則可將數值轉換為字串。 在本例中請不要用 Str() 函式來將數值轉為字串, 因為 Str() 轉出來的正數都會在前面加一個空白字元, 例如 8 會轉為 " 8", 而 StrDup(i, "8") 則只會重複 " 8" 中的第一個空白字元。

選誰來當計數器? 在前面畫沙漏的練習中, 我們是以『每行要顯示多少個字元』做為計數器(25→1, 5→25), 其實也可以改用『每行要顯示的數字』做為計數器 (7→1,2→7):

選誰來當計數器?

就地宣告計數器 到目前為止, 我們都是使用已宣告好的變數來做為 For-Next 的計數器, 其好處是在迴圈之外也可使用該變數, 例如:

就地宣告計數器

就地宣告計數器 由上表可看出, 當迴圈執行 5 次之後, i 的值會再加 1 而變成 6, 此時就會因不符條件而結束迴圈, 然後執行迴圈後面的 MsgBox(i),結果輸出 6。

就地宣告計數器 不過, 通常我們並不需要在迴圈之外使用計數器, 此時就可直接在For-Next 中宣告計數器變數, 而不必事先用 Dim 宣告。例如:

就地宣告計數器 在 For-Next 中『就地宣告』的計數器變數, 只能在 For-Next 中使用, 在 For-Next 之外則無法存取。 而在不同 For-Next 中宣告的計數器變數, 彼此之間並不會有影響。

就地宣告計數器 但在For-Next 之外, 則不能再用 Dim 來重複宣告同名的變數, 例如:

就地宣告計數器 請使用 For-Next 就地宣告計數器的方式, 分別計算由 1 到 1000 之間,『3 的倍數的加總』與『7 的倍數的加總』, 並顯示結果如下:

就地宣告計數器

7-2 While 與 Do-Loop:有條件執 行的迴圈 While 與 Do-Loop 都是利用『條件式』來決定要繼續迴圈或結束迴圈。While 的寫法比較簡單, 底下我們先來介紹。

While 迴圈 While 迴圈是由 While 及 End While 所組成, 寫法如下:

While 迴圈 當條件式為 True 時, 就會繼續執行迴圈, 直到條件式變成 False 為止。 底下我們用 While 迴圈來模擬『For i = 1 To 10』的功能:

小心無窮迴圈! 以上程式最容易漏寫的是第 4 行『i = i ?+ 1』(因為在 For-Next 敘述中, 每當執行到 Next 時計數器就會自動增減, 而不用我們寫程式來增減), 一旦忘了寫, 那麼 i 的值就不會改變 (永遠為 1), 因此 i <= 10 的條件也永遠為 True, 如此迴圈會不斷執行, 而造成『無窮迴圈』!

小心無窮迴圈! 由此可知, 如果迴圈的次數固定, 那麼還是使用 For-Next 迴圈比較好, 即簡單又不容易出錯:

While 迴圈 請寫一個檢查登入帳號的程式, 除非使用者輸入 "Ken"、"Sue"、或"Joy", 否則就一直要求使用者重新輸入。

While 迴圈 請建立 Windows Form 應用程式專案 Ch07-03。 step 2 在表單上雙按滑鼠, 撰寫以下 Load 事件程序:

While 迴圈 程式一開始會先宣告字串變數 id 並設定初值為 "na", 接著用 While迴圈來不斷要求使用者輸入, 只要使用者沒有輸入正確的帳號或空白 (按取消鈕也會傳回空白), 迴圈就會一直持續。 在迴圈結束之後, 則使用 If() 運算子來判斷 id 是否為空白 (空白表示取消輸入), 然後據以顯示不同的訊息。

While 迴圈 修改前面程式 (或開啟範例專案 Ch07-03ok), 當使用者輸入錯誤超過 3 次, 即結束程式。

While 迴圈 我們在程式中多加了一個 cnt 來計算次數, cnt 預設為 0, 使用者每輸入一次就將 cnt 加 1。當 cnt 到達 3 次時, 就強制將 id 設為空白, 如此便可結束迴圈並顯示 "再見!"。

Do-Loop 迴圈 Do-Loop 的功能和 While 類似, 但在寫法上更有彈性, 可分為下面 3 種: 沒有條件式的迴圈 先判斷條件再執行迴圈 先執行迴圈, 再判斷條件

沒有條件式的迴圈

沒有條件式的迴圈 這是最陽春的 Do-Loop 迴圈, 由於沒有條件限制, 因此會不斷地執行迴圈, 而變成『無窮迴圈』!效果相當於 While 迴圈: 我們有時也會使用到『無窮迴圈』, 但一定會在迴圈中搭配 Exit Do 或 Exit While 來跳離迴圈。

先判斷條件再執行迴圈 這種寫法的效果和 While 迴圈相同:

先判斷條件再執行迴圈 不過請注意, Do While 的『While』(當...) 還可變形為『Until』(直到...), 二者的意義恰好相反:

先判斷條件再執行迴圈 舉例來說, 底下二段程式的執行結果完全相同 (都會顯示 15):

先判斷條件再執行迴圈

先執行迴圈, 再判斷條件 有時我們會希望先執行一次迴圈, 然後才判斷條件, 看要不要繼續下一迴圈。此時可將 While (或 Until) 放在 Loop 之後:

先執行迴圈, 再判斷條件

先執行迴圈, 再判斷條件 例如前面檢查登入帳號的程式, 就有這種需要:

先執行迴圈, 再判斷條件 以上程式雖然可以正常運作, 但若改成下面的寫法, 將更能符合邏輯:

先執行迴圈, 再判斷條件 當然, 您也可以將 Loop While 改成相反的 Loop Until 寫法, 雖然邏輯不同, 但結果是一樣的:

先執行迴圈, 再判斷條件 以上 Loop While 與 Loop Until 的條件式剛好相反。不過要注意,當條件式相反時, And 會變成 Or 喔!反之亦然。例如:

即然有 While 了, 為什麼還要 Until 呢? Do-Loop 的 While 和 Until 其實只需要一種就夠用了, 為什麼要設計二種呢? 這就是 VB 體貼初學者的地方, 因為有些情況適合 Until, 有些情況則適合 While,若硬要轉換則容易頭腦打結!就以前面檢查帳號的範例 (Ch07-03) 來說, 題目是這樣出的:

即然有 While 了, 為什麼還要 Until 呢? 『除非使用者輸入 "Ken"、"Sue"、或 "Joy", 否則就一直要求使用者重新輸入。』 此時就適合使用 Until 的邏輯:

Do-Loop 迴圈 寫一程式來展示『蟑螂爬行的英姿』, 如下圖所示:

Do-Loop 迴圈

Do-Loop 迴圈 請建立 Windows Form 應用程式專案 Ch07-04。 在表單中加入一個 Button ( 更名為 play) 及 PictureBox( 更名為 roach) 控制項, 並設定如下:

Do-Loop 迴圈

Do-Loop 迴圈 雙按 play 按鈕, 建立 play.Click 事件程序:

Do-Loop 迴圈 我們先將 roach 控制項 (以下簡稱蟑螂) 設為隱藏, 這樣無論使用者如何放大視窗, 蟑螂在尚未播放時都不會被看到。另外, 我們在play 按鈕上也顯示蟑螂圖片 (以圖片靠左、文字靠右的方式), 由於『蟑螂.gif』是動畫圖片, 因此按鈕上的蟑螂是會動的喔!

Do-Loop 迴圈 當使用者按下 play 按鈕時, 程式會先將按鈕隱藏起來, 然後把蟑螂搬移到左邊界之外, 並設為可看見。接著就進入迴圈, 讓蟑螂不斷向右爬, 直到爬出右邊界為止;最後則將蟑螂隱藏起來, 然後再讓按鈕顯示出來。

Do-Loop 迴圈 控制項的 Left、Top 屬性就是其左上角的 x、y 座標, 意義和Location 的 x、y 子屬性 (在 4-2 節介紹過) 相同, 但 Left、Top 只能用程式存取 (在屬性窗格中找不到), 並且可以直接設定而不用先建立 Point 物件。

Do-Loop 迴圈 程式一開始會將蟑螂的 Left 屬性設為『0 - roach.Size.Width』, 由於蟑螂的寬度為 44, 因此 Left 會變成 -44, 也就是在表單左邊界再往左 44 點的地方。至於爬行的終點, 則是當 Left 超過表單的右邊界時:

Do-Loop 迴圈 在爬行的過程中, 每一迴圈都將蟑螂的 Left 屬性加 1, 因此蟑螂會往右爬一點。但由於程式執行的速度太快, 還沒看清楚就爬完了!所以必須讓蟑螂每爬一步就休息一下, 方法如下:

Do-Loop 迴圈 以上二行都是 .NET Framework 的功能, 我們可以直接拿來使用。如果想讓蟑螂爬慢一點, 則可讓蟑螂多休息一下, 例如將參數 1 改為 3, 則每爬一次就休息 3/1000 秒。

Do-Loop 迴圈 接續前例 (或開啟範例專案 Ch07-04ok), 將程式改為『Do...LoopUntil』的寫法, 並想辦法讓蟑螂在爬行時會上下晃動, 而非一直線呆板地前進, 以提高真實感。

Do-Loop 迴圈 我們可以讓蟑螂每爬 10 步, 就隨機產生一個介於 -3 到 3 的亂數, 來改變蟑螂的 y 座標 (Top 屬性), 讓蟑螂可能往上 1~3 點、不動、或往下移動 1~3 點。產生亂數的公式為:

Do-Loop 迴圈 如果想取得介於 A 到 B 之間的隨機整數, 則公式為:CInt(Int((B - A + 1) * Rnd() + A))。

Do-Loop 迴圈

7-3 直接跳出迴圈的敘述 無論是 For、While、或 Do 迴圈, 都可用對應的 Exit For、ExitWhile、或 Exit Do 來直接跳出迴圈, 例如:

直接跳出迴圈的敘述 請寫一程式, 可計算指定範圍內所有整數的乘積 (相乘的結果), 但在計算過程中如果乘積大於一億, 就停止計算並顯示訊息:

直接跳出迴圈的敘述 請開啟範例專案 Ch07-05, 我們已準備好所需的控制項:

直接跳出迴圈的敘述 在 上雙按, 建立『計算.Click』事件程序如下:

直接跳出迴圈的敘述 由於 100000000 (一億) 太長了容易寫錯, 所以我們改用比較易讀的 10 ^ 8 來表示, 這二種寫法的執行結果與執行效率完全相同。另外, Format() 函式可將資料格式化:

直接跳出迴圈的敘述 ”#” 代表要顯示一個 0~9 的數字, 但若該位置沒有數字則不顯示;"0" 的意義和 "#" 相同, 但若該位置沒有數字則顯示 0, 例如Format(2, "00") 會傳回 "02"。在數字之間加逗號, 則表示格式化數字時要加千位符號。

在 For 迴圈中, 可以自行更改計數器的值嗎?

在 For 迴圈中, 可以自行更改計數器的值嗎? 以上迴圈只會執行一次!因為當執行完第一圈時, i 的值已經是 100 了, 在進入一下迴圈之前會先加 1 而變成 101, 此時由於已超過終止值 100, 所以會立即結束迴圈。 我們雖然可以任意更改計數器的值, 甚至利用這種方法來跳離迴圈, 但由於可讀性較差, 又容易出錯, 因此最好盡量少用這種寫法。

直接跳出迴圈的敘述 接續前例 (或開啟範例專案 Ch07-05ok), 請修改程式為只計算偶數的乘積。

直接跳出迴圈的敘述

跳過本次迴圈:Continue ... VB 除了 Exit 外, 還提供了 Continue 指令, 如果想要跳過本次迴圈中尚未執行的敘述, 而直接開始下一迴圈, 則可使用 Continue For、Continue While、或 ContinueDo 指令。例如:

跳過本次迴圈:Continue ... 例如當我們只要處理偶數時, 即可用 Continue 來略過奇數值: 一般來說, 使用 If...Then... 就可以達到 Continue 的功能, 因此讀者只要知道有這個指令就好, 倒不必用它來增加程式的複雜度。

7-4 巢狀迴圈 上一章我們介紹過巢狀的 If 結構, 就是在 If...End If 之內還可以有If...End If。其實不管是 If、For-Next、或是 While、Do-Loop 等,彼此之間都可以相互形成巢狀結構, 而且沒有層數的限制。例如:

巢狀迴圈 請繪製以數字排出的三角形, 如下圖所示:

巢狀迴圈 請開啟範例專案 Ch07-06 , 我們已加入 Label 控制項並設好相關屬性:

巢狀迴圈 在表單空白處雙按滑鼠, 然後在表單的 Load 事件程序中加入以下程式:

巢狀迴圈 在巢狀的 For-Next 結構中, 內圈的迴圈次數常會隨著外圈的計數器而變化。以本例來說, 外圈的 i 是代表目前顯示三角形的是第幾層 (共有 1~9 層), 而內圈就是要實地跑 i 次以串接出 1~i 的字串,例如在第 3 層時, 內圈就要跑 3 次以組出 "123" 的字串。

巢狀迴圈

巢狀迴圈 將前面程式 (可開啟 Ch07-06ok 來使用) 改為畫出 10 層的倒三角形, 且最下的數字為 0。另外, 請讓程式在執行第一次迴圈時不要串接換行符號, 如下圖所示。

巢狀迴圈

巢狀迴圈 繪出九九乘法表, 如下圖所示:

巢狀迴圈 建立 Windows Form 應用程式專案 Ch07-07。 在表單中加入 Label 控制項, 並如下設定:

巢狀迴圈 在表單空白處雙按滑鼠, 撰寫表單 Load 事件程序:

巢狀迴圈 外圈的 i 代表左乘數, 內圈的 j 則為右乘數 (即 i x j)。外圈每跑一次, 內圈就會跑 9 次, 因而產生 9 個乘項;例如在顯示第 3 排(i=3) 時, 內圈會跑 9 次而產生 “3x1= 3 3x2= 6 3x3=9... 3x9=27”等 9 個乘項。

巢狀迴圈 這個程式比較要注意的是『上下對齊』的問題: 有些乘積為個位數, 有些則為二位數, 因此如果是個位數則要在前面多加一個空白, 以便和二位數的乘積對齊。 Label 控制項的字型預設為『新細明體』, 這是一種非固定寬度的字型, 也就是每個字母的寬度可能不同, 例如 "W" 會比 "i" 寬很多, 另外還會壓縮空白字元, 以增加美觀性:

巢狀迴圈 為了達到上下對齊的效果, 我們必須選用『固定寬度的字型』才行, 例如『細明體』。

巢狀迴圈 接續前例 (或開啟 Ch07-07ok), 為了讓比較小的小朋友背誦, 請將九九乘法表轉正, 並讓乘積大於 30 的乘項不要顯示出來, 如下圖所示:

巢狀迴圈 先將 Label1 的 TextAlign 屬性改為 MiddleLeft (垂直置中、水平靠左對齊), 然後把迴圈內『i & "x" & j』對調為『j & "x" & i』, 最後再加一行程式 (下面灰底的敘述) 即可

巢狀迴圈

7-5 Timer 控制項:定時執行程式 Timer 控制項就像計時器一樣, 可以每隔固定的時間就引發 Tick(滴答聲) 事件, 例如我們設定 2 秒滴答一次, 那麼每 2 秒就會執行Tick 事件程序一次。使用 Timer 控制項的流程如下: 將 加到表單中:

Timer 控制項:定時執行程式

Timer 控制項:定時執行程式 在 Timer 控制項的 Interval 屬性設定 Tick 的時間間隔( 單位是毫秒, 即千分之一秒), 並將 Enabled 屬性設為 True 來開啟定時功能。

Timer 控制項:定時執行程式 撰寫 Timer 控制項的 Tick 事件程序 ( 雙按 Timer 控制項即可自動加入以下的程式):

Timer 控制項:定時執行程式 製作一個電子時鐘, 如下圖所示: 請建立 Windows Form 應用程式專案 Ch07-08。

Timer 控制項:定時執行程式 在表單中加入一個 Label 及一個 Timer 控制項, 並如下設定:

Timer 控制項:定時執行程式

Timer 控制項:定時執行程式 在 Timer1 上雙按滑鼠, 然後建立 Timer1.Tick 事件程序:

Timer 控制項:定時執行程式 按[F5] 鍵測試看看:

Timer 控制項:定時執行程式 在程式視窗上方分別選取 及 在程式視窗上方分別選取 及 ,然後輸入 Form1 的 Load 事件程序, 讓程式一開始執行就更新一次時間:

Timer 控制項:定時執行程式 接續前例 (或開啟 Ch07-08ok), 繼續加入以下功能:

Timer 控制項:定時執行程式 請先在表單中加入 2 個 CheckBox 控制項, 並如下設定:

Timer 控制項:定時執行程式

Timer 控制項:定時執行程式 利用 Timer 控制項製作『會反彈的足球』。

Timer 控制項:定時執行程式 請建立 Windows Form 應用程式專案 Ch07-09。 在表單中加入一個 PictureBox 及一個 Timer 控制項, 並如下設定:

Timer 控制項:定時執行程式

Timer 控制項:定時執行程式 在 Timer1 上雙按滑鼠, 建立 Timer1.Tick 事件程序:

Timer 控制項:定時執行程式

Timer 控制項:定時執行程式 先我們在事件程序的外面宣告X位移與Y位移變數, 讓變數的值可以一直保存著 (直到表單關閉), 不會因事件程序的結束而消失。 接著在每 0.001 秒就執行一次的 Timer1.Tick 事件程序中, 將足球往水平及垂直方向各移動 1 點, 並檢查足球是否已到達視窗的邊界:如果到達左或右邊界, 就反轉X位移變數;如果到達上或下邊界, 則反轉Y位移變數。

Timer 控制項:定時執行程式

Timer 控制項:定時執行程式 接續前例 (或開啟 Ch07-09ok), 在表單右下角加入 3 個 Label 控制項, 並分別取名為快、慢、及速度表, 其功能與設定如下:

Timer 控制項:定時執行程式 如果要減慢足球的速度, 只要增加 Timer1 的 Interval 屬性即可 ( 例如每次增加 20 毫秒);但若要加快足球的速度, 由於Interval 最小值為 1, 而且不可是小數, 因此必須改用『增加移動量』的辦法:

Timer 控制項:定時執行程式

Timer 控制項:定時執行程式 接著撰寫快及慢的 Click 事件程序。由於我們同時使用『Timer1.Interval 屬性』及『N 變數』來控制速度, 所以必須同時考慮這二個因素, 例如先減慢一次 ( 將 Interval 加 20) 之後再加快, 則只須還原減慢的效果即可 ( 將Interval 減 20), 而不必增加N。

Timer 控制項:定時執行程式

Timer 控制項:定時執行程式 在設計視窗中雙按足球, 輸入 ball.Click 事件程序: 在執行時, 控制項如果重疊在一起, 則後加入的控制項會在上層 ( 越晚加入的控制項會在越上層):

Timer 控制項:定時執行程式 我們希望足球可以在上面, 因此請到設計視窗中如下操作: