第4章 流程控制結構 4-1 結構化程式設計 4-2 程式區塊 4-3 簡單的條件控制敘述 4-4 巢狀條件敘述 4-5 多選一條件敘述

Slides:



Advertisements
Similar presentations
CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
Advertisements

第一單元 建立java 程式.
6 C#語言與Razor語法 6-1 C#語言與Razor語法 6-2 C#語言的基本撰寫規格 6-3 變數與資料型態 6-4 運算子
Introduction to C Programming
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
第四章 選擇結構.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
第8章 迴圈與訊息視窗 [利息計算程式和猜數字遊戲]
重複結構簡介.
第六章 重複結構 本投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載.
第 5 章 流程控制 (一): 條件分支.
第 5 章 流程控制.
第五章 迴圈結構 授課老師:___________.
張智星 台大資工系 多媒體檢索實驗室 第二章 程式控制結構 張智星 台大資工系 多媒體檢索實驗室.
Chapter 5 迴圈.
第1章 程式邏輯、程式設計與Visual Basic的基礎
第19章 VBA程式設計 19-1 VBA的基礎 19-2 建立VBA程式 19-3 VBA的程序與函數 19-4 VBA的變數與資料型態
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
控制流程 邏輯判斷 迴圈控制.
Class 2 流程控制-選擇敘述與迴圈.
Visual C++ introduction
C++Primer 3rd edition 中文版 Chap 5
JAVA程式語言入門(I) 授課教師:王大瑾
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
第四章 流程控制(一) if,if-else 與 switch
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
保留字與識別字.
C語言簡介 日期 : 2018/12/2.
C 語言簡介 - 2.
PHP 程式流程控制結構.
第6章 迴圈結構 6-1 計數迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-4 While/End While迴圈 6-5 跳出與繼續迴圈
第2章 Visual Basic語法的ASP.NET程式
Introduction to the C Programming Language
第7章 選擇控制項與條件判斷 [速食店點餐系統]
電腦解題─流程圖簡介 臺北市立大同高中 蔡志敏老師.
第六章 迴 圈 結 構 課程名稱:程式設計 授課老師:李春雄 博士 各位同學大家好,我是李春雄老師,本學期所開設的課程名稱為「資料結構」,
邏輯關係運算 == 等於 & 且 (logical and) ~= 不等於 | 或 (logical or) < 小於
程式設計實習課(四) ----C 函數運用----
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
第一單元 建立java 程式.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
Ch20. 計算器 (Mac 版本).
義守大學電機工程學系 陳慶瀚 第4章 VHDL Sequential語法 義守大學電機工程學系 陳慶瀚
進階 WWW 程式設計 -- PHP 語言結構 靜宜大學資訊管理學系 蔡奇偉副教授 2003
條件判斷指令 -if 指令 -switch 指令 迴圈指令 - for 迴圈 - while迴圈 - break、continue 指令
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
CH05. 選擇敘述.
期末考.
程式邏輯結構 Chapter 6 認知 認識何謂流程圖及流程圖各種符號的意義。
第 5 章 流程控制.
程式的時間與空間 Time and Space in Programming
第二章 Java语法基础.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
函數應用(二)與自定函數.
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
1-1 二元一次式運算.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
程式語言與邏輯 結構化程式設計:迴圈控制 報告人:國立台灣師大附中 李啟龍 老師 學年度資訊科技概論研習.
迴圈(重複性結構) for while do while.
適用於多選一 可減少if 與 else配對混淆的錯誤.
多重條件選擇敘述
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
C/C++基礎程式設計班 控制敘述 講師:林業峻 CSIE, NTU 3/7, 2015.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

第4章 流程控制結構 4-1 結構化程式設計 4-2 程式區塊 4-3 簡單的條件控制敘述 4-4 巢狀條件敘述 4-5 多選一條件敘述 4-6 for計數迴圈 4-7 條件迴圈 4-8 巢狀迴圈 4-9 跳躍程式敘述

4-1 結構化程式設計 4-1-1 結構化程式設計 4-1-2 UML活動圖 4-1-3 流程控制的種類

4-1-1 結構化程式設計 結構化程式設計是一種軟體開發方法,它是一種組織和撰寫程式碼的技術,使用由上而下的設計方法(Top-down Design)來分析問題,將程式分解成階層架構的「模組」(Modules),每個模組是一段擁有獨立功能的程式碼,而且只有單一的進入點和離開點,各模組間使用三種流程控制來整合:循序結構(Sequential)、選擇結構(Selection)和重複結構(Iteration)。 結構化程式設計的主要觀念有三項,如下所示: 由上而下的設計方法,在第7章有進一步的說明。 流程控制結構。 模組。

4-1-2 UML活動圖-說明 「UML」(Unified Modelling Language)是一種符號語言,如同工程式師閱讀藍圖就可以蓋房子,程式設計師看到UML繪出的模型圖,就可以寫出所需的程式碼。 「活動圖」(Activity Diagram)是UML眾多符號圖形之一,主要的目的是用來描述事件流程和和所需的作業和活動。在本章筆者使用活動圖取代傳統流程圖(Flowchart),用來描述C語言流程控制的執行流程。

4-1-2 UML活動圖-圖例

4-1-3 流程控制的種類-說明 程式語言撰寫的程式碼大部分是一列指令接著一列指令循序的執行,但是對於複雜的工作,為了達成預期的執行結果,我需要使用「流程控制結構」(Control Structures)來改變執行順序。

4-1-3 流程控制的種類-循序結構 循序結構是程式預設的執行方式,也就是一個程式敘述接著一個敘述的依序執行,如右圖所示:

4-1-3 流程控制的種類-選擇結構 選擇結構(Selection)是一種條件控制敘述,它是一個選擇題,可以分為單一選擇、二選一或多選一三種。程式執行順序是依照第2章條件運算式的條件,來決定執行哪一個程式區塊的程式碼,如右圖所示:

4-1-3 流程控制的種類-重複結構 (說明) 重複結構是迴圈控制,可以重複執行一個程式區塊的程式碼,並且提供一個結束條件結束迴圈執行,依結束條件測試的位置不同分為兩種,如下所示: 前測式重複結構 後測式重複結構

4-1-3 流程控制的種類-重複結構 (前測式重複結構) 測試迴圈結束條件在程式區塊的開頭,需要符合條件,才允許執行迴圈中程式區塊的程式碼,如右圖所示:

4-1-3 流程控制的種類-重複結構 (後測式重複結構) 測試迴圈結束條件在程式區塊的結尾,所以迴圈的程式區塊至少執行一次,如右圖所示:

4-2 程式區塊-語法 程式區塊(Blocks)是一種最簡單的結構敘述,它的目的只是將零到多列的程式敘述組合成一個群組,所以也稱為「結合敘述」(Compound Statements)。 我們可以將整個程式區塊視為一列程式敘述,以結構化程式設計來說,程式區塊就是最簡單的模組,其語法如下所示: { ………… 程式敘述; }

4-2 程式區塊-範例 程式區塊提供群組方式的程式編排,不只如此,它還可以隱藏變數宣告,如下所示: { int temp; temp = a; a = b; b = temp; } 程式區塊宣告整數變數temp,只能在區塊內使用,一旦離開程式區塊,就無法存取變數,稱為程式區塊的區域變數(Local to the Block)。

4-3 簡單的條件控制敘述 4-3-1 if是否選條件敘述 4-3-2 if/else二選一條件敘述 4-3-3 ?:條件運算子

4-3-1 if是否選條件敘述-語法 if條件敘述是一種是否執行的單選題,決定是否執行程式區塊內的程式碼,如果條件運算式不為0(即true),就執行括號間的程式區塊,其語法如下所示: if ( 條件運算式 ) { 程式敘述; ……… } if條件的條件運算式如果不等於0,就執行區塊的程式碼,如果為0就不執行程式區塊。

4-3-1 if是否選條件敘述-範例 學生成績是否及格的if條件敘述,如下所示: if ( score >= 60 ) { printf("成績及格!\n"); printf(“成績為%d\n”, score); } 如果程式區塊的程式敘述只有一列,還可以省略區塊的大括號,如下所示: if ( score < 60 ) printf("成績不及格!%d\n", score);

4-3-1 if是否選條件敘述-UML活動圖

4-3-2 if/else二選一條件敘述-語法 if ( 條件運算式 ) { 程式敘述1; ……… } else { 程式敘述2;

4-3-2 if/else二選一條件敘述-範例 學生成績以60分區分是否及格的if/else條件敘述,如下所示: if ( score >= 60 ) { printf("成績及格!%d\n", score); } else { printf("成績不及格!%d\n", score); 程式碼因為成績有排它性,60分以上為及格分數,60分以下為不及格,所以只會執行其中一個程式區塊。

4-3-2 if/else二選一條件敘述-UML活動圖

4-3-3 ?:條件運算子-語法 C語言提供「條件運算式」(Conditional Expressions),可以使用條件運算子?:在指定敘述以條件指定變數值,其語法格式如下所示: 變數 = ( 條件運算式 ) ? 變數值1 : 變數值2; 在指定敘述的「=」號右邊是條件運算式,其功能如同if/else條件,使用「?」符號代替if,「:」符號代替else,如果條件成立,就將變數指定成變數值1,否則就是變數值2。

4-3-3 ?:條件運算子-範例 一個條件敘述運算子的範例,如下所示: hour = (hour >= 12) ? hour-12 : hour; 上述程式碼使用條件敘述運算子指定變數hour的值,如果條件為true(即不等於0),hour變數值為hour-12,false(等於0)就是hour。

4-4 巢狀條件敘述-說明 在if條件敘述的程式區塊如果擁有其它if條件敘述,程式架構稱為「巢狀條件敘述」,如下: if ( guess == target ) { printf("猜中數字: %d\n", target); } else { printf("猜錯: "); if ( guess > target ) printf("數字太大!\n"); else printf("數字太小!\n");

4-4 巢狀條件敘述-UML活動圖

4-5 多選一條件敘述 4-5-1 if/else/if多選一條件敘述 4-5-2 switch多選一條件敘述

4-5-1 if/else/if多選一條件敘述-說明 多選一條件敘述只是重複使用if/else條件建立if/else/if條件敘述,如下所示: if ( guess == target ) { printf("猜中數字: %d\n", target); } else if ( guess > target ) printf("猜錯: 數字太大!\n"); else printf("猜錯: 數字太小!\n");

4-5-1 if/else/if多選一條件敘述-UML活動圖

4-5-2 switch多選一條件敘述-語法 switch多選一條件敘述只需依照符合條件,就可以執行不同程式區塊的程式碼,其語法如下所示: case 常數值1: 程式敘述1; break; case 常數值2: …… default: 程式敘述; }

4-5-2 switch多選一條件敘述-語法說明 switch條件只擁有一個條件運算式,每一個case條件的比較相當於一個「==」運算子,如果符合,就執行break指令之前的程式碼,每一個條件需要使用break指令跳出條件敘述。 default指令並非必要指令,這是一個例外條件,如果case條件都沒有符合,就執行default程式區塊。switch條件敘述的注意事項,如下所示: switch條件只支援「==」運算子,並不支援其它的關係運算子,每一個case條件就是一個「==」運算子。 在同一個switch條件敘述中,每一個case條件的常數值不能相同。

4-5-2 switch多選一條件敘述-範例 switch ( choice ) { case 1: printf("往上移動一格!\n"); break; case 2: printf("往下移動一格!\n"); case 3: printf("往左移動一格!\n"); case 4: printf("往右移動一格!\n"); default: printf("留在原地!\n"); }

4-5-2 switch多選一條件敘述-UML活動圖

4-6 for計數迴圈-語法 C語言的for迴圈是簡化的while迴圈,稱為「計數迴圈」(Counting Loop),可以重複執行程式區塊固定次數,迴圈擁有預設計數器,計數器每次增加或減少一個值,直到迴圈的結束條件,其語法格式如下所示: for ( 初始值 ; 結束條件 ; 變數更新 ) { 程式敘述; ………… }

4-6 for計數迴圈-遞增迴圈 for迴圈使用變數控制迴圈執行,從一個值執行到另一個範圍值,例如:計算1加到變數max的總和,每次增加1,如下所示: for ( i = 1; i <= max; i++ ) { printf(" %d ", i); total += i; }

4-6 for計數迴圈-遞增迴圈(圖例)

4-6 for計數迴圈-遞減迴圈 相反的情況,如果是從max到1,計數器使用i--表示每次遞減1,如下所示: for ( i = max; i >= 1; i-- ) { ………. }

4-6 for計數迴圈-for計數迴圈的應用 for計數迴圈的用途很多,屬於定量遞增或遞減的重複計算問題,都可以使用for計數迴圈。例如:使用for計數迴圈遞減溫度,建立華氏-攝氏溫度對照表,如下所示: for ( f = 200; f >= 100; f = f-20 ) printf("%d %.2f\n", f, (5.0/9.0)*(f-32)); 上述迴圈顯示溫度對照表,從華氏溫度200到100,每次減少20度。

4-7 條件迴圈 4-7-1 前測式while迴圈敘述 4-7-2 後測式do/while迴圈敘述

4-7-1 前測式while迴圈敘述-語法 while迴圈敘述不同於for迴圈,需要在程式區塊自行處理計數器的增減,while迴圈是在程式區塊的開頭檢查結束條件,如果條件為true(不等於0)才進入迴圈執行,其語法格式如下所示: while ( 結束條件 ) { 程式敘述; ………… } 上述迴圈的執行次數是直到結束條件為false(等於0)為止。

4-7-1 前測式while迴圈敘述-範例1 使用while迴圈從1計算到輸入變數max的總和,如下所示: while ( c <= max ) { total += c; c++; } 上述while迴圈計算從1加到max的總和,變數c是計數器變數,如果符合c <= max條件,就進入迴圈執行程式區塊,迴圈的結束條件為c > max。

4-7-1 前測式while迴圈敘述-UML活動圖

4-7-1 前測式while迴圈敘述-範例2 攝氏-華氏溫度對照表如果改為使用while迴圈來處理,如下所示: c = lower = 100; upper = 300; step = 20; while ( c <= upper && lower >= 100 ) { f = (9.0 * c) / 5.0 + 32.0; printf("%d %.2f\n", c, f); c += step; }

4-7-2 後測式do/while迴圈敘述-語法 do/while和while迴圈敘述的主要差異是在迴圈結尾檢查結束條件,因為先執行程式區塊的程式碼後才測試條件,所以do/while迴圈的程式區塊至少執行一次,其語法格式如下所示: do { 程式敘述; ………… } while ( 結束條件 ) 上述迴圈執行的次數是直到結束條件為false(等於0)為止。

4-7-2 後測式do/while迴圈敘述-範例 printf("請輸入猜測的數字(1~500): "); scanf("%d", &guess); if ( guess > target ) printf("數字太大!\n"); if ( guess < target ) printf("數字太小!\n"); } while ( guess != target ); 迴圈的第1次執行需要到迴圈結尾,才會檢查while條件是否為true,如為true就繼續執行迴圈,迴圈結束條件是guess == target。

4-7-2 後測式do/while迴圈敘述-UML活動圖

4-8 巢狀迴圈-基礎 巢狀迴圈是在迴圈內擁有其它迴圈,例如:在for迴圈擁有for、while和do/while迴圈,同樣的,while迴圈內也可以擁有for、while和do/while迴圈。

4-8 巢狀迴圈-範例 C語言的巢狀迴圈可以有二或二層以上,例如:在for迴圈內擁有while迴圈,如下所示: for ( i = 1; i <= 9; i++ ) { …… j = 1; while ( j <= 9 ) { ….. j++; }

4-8 巢狀迴圈-範例說明 第一層的for迴圈執行9次,第二層的while迴圈也是執行9次,兩層迴圈總共執行81次,如下表所示:

4-9 跳躍程式敘述 4-9-1 break敘述 4-9-2 continue敘述 4-9-3 goto敘述和標籤

4-9-1 break敘述-說明 C語言的break敘述共有兩個用途,一是中止switch條件的case敘述,另一個用途是強迫終止for、while和do/while迴圈的執行。 雖然迴圈敘述可以在開頭或結尾測試結束條件,但是有時我們需要在迴圈中測試結束條件,break敘述可以使用在迴圈中的條件測試,如同switch條件敘述使用break敘述跳出程式區塊一般。

4-9-1 break敘述-範例 do/while迴圈是無窮迴圈,在迴圈中使用if條件進行測試,當i > 5時就執行break跳出迴圈,可以顯示數字1到5。 do { printf(" %d ", i); i++; if ( i > 5 ) break; } while ( 1 );

4-9-2 continue敘述 在迴圈的執行過程中,continue敘述可以馬上繼續下一次迴圈的執行,而不執行程式區塊位在continue敘述後的程式碼,如果使用在for迴圈,一樣會更新計數器變數,如下所示: for ( i = 1; i <= 10; i++ ) { if ( (i % 2) == 1 ) continue; printf(" %d ", i); }

4-9-3 goto敘述和標籤-說明 結構化程式設計強調在程式中避免使用無窮迴圈和goto敘述,因為goto會造成程式碼閱讀和維護上的困難,事實上,任何擁有goto的程式碼一定可以改寫成沒有goto的版本。 換句話說,在撰寫C程式時,我們根本不需要使用goto,不過仍然有一些特殊情況可以使用goto,最常見的應用是跳出多重巢狀迴圈,因為執行break敘述只能跳出一層迴圈,如果需要跳出整個巢狀迴圈,才可以考慮使用goto。

4-9-3 goto敘述和標籤-範例 for ( i = 1; i <= 9; i++ ) { j = 1; while ( j <= 9 ) { printf("%d*%d=%2d ", i, j, i*j); if ( a == i && b == j ) goto found; j++; } printf("\n"); found: