第六章 迴 圈 結 構 課程名稱:程式設計 授課老師:李春雄 博士 各位同學大家好,我是李春雄老師,本學期所開設的課程名稱為「資料結構」, 第六章 迴 圈 結 構 課程名稱:程式設計 授課老師:李春雄 博士 各位同學大家好,我是李春雄老師,本學期所開設的課程名稱為「資料結構」, 今天所要為各位介紹的是第一章「資料結構導論」
本章學習目標 1.讓讀者瞭解迴圈結構的種類、語法及適用時機。 2.讓讀者瞭解計數迴圈與條件式迴圈的差異。 開始: 本章學習目標 有二項:
本章內容 6-1 何謂迴圈? 6-2 計數迴圈 6-3 For/Next迴圈 6-4 巢狀迴圈(Nested Loop) 6-5 條件迴圈(Do/Loop) 6-6 Do While/Loop迴圈 6-7 Do Until/Loop迴圈 6-8 Exit與Continue關鍵字 1-1 認識資料與資訊的關係: 其中,「資料」轉換成「資訊」必須要經過一連串處理過程,而這一連串的處理過程就是透過「程式」來處理。 1-2 何謂資料結構? 「資料結構」(Data Structures)主要是探討如何將資料更有組織地存放到電腦記憶體中,以提昇程式之執行效率的一 門學問。 1-3 何謂演算法?演算法就是「解決問題的方法」 1-4 程式設計概念: 步驟1. 分析所要解決的問題 步驟2. 設計解題的步驟 步驟3. 編寫程式 步驟4. 上機測試、偵測錯誤 步驟5. 編寫程 式說明書 1-5 結構化程式設計 利用「由上而下」的技巧,將程式分解成許多個獨立功能的模組。並且每一個模組都是由三種結構所組成。分別為循序結構、選擇結構及重複結構。 1-6 演算法的效率評估 指用來計算某些演算法所撰寫的程式,在經過編譯之後,實際執行所需要的時間。
6-1. 何謂迴圈? 【引言】 在我們的日常生活中,有許多事都是具有重覆性的,例如一天有 24 小時, 一星期有七天,同一門課要上18 次才能拿到學分,一個大學學位可以要修132個學分才能拿到。或每一位學生每一次月考要考五科,一學期要考三次月考,諸如此類的問題,如果只靠人工處理必定是一件非常煩的工作。 【示意圖】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-1. 何謂迴圈(續…) 【定義】是指讓某一段敘述反覆執行多次的程式。 【使用時機】一再重複性的動作。 【範例】 一、1+2+3+…+10(使用單層迴圈) 二、九九乘法表(使用雙層迴圈) 【實例】 如果想要列印全班50位同學的座位表時,如果利用循序結構,就比較沒有效率。如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【分類架構圖】 【分類】「計數迴圈」與「條件迴圈」 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-2 計數迴圈 【定義】是指依照「計數器」的設定值,來依序重複執行。 【示意圖】鬧鐘與碼表 【使用時機】已知程式的執行次數固定且重覆時,使用此種迴圈最適合。 【分類】 1. For/Next迴圈 2. 巢狀迴圈For/Next 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-3 For/Next迴圈 【定義】是指單層次的迴圈結構,在VB程式語言中,它最基本的迴圈敘述。 【使用時機】適用於「單一變數」的重覆變化。 【典型例子1】1+2+3+…+10 【典型例子2】10!(代表10階層,亦即1*2*3*…*10) 【示意圖】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【語法】 【動作原理】 一、「計數變數」設定為「初值」,然後執行迴圈內之「程式區塊」。 二、直到Next時,「計數變數」會自動加上「間隔值」。 三、此時,迴圈結構會自動檢查「計數變數」是否大於「終值」, (一)若超過則跳出迴圈; (二)否則將繼續執行迴圈敘述; (三)直到「計數變數」大於終值為止。 【與VB差異】在Next 之後不可接「計數變數」。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【流程圖】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實例】 1加到10的三種常見的求法 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實作1】 請撰寫1加到10之「累加、奇數和及偶數和」的程式碼 【完整步驟】 步驟一:將從「工具箱」加入物件到介面表單中 1. 開啟Basic4Android 2. 儲存到「C:\開發Android_APP\ch6\ ch6-3A .b4a」 3. 在B4A環境中開啟「Designer」設計視窗 4. 從「Designer」設計視窗上方「Add View」功能表加入物件到「Abstract Designer」介面中,如下圖所示: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
步驟二:設定物件的屬性之屬性值 物件名稱 屬性 屬性值 Label1 Text 輸入終值(N): Label2 輸出結果: Label3 Name lblResult EditText1 edtNumber Hint Text 請輸入終值 Button1 btnRun1 1+2+...+N之累加 Button2 btnRun2 1+2+...+N之奇數和 Button3 btnRun3 1+2+...+N之偶數和 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
(Designer/Tools/Connect To Device/Emulator) 將介面表單連結到Android模擬器 (Designer/Tools/Connect To Device/Emulator) 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
步驟三:撰寫程式碼(宣告介面表單中的物件及相關事件) --------- Sub btnRun1_Click '第一種累加 If edtNumber.Text="" Then Msgbox("您尚未輸入終值哦!","產生錯誤...") Else Dim i,N,Sum As Int N = edtNumber.Text For i = 1 To N '「計數變數」設定初值為1 Sum = Sum + i '執行「程式區塊」亦即總和累加 Next '「計數變數」會自動加上「間隔值1」 lblResult.Text =Sum End If End Sub 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
步驟四:測試執行結果 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實作2】 請撰寫一個程式,來追蹤1加到N中,I值的變化過程 【說明】完整的程式碼,請參考附書光碟。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實作3】 請設計一套可以讓使用者自行輸入「初值、終值及間隔值」,並且可以計算出迴圈的「重覆次數、真正的終值及總和」。 請設計一套可以讓使用者自行輸入「初值、終值及間隔值」,並且可以計算出迴圈的「重覆次數、真正的終值及總和」。 例如:For i=1 to 20 Step 3 【分析】 重覆次數=(終值 ─ 初值) \ 間隔值+1 重覆次數=(20-1) \ 3 +1 =19\3+1=6+1=7 (註:「\代表取商數」) 真正的終值=初值+(次數-1)*間隔值=1+(7-1)*3=19 總和(利用數學上的梯形面積計算方法)= 總和= = =70 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【執行結果】 【說明】完整的程式碼,請參考附書光碟。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 【說明】完整的程式碼,請參考附書光碟。
6-4 巢狀迴圈(Nested Loop) 【定義】是指迴圈內還有其他的迴圈,是一種多層次的迴圈結構。 【概念】它像鳥巢一樣,是由一層層組合而成。 【示意圖】 【使用時機】適用於「兩個或兩個以上變數」的重覆變化。 【典型例子1】九九乘法表 【典型例子2】數字三角形 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【示意圖】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【語法】 【動作原理】 當外迴圈的「計數變數1」增加一次時,則內迴圈必須執行一回合,也就是說,「計數變數2」必須從「初值2」執行到「終值2」。 【注意】在使用上需注意下列兩點: (1)迴圈不可交叉,即內迴圈的NEXT不可在外迴圈的NEXT之後。 (2)不同層次的迴圈不得使用相同變數。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實作】 請設計NN乘法表(可以讓使用者自行輸入) 【說明】完整的程式碼,請參考附書光碟。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法 【說明】完整的程式碼,請參考附書光碟。
【解析】 上述的九九乘法表共有內外兩層迴圈,當外迴圈「i變數」變動1次時,則內迴圈則要執行9次,所以,當外迴圈「i變數」由1~9時,內迴圈要執行81次。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實例2】 請設計「數字三角形」 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-5 條件迴圈(Do/Loop) 【引言】 一般而言,如果我們不能預先知道迴圈的次數的話,則必須要使用「條件迴圈」來解決。 【例如】 王爸爸第一天給小明10元,第二天給20元,第三天給30元,請問小明要儲存到5000元需要多少天?諸如此類的題目,最好使用條件式迴圈來處理比較容易。 【示意圖】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【分類】 1.前測試迴圈(先判斷條件式,再執行迴圈) 2.後測試迴圈(先執行迴圈,再判斷條件式) 【圖解說明】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-5.1 前測試迴圈 【定義】先判斷條件式,再執行迴圈。 【作法】 「執行前」先檢查是否符合條件式,若符合,則執行迴圈,若不符合,則跳出迴圈。 【種類】常見有下列兩種: Do While / Loop迴圈 Do Until / Loop迴圈 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實例】想到公園跑步 假設我們想到公園跑步時,則在我們出門時,一定會先判斷「是否有颳風下雨」,如果是的話,則會「待在家中…」繼續等待。直到沒有颳風下雨為止。如下圖所示。 【圖解】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-5.2 後測試迴圈 由B4A不支援VB中的後測試迴圈,因此,我們可以利用「前測試迴圈」搭配「EXIT」關鍵字。 【定義】先執行迴圈,再判斷條件式。 【作法】 「判斷前」會先執行迴圈,當執行一次之後,再執行條件式判斷,不符合則跳出迴圈,但至少會執行一次迴圈。 【注意】 由B4A不支援VB中的後測試迴圈,因此,我們可以利用「前測試迴圈」搭配「EXIT」關鍵字。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實例】在颱風天 假設我們已經在公園跑步了一段時間,如果「沒有遇到颳風下雨」,則繼續「跑步…」。直到「颳風下雨」才停止跑步。如下圖所示。 【圖解】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-6 Do While/Loop迴圈 【定義】 Do While/Loop是屬於前測試迴圈,當條件式「成立(True)」時,則執行「程式區塊」。 【語法】 【注意】Do While /Loop必需要成對的出現。 Do While 條件式 程式區塊 Loop 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【流程圖】 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實作1】 利用「前測試迴圈Do While/Loop」來設計1+2+3+...+N的程式 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實作2】 使用「後測試迴圈(前測試迴圈+搭配Exit關鍵字)」來設計1+2+3+...+N的程式 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-7 Do Until/Loop迴圈 【定義】 Do Until/Loop是屬於前測試迴圈,其功能與Do While/Loop完全相反,當條件式「 不成立(False)」時,則執行「程式區塊」,直到條件式成立時,才停止執行。 【語法】 【流程圖】 Do While 條件式 程式區塊 Loop 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實作1】 利用Do While/Loop來設計1+2+3+...+N的程式 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實作2】 使用「後測試迴圈(前測試迴圈+搭配Exit關鍵字)」來設計1+2+3+...+N的程式 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-8 Exit與Continue關鍵字 Exit與Continue關鍵字主要是應用在for與while迴圈當中, 其中: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-8.1 Exit關鍵字 Exit關鍵字會使程式強迫跳離迴圈,繼續執行迴圈外下一個敘述,若其出現在巢狀迴圈內,則跳離該層迴圈,而Exit關鍵字在For與While迴圈中的比較如下: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實例】 1+2+3+…+10的程式中加入Exit關鍵字的情況 【說明】 當程式執行到行號11時,遇到Exit關鍵字,則直接跳出迴圈,再執行迴圈外的行號14敘述。所以,本程式的Sum的值為0(代表沒有被執行到)。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
6-8.2 Continue關鍵字 Continue則是強迫程式跳到迴圈的起頭,當遇到其敘述時,停止執行迴圈主體,而到迴圈的開始處繼續執行,而Continue關鍵字在For與While迴圈中的比較如下: 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法
【實例】 1+2+3+…+10的程式中加入continue關鍵字的情況 【說明】 當程式執行到行號11時,遇到continue關鍵字,則繼續執行迴圈內的行號09敘述。所以,本程式的Sum的值為0(代表沒有被執行到)。 圖: 接下來,我們可以從圖1-1來說明「資料與資訊的關係」 當我們「輸入原始成績」之後,如何輸出一張成績單呢?那就必須要透過「程式」來進行處理, 而在資料結構中,程式=資料結構+演算法