王智祥  著 第五章 程式流程控制 5-1  流程控制簡介 5-2  認識選擇結構 5-1-1  循序結構 5-2-1  if  條件敘述 5-2-2  if-else  條件敘述 5-2-3  switch  選擇敘述 5-3-1  for  重複結構 5-3-2  while  迴圈敘述 5-3-3  do-while  敘述 5-5  上機實習課程 5-3  重複式結構 5-4  跳離迴圈敘述 5-1-2  選擇結構 5-1-3  重複結構 5-4-1  break  敘述 5-4-2  continue  敘述 5-4-3  goto  敘述
5-1-1  循序結構  5-1  流程控制簡介 P 5-2 是一個程式敘述由上而下接著一個程式敘述的執行指令。  Entry Exit 程式敘述  程式敘述  程式敘述  如圖所示:
5-1-2  選擇結構 5-1  流程控制簡介 P 5-3 是一種條件控制敘述,包含有一個條件判斷式,如果條件為真,則執行某些程式,一旦條件為假,則執行另一些程式。 如圖所示: 程式敘述  程式敘述  Entry Exit 條件
5-1-3  重複結構  5-1  流程控制簡介 P 5-3 重複結構主要是迴圈控制的功能。 迴圈 (loop) 會重複執行一個程式區塊的程式碼,直到符合特定的結束條件為止。 依照結束條件的位置不同分為兩種: 1.  前測試型迴圈: 迴圈結束條件在程式區塊的前頭。 符合條件者,才執行迴圈內的敘述。 2.  後測試型迴圈: 迴圈結束條件在程式區塊的結尾。 所以至少會執行一次迴圈內的敘述, 再測試條件是否成立, 若成立則返回迴圈起點重複執行迴圈。
5-1-3  重複結構 5-1  流程控制簡介 P 5-4 1.  前測試型迴圈: 2.  後測試型迴圈: 程式敘述  Entry Exit 條 件 不 成 立 程式敘述  Entry Exit 條 件 成 立 條件不成立 條件 條件
5-2-1 if 條件敘述 (1)  5-2  認識選擇結構 P 5-5 當  if  的判斷條件成立時(傳回 1 ),程式將執行括號內的敘述;否則測試條件不成立(傳回 0 )時,則不執行括號敘述並結束 if 敘述。 如圖所示: 其它敘述  { 程式敘述區 }  條件成立  (1) 條件不成立  (0) 條件 結束  if
5-2-1 if 條件敘述 (1) 5-2  認識選擇結構 P 5-5 if 敘述的語法格式如下所示: 如果 {} 區塊內的僅包含一個程式敘述,則可省略括號 { } ,語法如下所示: if ( 條件運算子 ) {  程式敘述 ; } if ( 條件運算子 ) 程式敘述 ;
5-2-1 if 條件敘述 (2) 5-2  認識選擇結構 P 5-6 程式範例: If  敘述的應用範例: CH05_01.c
5-2-1 if 條件敘述 (2) 5-2  認識選擇結構 P 5-7 在第 8 行中請輸入某一數值給變數  charge ,第 9 行的 if 敘述便會判斷 charge  是否大於等於  100 ,如果判斷式成立,則顯示下一行敘述。 請注意喔!由於 i 判斷式成立之後要執行多行敘述,則要使用  {}  來包含這些敘述。  執行結果 程式解說
5-2-1 if 條件敘述 (3) 5-2  認識選擇結構 P 5-7 程式範例: If  敘述的進階範例: CH05_02.c
5-2-1 if 條件敘述 (3) 5-2  認識選擇結構 P 5-8 在第 10 、 11 行將使用者所選擇代表平方或立方的數值,指定給變數  select_a ,接著在 12 、 17 行中使用兩個 if 敘述分別判斷  select_a  值,其中第 12 行中使用了“等於”條件運算子  (==) ,這和指定運算子  (=)  並不相同,請各位留意。 範例中當使用者輸入  1( 平方 )  時,程式會先執行第一個  if  敘述。 執行結果 程式解說
5-2-2 if-else 條件敘述 (1)  5-2  認識選擇結構 P 5-9 if-else  敘述提供了兩種不同的選擇,當 if 的判斷條件 (Condition)  成立時(傳回 1 ),將執行 if 程式敘述區內的程式;否則執行  else  程式敘述區內的程式後結束  if  敘述。 如圖所示: 其它敘述  { else  程式敘述區 }  條件不成立  (0) { if  程式敘述區 }  條件成立  (1) if 條件式 結束  if
5-2-2 if-else 條件敘述 (1) 5-2  認識選擇結構 P 5-9 if-else  敘述的語法格式如下所示: if ( 條件運算式 ) {   } else {   } 程式敘述 ; 程式敘述 ;
5-2-2 if-else 條件敘述 (2) 5-2  認識選擇結構 P 5-10 程式範例: If-else  敘述的應用範例: CH05_03.c
5-2-2 if-else 條件敘述 (2) 5-2  認識選擇結構 P 5-10 在第 9 行的  if(num%2)  判斷式中,由於整數除以  2  餘數只有  1  或  0  兩種,而在  C  中,非  0( 零 )  的數都會被視為真  (true) ,而將  0( 零 )  視為假  (false) 。 所以當餘數等於 1 時則條件式將傳回  true( 條件式成立 ) ,反之當餘數為  0  時條件式將傳回  false ,則執行第 11 行  else  之後的敘述。  執行結果 程式解說
5-2-2 if-else 條件敘述 (3) 5-2  認識選擇結構 P 5-12 程式範例: If else if  敘述的應用範例: CH05_04.c
5-2-2 if-else 條件敘述 (3) 5-2  認識選擇結構 P 5-12 在 9~18 行中,各位可在  if  敘述和  else if  中選擇符合條件運算式的程式敘述區塊,如果以上條件運算式都不符合,就執行最後的  else  敘述。 執行結果 程式解說
5-2-3 switch 選擇敘述 (1)  5-2  認識選擇結構 P 5-13 底下先以流程圖來表示  switch  敘述的執行方式: 其它敘述  case A 敘述 break; default 敘述  case A 敘述 break; 條件不成立  (0) 條件成立  (1) 條件成立  (1) 條件不成立  (0) 條件不成立  (0) switch 條件式 結束 switch  Case A Case B
5-2-3 switch 選擇敘述 (1) 5-2  認識選擇結構 P 5-13 switch  敘述的執行過程重點說明如下: 先求出運算式的值,再將此值與  case  的常數值進行比對。 如果找不到吻合的常數值,則會執行  default  敘述,如果沒有  default  敘述則結束 switch 敘述。  若找到相同的值則執行  case  內的程式敘述,執行完任何  case  區塊後,並不會離開  switch  區塊。而是往下繼續執行其它的  case  敘述與  default  敘述。所以  case  敘述的最後必須加上  break  敘述來結束  switch  敘述。
5-2-3 switch 選擇敘述 (1) 5-2  認識選擇結構 P 5-14 底下即為  switch  的標準格式:
5-2-3 switch 選擇敘述 (2) 5-2  認識選擇結構 P 5-15 程式範例: switch  敘述的應用範例: CH05_05.c 在此程式的執行結果中可以發現,執行過第 16 行「 case ‘+’ :」後面的  printf  敘述之後, break  敘述便立刻跳出  switch  敘述。 如果沒有加上  break  敘述的話,程式將繼續往下執行。  執行結果 程式解說 開啟  CH05_05.c
5-3  重複式結構 5-3  重複式結構 P 5-16 重複式結構  (iteration structure) ,是一種迴圈  (loop)  控制,根據所設立的條件,重複執行某一段程式敘述,直到條件判斷不成立,才會跳出迴圈。 迴圈主要由底下的兩個基本元素組成:  1. 迴圈的執行主體,由程式敘述或複合敘述組成。 2. 迴圈的條件判斷,決定迴圈何時停止執行。
5-3-1 for 重複結構 (1) 5-3  重複式結構 P 5-17 for 迴圈必須事先指定迴圈控制變數的起始值、條件以及控制變數的增減值,以決定迴圈重複的次數。 for 迴圈的執行流程: 其它敘述  { 程式敘述 增減控制變數的值 }  條件成立  (1) 條件不成立  (0) 設定起始值 重複條件式 離開  for  迴圈  進入  for  迴圈
5-3-1 for 重複結構 (1) 5-3  重複式結構 P 5-17 底下為 for 迴圈的格式: for 迴圈中的三個運算式必須以分號 ( ; ) 分開,而且一定要設定跳離迴圈的條件以及控制變數的遞增或遞減值。  for( 控制變數起始值 ;  迴圈重複條件式 ;  控制變數增減值 ) {   } 程式敘述 ;
5-3-1 for 重複結構 (1) 5-3  重複式結構 P 5-18 for  迴圈中的三個運算式相當具有彈性,可以省略不需要的運算式,也可以擁有一個以上的運算子句。 如下是使用  for  迴圈來計算  1  加到  10  的程式片斷: int i=1,sum=0;  /* 宣告 i 初值 */ for (; i<=10 ; i++)  /* 省略變數起始值的設定,分號不可省略 */ { sum+=i;  /* 迴圈敘述 */ printf(&quot;i=%d\t sum=%d\n&quot;, i, sum); }
5-3-1 for 重複結構 (2) 5-3  重複式結構 P 5-18 程式範例: for  條件敘述與  n!  的應用範例:  CH05_06.c
5-3-1 for 重複結構 (2) 5-3  重複式結構 P 5-19 在第 8 行中  for  敘述中我們先設定了變數 i 的起始值為  1 ,迴圈重複條件為  I  小於等於  10 , I  的遞增值為  1 ,所以當  I  大於  10  時,就會離開  for  迴圈。 執行結果 程式解說
5-3-1 for 重複結構 (2) 5-3  重複式結構 P 5-19 在此還要介紹一種  for  的巢狀迴圈  (Nested loop) 。 在巢狀  for  迴圈結構中,執行流程必須先等內層迴圈執行完畢,才會繼續執行外層迴圈。 兩層式的巢狀  for  迴圈結構格式如下: for( 控制變數起始值 1;  迴圈重複條件式 ;  控制變數增減值 ) {   for( 控制變數起始值 2;  迴圈重複條件式 ;  控制變數增減值 ) { } } 程式敘述 ;  程式敘述 ;
5-3-1 for 重複結構 (3) 5-3  重複式結構 P 5-19 程式範例: 巢狀  for  條件敘述與  n!  的應用範例:  CH05_07.c
5-3-1 for 重複結構 (3) 5-3  重複式結構 P 5-20 在本程式中,是利用巢狀迴圈  (Nested loop)  來列印  n!  及其值。 第 8 行外層  for  迴圈控制 i 輸出,而第 10 行則利用內層  for  迴圈控制  sum  輸出。 請注意! for  迴圈雖然具有很大的彈性,使用時務必要設定跳離迴圈的條件,否則程式將會陷入無窮迴圈。  執行結果 程式解說
5-3-2 while 迴圈敘述 (1) 5-3  重複式結構 P 5-21 while 結構與 for 結構類似,都是屬於前測試型迴圈。 下圖為  while  敘述執行的流程:  其它敘述  { while  程式敘述 增減運算式 }  條件成立  (1) 條件不成立  (0) while 條件式 離開 while 迴圈  進入 while 迴圈
5-3-2 while 迴圈敘述 (1) 5-3  重複式結構 P 5-21 迴圈內的敘述可以是一個敘述或是多個陳述句。 如果有多個陳述句在迴圈中執行,可以使用大括號括住。 While 敘述的語法大致如下: while( 重複條件式 ) { 程式敘述 ; } While  迴圈必須自行加入起始值以及遞增或遞減運算式,否則條件式永遠成立時,將造成無窮迴圈。
5-3-2 while 迴圈敘述 (2) 5-3  重複式結構 P 5-22 程式範例: While  條件敘述的說明與應用範例:  CH05_08.c
5-3-2 while 迴圈敘述 (2) 5-3  重複式結構 P 5-22 在第 10 行  while  敘述內的條件式,是將  ch=getche()  以及  ch!=‘\r’  兩個敘述合併為一個敘述,也就是由鍵盤鍵入的字元會先放在  ch  變數內,再檢查  ch  是否為 ‘ \r’ 。 而第 12 行的  if  敘述只要檢查到空白字元時,變數  word_num  就會加  1 ,而輸入的單字數目會比空白字元的數目多 1 個。 而第 15 行使用了「 ++word_num 」敘述將  word_num 加 1 。 執行結果 程式解說
5-3-3 do-while 敘述 (1)  5-3  重複式結構 P 5-23 do-while  敘述會先執行迴圈內的程式敘述,再測試條件式是否成立,如果成立的話再返回迴圈起點重複執行敘述。 do-while  敘述執行的流程: 繼續下一個敘述  do { 程式敘述 增減運算式 }  條件成立  (1) 條件不成立  (0) while 條件式 離開 do-while 迴圈  進入 do-while 迴圈
5-3-3 do-while 敘述 (2) 5-3  重複式結構 P 5-24 程式範例: do While  條件敘述的說明與應用範例:  CH05_09.c
5-3-3 do-while 敘述 (2) 5-3  重複式結構 P 5-24 在第 9 行中要計算  n  的階層值,所以將輸入的值存放在變數  n 。 第 16 行則於每次迴圈時遞減  1 ,當  n  等於  1  時對於運算結果並不會有任何改變。 因此第 17 行中將迴圈重複執行的條件設為  n>1 ,以避免進入  do-while  迴圈做不必要的運算。 執行結果 程式解說
5-3-3 do-while 敘述 (3) 5-3  重複式結構 P 5-25 程式範例: While  與  do While  條件敘述的比較範例:  CH05_10.c 執行結果
5-3-3 do-while 敘述 (4) 5-3  重複式結構 P 5-26 程式範例: do While  與  While  條件敘述的比較範例:  CH05_11.c 執行結果
5-4-1 break 敘述 (1)  5-4  跳離迴圈敘述 P 5-27 break  敘述在多重選擇  switch  敘述中已使用過,不過  break  並不只限於和  switch  搭配使用,它的主要用途是用來跳離最近的  for 、 while 、 do - while 、與  switch  的敘述本體區塊,並將控制權交給區塊之外的下一行程式。 語法格式如下: break;
5-4-1 break 敘述 (2) 程式範例: break  敘述的說明與應用範例:  CH05_12.c 5-4  跳離迴圈敘述 P 5-27
5-4-1 break 敘述 (2) 5-4  跳離迴圈敘述 P 5-28 在程式第 12 行的  if  敘述,在  b  的值大於  4  時就會執行  break  敘述,並跳出最近的  for  迴圈到第 16 行來繼續執行。 執行結果 程式解說
5-4-2 continue 敘述 (1) 5-4  跳離迴圈敘述 P 5-28 在迴圈中遇到 continue 敘述時,會跳過該迴圈剩下的敘述,重新執行下一次的迴圈;而將控制權轉移到迴圈開始處,再開始新的迴圈週期。 continue  與  break  的差異處在於 continue  只是忽略之後未執行的敘述,但並未跳離迴圈。 語法格式如下: continue;
5-4-2 continue 敘述 (2) 5-4  跳離迴圈敘述 P 5-29 程式範例: continue  敘述的說明與應用範例:  CH05_13.c
5-4-2 continue 敘述 (2) 5-4  跳離迴圈敘述 P 5-29 程式第 13 行的  if  敘述,在  b  的值大於 4 時就會執行  continue  敘述,而回到第 9 行的  for  迴圈繼續執行,所以  5  還是會被印出。  執行結果 程式解說
5-4-3 goto 敘述 (1) 5-4  跳離迴圈敘述 P 5-30 goto 敘述的語法如下所示: goto  敘述必須搭配設定的標籤來使用,而標籤名稱則是一個識別字加上冒號  ( : )  所組成。 標籤名稱不一定要在  goto  的下方,它可以出現在程式中任意的位置。  goto  標籤名稱 ;  . . . 標籤名稱:
5-4-3 goto 敘述 (2) 5-4  跳離迴圈敘述 P 5-30 隨堂範例: goto  敘述的應用與示範:  CH05_14.c
5-4-3 goto 敘述 (2) 5-4  跳離迴圈敘述 P 5-31 第 13 行中使用  if  判斷式,如果成立就執行 14 行  goto  敘述。 在第 21 行中設定了 一個標籤,只要程式執行到所搭配的  goto  敘述,則會跳至該標籤敘述,繼續往下執行。  執行結果 程式解說
5-5  上機實習課程 (1)  5-5  上機實習課程 P 5-32 上機實習範例: CH05_15.c 請設計一程式,讓使用者輸入一整數,並判斷是否為  2  或  3  的倍數,不過卻不能為  6  的倍數。 執行結果
5-5  上機實習課程 (2) 5-5  上機實習課程 P 5-33 上機實習範例: CH05_16.c 請使用雙重  for  迴圈來設計一程式,描繪出如下圖畫面:
5-5  上機實習課程 (2) 5-5  上機實習課程 P 5-33 上機實習範例: CH05_16.c 執行結果
5-5  上機實習課程 (3) 5-5  上機實習課程 P 5-34 上機實習範例: CH05_17.c 請使用雙重  for  迴圈與  break  指令來設計一程式,描繪出如下圖畫面: 1 12 123 1234 1234 1234
5-5  上機實習課程 (3) 5-5  上機實習課程 P 5-35 上機實習範例: CH05_17.c 執行結果
5-5  上機實習課程 (4) 5-5  上機實習課程 P 5-36 上機實習範例: CH05_18.c 以下程式範例是請使用者輸入一個代表成績的字元,包括  A 、 B 、 C 、 D 、 E  五級,輸入大小寫字母都可接受,並輸出所代表的成績意義。 如果所輸入的不是以上字元,將輸出 &quot; 沒有此分數群組 &quot; 。  執行結果 開啟  CH05_18.c
5-5  上機實習課程 (5) 5-5  上機實習課程 P 5-37 上機實習範例: CH05_19.c 以下程式範例是請使用者輸入一個整數,並將此整數的每一個數字反向輸出,例如輸入  12345 ,這是程式可輸出  54321 。 執行結果
5-5  上機實習課程 (6) 5-5  上機實習課程 P 5-38 上機實習範例: CH05_20.c 請利用輾轉相除法與  while  迴圈來設計一程式,來求取輸入兩數的最大公因數  (g.c.d) 。 執行結果
5-5  上機實習課程 (7) 5-5  上機實習課程 P 5-39 上機實習範例: CH05_21.c 請利用  for  迴圈來設計一  C  程式,可輸入一小於  100  的整數  n ,來計算以下式子的總和: 執行結果 1*1+2*2+3*3+4*4+….+n-1*n-1+n*n
5-5  上機實習課程 (8) 5-5  上機實習課程 P 5-40 上機實習範例: CH05_22.c 請利用雙重  for  迴圈來設計一  C  程式, . 輸入整數  n ,求出  1!+2!+...+n!  的合。如右所示:  執行結果 1!+2!+3!+4!+….+n-1!+n!
5-5  上機實習課程 (9) 5-5  上機實習課程 P 5-41 上機實習範例: CH05_23.c 請設計一程式讓使用者輸入一整數,並輸出  2  到  n  之間所有的質數 (prime number) ,設計本程式時要求必須同時使用  for  及  while  迴圈。 執行結果
5-5  上機實習課程 (10) 5-5  上機實習課程 P 5-42 上機實習範例: CH05_24.c 由使用者輸入每月用電量,並計算該月的電費。 假設每月基本費為  300 元,而電量與度數的對應表如下:  請使用  if else if  指令來設計一個程式,並計算每月電費。  度數 1 ~ 20 度 21 ~ 60 度 61 ~ 80 度 81 度以上 單價 10 12.5 18 22
5-5  上機實習課程 (10) 5-5  上機實習課程 P 5-42 上機實習範例: CH05_24.c 執行結果

C語言 第五章 程式流程控制

  • 1.
    王智祥 著第五章 程式流程控制 5-1 流程控制簡介 5-2 認識選擇結構 5-1-1 循序結構 5-2-1 if 條件敘述 5-2-2 if-else 條件敘述 5-2-3 switch 選擇敘述 5-3-1 for 重複結構 5-3-2 while 迴圈敘述 5-3-3 do-while 敘述 5-5 上機實習課程 5-3 重複式結構 5-4 跳離迴圈敘述 5-1-2 選擇結構 5-1-3 重複結構 5-4-1 break 敘述 5-4-2 continue 敘述 5-4-3 goto 敘述
  • 2.
    5-1-1 循序結構 5-1 流程控制簡介 P 5-2 是一個程式敘述由上而下接著一個程式敘述的執行指令。 Entry Exit 程式敘述 程式敘述 程式敘述 如圖所示:
  • 3.
    5-1-2 選擇結構5-1 流程控制簡介 P 5-3 是一種條件控制敘述,包含有一個條件判斷式,如果條件為真,則執行某些程式,一旦條件為假,則執行另一些程式。 如圖所示: 程式敘述 程式敘述 Entry Exit 條件
  • 4.
    5-1-3 重複結構 5-1 流程控制簡介 P 5-3 重複結構主要是迴圈控制的功能。 迴圈 (loop) 會重複執行一個程式區塊的程式碼,直到符合特定的結束條件為止。 依照結束條件的位置不同分為兩種: 1. 前測試型迴圈: 迴圈結束條件在程式區塊的前頭。 符合條件者,才執行迴圈內的敘述。 2. 後測試型迴圈: 迴圈結束條件在程式區塊的結尾。 所以至少會執行一次迴圈內的敘述, 再測試條件是否成立, 若成立則返回迴圈起點重複執行迴圈。
  • 5.
    5-1-3 重複結構5-1 流程控制簡介 P 5-4 1. 前測試型迴圈: 2. 後測試型迴圈: 程式敘述 Entry Exit 條 件 不 成 立 程式敘述 Entry Exit 條 件 成 立 條件不成立 條件 條件
  • 6.
    5-2-1 if 條件敘述(1) 5-2 認識選擇結構 P 5-5 當 if 的判斷條件成立時(傳回 1 ),程式將執行括號內的敘述;否則測試條件不成立(傳回 0 )時,則不執行括號敘述並結束 if 敘述。 如圖所示: 其它敘述 { 程式敘述區 } 條件成立 (1) 條件不成立 (0) 條件 結束 if
  • 7.
    5-2-1 if 條件敘述(1) 5-2 認識選擇結構 P 5-5 if 敘述的語法格式如下所示: 如果 {} 區塊內的僅包含一個程式敘述,則可省略括號 { } ,語法如下所示: if ( 條件運算子 ) { 程式敘述 ; } if ( 條件運算子 ) 程式敘述 ;
  • 8.
    5-2-1 if 條件敘述(2) 5-2 認識選擇結構 P 5-6 程式範例: If 敘述的應用範例: CH05_01.c
  • 9.
    5-2-1 if 條件敘述(2) 5-2 認識選擇結構 P 5-7 在第 8 行中請輸入某一數值給變數 charge ,第 9 行的 if 敘述便會判斷 charge 是否大於等於 100 ,如果判斷式成立,則顯示下一行敘述。 請注意喔!由於 i 判斷式成立之後要執行多行敘述,則要使用 {} 來包含這些敘述。 執行結果 程式解說
  • 10.
    5-2-1 if 條件敘述(3) 5-2 認識選擇結構 P 5-7 程式範例: If 敘述的進階範例: CH05_02.c
  • 11.
    5-2-1 if 條件敘述(3) 5-2 認識選擇結構 P 5-8 在第 10 、 11 行將使用者所選擇代表平方或立方的數值,指定給變數 select_a ,接著在 12 、 17 行中使用兩個 if 敘述分別判斷 select_a 值,其中第 12 行中使用了“等於”條件運算子 (==) ,這和指定運算子 (=) 並不相同,請各位留意。 範例中當使用者輸入 1( 平方 ) 時,程式會先執行第一個 if 敘述。 執行結果 程式解說
  • 12.
    5-2-2 if-else 條件敘述(1) 5-2 認識選擇結構 P 5-9 if-else 敘述提供了兩種不同的選擇,當 if 的判斷條件 (Condition) 成立時(傳回 1 ),將執行 if 程式敘述區內的程式;否則執行 else 程式敘述區內的程式後結束 if 敘述。 如圖所示: 其它敘述 { else 程式敘述區 } 條件不成立 (0) { if 程式敘述區 } 條件成立 (1) if 條件式 結束 if
  • 13.
    5-2-2 if-else 條件敘述(1) 5-2 認識選擇結構 P 5-9 if-else 敘述的語法格式如下所示: if ( 條件運算式 ) { } else { } 程式敘述 ; 程式敘述 ;
  • 14.
    5-2-2 if-else 條件敘述(2) 5-2 認識選擇結構 P 5-10 程式範例: If-else 敘述的應用範例: CH05_03.c
  • 15.
    5-2-2 if-else 條件敘述(2) 5-2 認識選擇結構 P 5-10 在第 9 行的 if(num%2) 判斷式中,由於整數除以 2 餘數只有 1 或 0 兩種,而在 C 中,非 0( 零 ) 的數都會被視為真 (true) ,而將 0( 零 ) 視為假 (false) 。 所以當餘數等於 1 時則條件式將傳回 true( 條件式成立 ) ,反之當餘數為 0 時條件式將傳回 false ,則執行第 11 行 else 之後的敘述。 執行結果 程式解說
  • 16.
    5-2-2 if-else 條件敘述(3) 5-2 認識選擇結構 P 5-12 程式範例: If else if 敘述的應用範例: CH05_04.c
  • 17.
    5-2-2 if-else 條件敘述(3) 5-2 認識選擇結構 P 5-12 在 9~18 行中,各位可在 if 敘述和 else if 中選擇符合條件運算式的程式敘述區塊,如果以上條件運算式都不符合,就執行最後的 else 敘述。 執行結果 程式解說
  • 18.
    5-2-3 switch 選擇敘述(1) 5-2 認識選擇結構 P 5-13 底下先以流程圖來表示 switch 敘述的執行方式: 其它敘述 case A 敘述 break; default 敘述 case A 敘述 break; 條件不成立 (0) 條件成立 (1) 條件成立 (1) 條件不成立 (0) 條件不成立 (0) switch 條件式 結束 switch Case A Case B
  • 19.
    5-2-3 switch 選擇敘述(1) 5-2 認識選擇結構 P 5-13 switch 敘述的執行過程重點說明如下: 先求出運算式的值,再將此值與 case 的常數值進行比對。 如果找不到吻合的常數值,則會執行 default 敘述,如果沒有 default 敘述則結束 switch 敘述。 若找到相同的值則執行 case 內的程式敘述,執行完任何 case 區塊後,並不會離開 switch 區塊。而是往下繼續執行其它的 case 敘述與 default 敘述。所以 case 敘述的最後必須加上 break 敘述來結束 switch 敘述。
  • 20.
    5-2-3 switch 選擇敘述(1) 5-2 認識選擇結構 P 5-14 底下即為 switch 的標準格式:
  • 21.
    5-2-3 switch 選擇敘述(2) 5-2 認識選擇結構 P 5-15 程式範例: switch 敘述的應用範例: CH05_05.c 在此程式的執行結果中可以發現,執行過第 16 行「 case ‘+’ :」後面的 printf 敘述之後, break 敘述便立刻跳出 switch 敘述。 如果沒有加上 break 敘述的話,程式將繼續往下執行。 執行結果 程式解說 開啟 CH05_05.c
  • 22.
    5-3 重複式結構5-3 重複式結構 P 5-16 重複式結構 (iteration structure) ,是一種迴圈 (loop) 控制,根據所設立的條件,重複執行某一段程式敘述,直到條件判斷不成立,才會跳出迴圈。 迴圈主要由底下的兩個基本元素組成: 1. 迴圈的執行主體,由程式敘述或複合敘述組成。 2. 迴圈的條件判斷,決定迴圈何時停止執行。
  • 23.
    5-3-1 for 重複結構(1) 5-3 重複式結構 P 5-17 for 迴圈必須事先指定迴圈控制變數的起始值、條件以及控制變數的增減值,以決定迴圈重複的次數。 for 迴圈的執行流程: 其它敘述 { 程式敘述 增減控制變數的值 } 條件成立 (1) 條件不成立 (0) 設定起始值 重複條件式 離開 for 迴圈 進入 for 迴圈
  • 24.
    5-3-1 for 重複結構(1) 5-3 重複式結構 P 5-17 底下為 for 迴圈的格式: for 迴圈中的三個運算式必須以分號 ( ; ) 分開,而且一定要設定跳離迴圈的條件以及控制變數的遞增或遞減值。 for( 控制變數起始值 ; 迴圈重複條件式 ; 控制變數增減值 ) { } 程式敘述 ;
  • 25.
    5-3-1 for 重複結構(1) 5-3 重複式結構 P 5-18 for 迴圈中的三個運算式相當具有彈性,可以省略不需要的運算式,也可以擁有一個以上的運算子句。 如下是使用 for 迴圈來計算 1 加到 10 的程式片斷: int i=1,sum=0; /* 宣告 i 初值 */ for (; i<=10 ; i++) /* 省略變數起始值的設定,分號不可省略 */ { sum+=i; /* 迴圈敘述 */ printf(&quot;i=%d\t sum=%d\n&quot;, i, sum); }
  • 26.
    5-3-1 for 重複結構(2) 5-3 重複式結構 P 5-18 程式範例: for 條件敘述與 n! 的應用範例: CH05_06.c
  • 27.
    5-3-1 for 重複結構(2) 5-3 重複式結構 P 5-19 在第 8 行中 for 敘述中我們先設定了變數 i 的起始值為 1 ,迴圈重複條件為 I 小於等於 10 , I 的遞增值為 1 ,所以當 I 大於 10 時,就會離開 for 迴圈。 執行結果 程式解說
  • 28.
    5-3-1 for 重複結構(2) 5-3 重複式結構 P 5-19 在此還要介紹一種 for 的巢狀迴圈 (Nested loop) 。 在巢狀 for 迴圈結構中,執行流程必須先等內層迴圈執行完畢,才會繼續執行外層迴圈。 兩層式的巢狀 for 迴圈結構格式如下: for( 控制變數起始值 1; 迴圈重複條件式 ; 控制變數增減值 ) { for( 控制變數起始值 2; 迴圈重複條件式 ; 控制變數增減值 ) { } } 程式敘述 ; 程式敘述 ;
  • 29.
    5-3-1 for 重複結構(3) 5-3 重複式結構 P 5-19 程式範例: 巢狀 for 條件敘述與 n! 的應用範例: CH05_07.c
  • 30.
    5-3-1 for 重複結構(3) 5-3 重複式結構 P 5-20 在本程式中,是利用巢狀迴圈 (Nested loop) 來列印 n! 及其值。 第 8 行外層 for 迴圈控制 i 輸出,而第 10 行則利用內層 for 迴圈控制 sum 輸出。 請注意! for 迴圈雖然具有很大的彈性,使用時務必要設定跳離迴圈的條件,否則程式將會陷入無窮迴圈。 執行結果 程式解說
  • 31.
    5-3-2 while 迴圈敘述(1) 5-3 重複式結構 P 5-21 while 結構與 for 結構類似,都是屬於前測試型迴圈。 下圖為 while 敘述執行的流程: 其它敘述 { while 程式敘述 增減運算式 } 條件成立 (1) 條件不成立 (0) while 條件式 離開 while 迴圈 進入 while 迴圈
  • 32.
    5-3-2 while 迴圈敘述(1) 5-3 重複式結構 P 5-21 迴圈內的敘述可以是一個敘述或是多個陳述句。 如果有多個陳述句在迴圈中執行,可以使用大括號括住。 While 敘述的語法大致如下: while( 重複條件式 ) { 程式敘述 ; } While 迴圈必須自行加入起始值以及遞增或遞減運算式,否則條件式永遠成立時,將造成無窮迴圈。
  • 33.
    5-3-2 while 迴圈敘述(2) 5-3 重複式結構 P 5-22 程式範例: While 條件敘述的說明與應用範例: CH05_08.c
  • 34.
    5-3-2 while 迴圈敘述(2) 5-3 重複式結構 P 5-22 在第 10 行 while 敘述內的條件式,是將 ch=getche() 以及 ch!=‘\r’ 兩個敘述合併為一個敘述,也就是由鍵盤鍵入的字元會先放在 ch 變數內,再檢查 ch 是否為 ‘ \r’ 。 而第 12 行的 if 敘述只要檢查到空白字元時,變數 word_num 就會加 1 ,而輸入的單字數目會比空白字元的數目多 1 個。 而第 15 行使用了「 ++word_num 」敘述將 word_num 加 1 。 執行結果 程式解說
  • 35.
    5-3-3 do-while 敘述(1) 5-3 重複式結構 P 5-23 do-while 敘述會先執行迴圈內的程式敘述,再測試條件式是否成立,如果成立的話再返回迴圈起點重複執行敘述。 do-while 敘述執行的流程: 繼續下一個敘述 do { 程式敘述 增減運算式 } 條件成立 (1) 條件不成立 (0) while 條件式 離開 do-while 迴圈 進入 do-while 迴圈
  • 36.
    5-3-3 do-while 敘述(2) 5-3 重複式結構 P 5-24 程式範例: do While 條件敘述的說明與應用範例: CH05_09.c
  • 37.
    5-3-3 do-while 敘述(2) 5-3 重複式結構 P 5-24 在第 9 行中要計算 n 的階層值,所以將輸入的值存放在變數 n 。 第 16 行則於每次迴圈時遞減 1 ,當 n 等於 1 時對於運算結果並不會有任何改變。 因此第 17 行中將迴圈重複執行的條件設為 n>1 ,以避免進入 do-while 迴圈做不必要的運算。 執行結果 程式解說
  • 38.
    5-3-3 do-while 敘述(3) 5-3 重複式結構 P 5-25 程式範例: While 與 do While 條件敘述的比較範例: CH05_10.c 執行結果
  • 39.
    5-3-3 do-while 敘述(4) 5-3 重複式結構 P 5-26 程式範例: do While 與 While 條件敘述的比較範例: CH05_11.c 執行結果
  • 40.
    5-4-1 break 敘述(1) 5-4 跳離迴圈敘述 P 5-27 break 敘述在多重選擇 switch 敘述中已使用過,不過 break 並不只限於和 switch 搭配使用,它的主要用途是用來跳離最近的 for 、 while 、 do - while 、與 switch 的敘述本體區塊,並將控制權交給區塊之外的下一行程式。 語法格式如下: break;
  • 41.
    5-4-1 break 敘述(2) 程式範例: break 敘述的說明與應用範例: CH05_12.c 5-4 跳離迴圈敘述 P 5-27
  • 42.
    5-4-1 break 敘述(2) 5-4 跳離迴圈敘述 P 5-28 在程式第 12 行的 if 敘述,在 b 的值大於 4 時就會執行 break 敘述,並跳出最近的 for 迴圈到第 16 行來繼續執行。 執行結果 程式解說
  • 43.
    5-4-2 continue 敘述(1) 5-4 跳離迴圈敘述 P 5-28 在迴圈中遇到 continue 敘述時,會跳過該迴圈剩下的敘述,重新執行下一次的迴圈;而將控制權轉移到迴圈開始處,再開始新的迴圈週期。 continue 與 break 的差異處在於 continue 只是忽略之後未執行的敘述,但並未跳離迴圈。 語法格式如下: continue;
  • 44.
    5-4-2 continue 敘述(2) 5-4 跳離迴圈敘述 P 5-29 程式範例: continue 敘述的說明與應用範例: CH05_13.c
  • 45.
    5-4-2 continue 敘述(2) 5-4 跳離迴圈敘述 P 5-29 程式第 13 行的 if 敘述,在 b 的值大於 4 時就會執行 continue 敘述,而回到第 9 行的 for 迴圈繼續執行,所以 5 還是會被印出。 執行結果 程式解說
  • 46.
    5-4-3 goto 敘述(1) 5-4 跳離迴圈敘述 P 5-30 goto 敘述的語法如下所示: goto 敘述必須搭配設定的標籤來使用,而標籤名稱則是一個識別字加上冒號 ( : ) 所組成。 標籤名稱不一定要在 goto 的下方,它可以出現在程式中任意的位置。 goto 標籤名稱 ; . . . 標籤名稱:
  • 47.
    5-4-3 goto 敘述(2) 5-4 跳離迴圈敘述 P 5-30 隨堂範例: goto 敘述的應用與示範: CH05_14.c
  • 48.
    5-4-3 goto 敘述(2) 5-4 跳離迴圈敘述 P 5-31 第 13 行中使用 if 判斷式,如果成立就執行 14 行 goto 敘述。 在第 21 行中設定了 一個標籤,只要程式執行到所搭配的 goto 敘述,則會跳至該標籤敘述,繼續往下執行。 執行結果 程式解說
  • 49.
    5-5 上機實習課程(1) 5-5 上機實習課程 P 5-32 上機實習範例: CH05_15.c 請設計一程式,讓使用者輸入一整數,並判斷是否為 2 或 3 的倍數,不過卻不能為 6 的倍數。 執行結果
  • 50.
    5-5 上機實習課程(2) 5-5 上機實習課程 P 5-33 上機實習範例: CH05_16.c 請使用雙重 for 迴圈來設計一程式,描繪出如下圖畫面:
  • 51.
    5-5 上機實習課程(2) 5-5 上機實習課程 P 5-33 上機實習範例: CH05_16.c 執行結果
  • 52.
    5-5 上機實習課程(3) 5-5 上機實習課程 P 5-34 上機實習範例: CH05_17.c 請使用雙重 for 迴圈與 break 指令來設計一程式,描繪出如下圖畫面: 1 12 123 1234 1234 1234
  • 53.
    5-5 上機實習課程(3) 5-5 上機實習課程 P 5-35 上機實習範例: CH05_17.c 執行結果
  • 54.
    5-5 上機實習課程(4) 5-5 上機實習課程 P 5-36 上機實習範例: CH05_18.c 以下程式範例是請使用者輸入一個代表成績的字元,包括 A 、 B 、 C 、 D 、 E 五級,輸入大小寫字母都可接受,並輸出所代表的成績意義。 如果所輸入的不是以上字元,將輸出 &quot; 沒有此分數群組 &quot; 。 執行結果 開啟 CH05_18.c
  • 55.
    5-5 上機實習課程(5) 5-5 上機實習課程 P 5-37 上機實習範例: CH05_19.c 以下程式範例是請使用者輸入一個整數,並將此整數的每一個數字反向輸出,例如輸入 12345 ,這是程式可輸出 54321 。 執行結果
  • 56.
    5-5 上機實習課程(6) 5-5 上機實習課程 P 5-38 上機實習範例: CH05_20.c 請利用輾轉相除法與 while 迴圈來設計一程式,來求取輸入兩數的最大公因數 (g.c.d) 。 執行結果
  • 57.
    5-5 上機實習課程(7) 5-5 上機實習課程 P 5-39 上機實習範例: CH05_21.c 請利用 for 迴圈來設計一 C 程式,可輸入一小於 100 的整數 n ,來計算以下式子的總和: 執行結果 1*1+2*2+3*3+4*4+….+n-1*n-1+n*n
  • 58.
    5-5 上機實習課程(8) 5-5 上機實習課程 P 5-40 上機實習範例: CH05_22.c 請利用雙重 for 迴圈來設計一 C 程式, . 輸入整數 n ,求出 1!+2!+...+n! 的合。如右所示: 執行結果 1!+2!+3!+4!+….+n-1!+n!
  • 59.
    5-5 上機實習課程(9) 5-5 上機實習課程 P 5-41 上機實習範例: CH05_23.c 請設計一程式讓使用者輸入一整數,並輸出 2 到 n 之間所有的質數 (prime number) ,設計本程式時要求必須同時使用 for 及 while 迴圈。 執行結果
  • 60.
    5-5 上機實習課程(10) 5-5 上機實習課程 P 5-42 上機實習範例: CH05_24.c 由使用者輸入每月用電量,並計算該月的電費。 假設每月基本費為 300 元,而電量與度數的對應表如下: 請使用 if else if 指令來設計一個程式,並計算每月電費。 度數 1 ~ 20 度 21 ~ 60 度 61 ~ 80 度 81 度以上 單價 10 12.5 18 22
  • 61.
    5-5 上機實習課程(10) 5-5 上機實習課程 P 5-42 上機實習範例: CH05_24.c 執行結果