《第6章 流程控制结构.ppt》由会员分享,可在线阅读,更多相关《第6章 流程控制结构.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第6章流程控制結構,6-1結構化程式設計6-2程式區塊6-3簡單的條件控制敘述6-4巢狀條件敘述6-5多選一條件敘述6-6for計數迴圈6-7條件迴圈6-8巢狀迴圈6-9跳躍指令敘述,6-1結構化程式設計,6-1-1結構化程式設計6-1-2流程控制的基礎,6-1-1結構化程式設計,結構化程式設計是一種軟體開發方法,它是一種組織和撰寫程式碼的技術,使用由上而下的設計方法(Top-downDesign)來分析問題,將程式分解成階層架構的模組(Modules),每個模組是一段擁有獨立功能的程式碼,而且只有單一的進入點和離開點,各模組間使用三種流程控制來整合:循序結構(Sequential)、選擇結構
2、(Selection)和重複結構(Iteration)。結構化程式設計的主要觀念有三項,如下所示:由上而下的設計方法,在第7章有進一步的說明。流程控制結構。模組。,6-1-2流程控制的基礎-說明,程式語言撰寫的程式碼大部分是一列指令接著一列指令循序的執行,但是對於複雜的工作,為了達成預期的執行結果,我需要使用流程控制結構(ControlStructures)來改變執行順序。,6-1-2流程控制的基礎-循序結構,循序結構是程式預設的執行方式,也就是一個程式敘述接著一個敘述的依序執行,如右圖所示:,6-1-2流程控制的基礎-選擇結構,選擇結構是一種條件控制敘述的選擇題,可以分為單一選擇、二選一或多
3、選一三種,程式執行的順序是依照條件運算式運算結果的true或false,來決定執行哪一個區塊的程式碼,如右圖所示:,6-1-2流程控制的基礎-重複結構(說明),重複結構是迴圈控制,可以重複執行一個程式區塊的程式碼,並且提供一個結束條件結束迴圈執行,依結束條件測試的位置不同分為兩種,如下所示:前測式重複結構後測式重複結構,6-1-2流程控制的基礎-重複結構(前測式重複結構),測試迴圈結束條件在程式區塊的開頭,需要符合條件,才允許執行迴圈中程式區塊的程式碼,如右圖所示:,6-1-2流程控制的基礎-重複結構(後測式重複結構),測試迴圈結束條件在程式區塊的結尾,所以迴圈的程式區塊至少執行一次,如右圖所
4、示:,6-2程式區塊-語法,程式區塊(Blocks)是一種最簡單的結構敘述,它的目的只是將零到多列的程式敘述組合成一個群組,所以也稱為結合敘述(CompoundStatements)。我們可以將整個程式區塊視為一列程式敘述,以結構化程式設計來說,程式區塊就是最簡單的模組,其語法如下所示:程式敘述;,6-2程式區塊-範例,程式區塊提供群組方式的程式編排,不只如此,它還可以隱藏變數宣告,如下所示:inttemp;temp=a;a=b;b=temp;程式區塊宣告整數變數temp,只能在區塊內使用,一旦離開程式區塊,就無法存取變數,稱為程式區塊的區域變數(LocaltotheBlock)。,6-3簡單
5、的條件控制敘述,6-3-1if是否選條件敘述6-3-2if/else二選一條件敘述6-3-3?:條件運算子,6-3-1if是否選條件敘述-語法,if條件敘述是一種是否執行的單選題,只是決定是否執行程式區塊內的程式碼,如果條件運算式的結果不為0(即true),就執行括號間的程式區塊,其語法格式如下所示:if(條件運算式)程式敘述;上述if條件的條件運算式如果不等於0,就執行區塊的程式碼,如果為0就不執行程式區塊。,6-3-1if是否選條件敘述-範例,一個條件敘述的範例,如下所示:if(score=60)printf(成績及格!n);printf(“成績為%dn”,score);如果程式區塊的程式
6、敘述只有一列,我們還可以省略區塊的大括號,如下所示:if(score=60)printf(成績及格!%dn,score);elseprintf(成績不及格!%dn,score);上述程式碼因為成績有排它性,60分以上為及格分數,60分以下為不及格,所以只會執行其中一個程式區塊。,6-3-2if/else二選一條件敘述-圖例,6-3-3?:條件運算子-語法,C語言提供條件運算式(ConditionalExpressions),可以使用條件運算子?:在指定敘述以條件指定變數值,其語法格式如下所示:變數=(條件運算式)?變數值1:變數值2;上述指定敘述的=號右邊是條件運算式,其功能如同if/else
7、條件,使用?符號代替if,:符號代替else,如果條件成立,就將變數指定成變數值1,否則就是變數值2。,6-3-3?:條件運算子-範例,一個條件敘述運算子的範例,如下所示:hour=(hour=12)?hour-12:hour;上述程式碼使用條件敘述運算子指定變數hour的值,如果條件為true(即不等於0),hour變數值為hour-12,false(等於0)就是hour。,6-4巢狀條件敘述-說明,在if條件敘述的程式區塊如果擁有其它if條件敘述,程式架構稱為巢狀條件敘述,如下:if(guess=target)printf(猜中數字:%dn,target);elseprintf(猜錯:);
8、if(guesstarget)printf(數字太大!n);elseprintf(數字太小!n);,6-4巢狀條件敘述-圖例,6-5多選一條件敘述,6-5-1if/else/if多選一條件敘述6-5-2switch多選一條件敘述,6-5-1if/else/if多選一條件敘述-說明,只需重複使用if/else條件建立if/else/if條件敘述,即可建立多選一條件敘述,如下所示:if(guess=target)printf(猜中數字:%dn,target);elseif(guesstarget)printf(猜錯:數字太大!n);elseprintf(猜錯:數字太小!n);,6-5-1if/el
9、se/if多選一條件敘述-圖例,6-5-2switch多選一條件敘述-語法,switch多選一條件敘述只需依照符合條件,就可以執行不同程式區塊的程式碼,其語法格式如下所示:switch(變數)case常數值1:程式敘述1;break;case常數值2:程式敘述2;break;default:程式敘述;,6-5-2switch多選一條件敘述-語法說明,switch條件只擁有一個條件運算式,每一個case條件的比較相當於一個=運算子,如果符合,就執行break指令之前的程式碼,每一個條件需要使用break指令跳出條件敘述。default指令並非必要指令,這是一個例外條件,如果case條件都沒有符合
10、,就執行default程式區塊。switch條件敘述的注意事項,如下所示:switch條件只支援=運算子,並不支援其它的關係運算子,每一個case條件就是一個=運算子。在同一個switch條件敘述中,每一個case條件的常數值不能相同。,6-5-2switch多選一條件敘述-範例,switch(choice)case1:printf(往上移動一格!n);break;case2:printf(往下移動一格!n);break;case3:printf(往左移動一格!n);break;case4:printf(往右移動一格!n);break;default:printf(留在原地!n);break;
11、,6-5-2switch多選一條件敘述-圖例,6-6for計數迴圈-語法,C語言的for迴圈是簡化的while迴圈,稱為計數迴圈(CountingLoop),可以重複執行程式區塊固定次數,迴圈擁有預設計數器,計數器每次增加或減少一個值,直到迴圈的結束條件,其語法格式如下所示:for(初始值;結束條件;變數更新)程式敘述;,6-6for計數迴圈-遞增的for計數迴圈,for迴圈使用變數控制迴圈執行,從一個值執行到另一個範圍值,例如:計算1加到變數max的總和,每次增加1,如下所示:for(i=1;i=1;i-).,6-6for計數迴圈-for計數迴圈的應用,for計數迴圈的用途很多,屬於定量遞增
12、或遞減的重複計算問題,都可以使用for計數迴圈。例如:使用for計數迴圈遞減溫度,建立華氏-攝氏溫度對照表,如下所示:for(f=200;f=100;f=f-20)printf(%d%.2fn,f,(5.0/9.0)*(f-32);上述迴圈顯示溫度對照表,從華氏溫度200到100,每次減少20度。,6-7條件迴圈,6-7-1前測式while迴圈敘述6-7-2後測式do/while迴圈敘述,6-7-1前測式while迴圈敘述-語法,while迴圈敘述不同於for迴圈,需要在程式區塊自行處理計數器的增減,while迴圈是在程式區塊的開頭檢查結束條件,如果條件為true(不等於0)才進入迴圈執行,其
13、語法格式如下所示:while(結束條件)程式敘述;上述迴圈的執行次數是直到結束條件為false(等於0)為止。,6-7-1前測式while迴圈敘述-範例1,使用while迴圈從1計算到輸入變數max的總和,如下所示:while(cmax。,6-7-1前測式while迴圈敘述-圖例1,6-7-1前測式while迴圈敘述-範例2,攝氏-華氏溫度對照表如果改為使用while迴圈來處理,如下所示:c=lower=100;upper=300;step=20;while(c=100)f=(9.0*c)/5.0+32.0;printf(%d%.2fn,c,f);c+=step;,6-7-2後測式do/whi
14、le迴圈敘述-語法,do/while和while迴圈敘述的主要差異是在迴圈結尾檢查結束條件,因為先執行程式區塊的程式碼後才測試條件,所以do/while迴圈的程式區塊至少執行一次,其語法格式如下所示:do程式敘述;while(結束條件)上述迴圈執行的次數是直到結束條件為false(等於0)為止。,6-7-2後測式do/while迴圈敘述-範例,do/while迴圈的猜數字遊戲,如下所示:doprintf(請輸入猜測的數字(1500):);scanf(%d,迴圈的第1次執行需要到迴圈結尾,才會檢查while條件是否為true,如為true就繼續執行迴圈,迴圈結束條件是guess=target。,
15、6-7-2後測式do/while迴圈敘述-圖例,6-8巢狀迴圈-基礎,巢狀迴圈是在迴圈內擁有其它迴圈,例如:在for迴圈擁有for、while和do/while迴圈,同樣的,while迴圈內也可以擁有for、while和do/while迴圈。,6-8巢狀迴圈-範例,C語言的巢狀迴圈可以有二或二層以上,例如:在for迴圈內擁有while迴圈,如下所示:for(i=1;i=9;i+)j=1;while(j10)break;while(1);,6-9-2continue指令敘述,在迴圈的執行過程中,相對於上一節使用break指令跳出迴圈,continue指令敘述可以馬上繼續下一次迴圈的執行,而不執行
16、程式區塊位在continue指令敘述後的程式碼,如果使用在for迴圈,一樣會更新計數器變數,如下所示:for(i=1;i=10;i+)if(i%2)=1)continue;printf(%d,i);,6-9-3goto指令敘述和標籤-說明,結構化程式設計強調在程式中避免使用無窮迴圈和goto指令,因為goto指令會造成程式碼閱讀和維護上的困難,事實上,任何擁有goto指令的程式碼一定可以改寫成沒有goto指令的版本。換句話說,在撰寫C程式時,我們根本不需要使用goto指令,不過仍然有一些特殊情況可以使用goto指令,最常見的應用是跳出多重巢狀迴圈,因為執行break指令敘述只能跳出一層迴圈,如果需要跳出整個巢狀迴圈,才可以考慮使用goto指令。,6-9-3goto指令敘述和標籤-範例,for(i=1;i=9;i+)j=1;while(j=9)printf(%d*%d=%2d,i,j,i*j);if(a=ifound:,練習,請寫一個猜數字遊戲,數字長度為四位數(在程式內設定固定的數字),如果猜的時後太大顯示”小一點”,反之顯示大一點,猜中後顯示共猜中幾題請利用for迴圈輸出九九乘法表,