第四章 流程控制(一) if,if-else 與 switch 關係運算子 與 邏輯運算子 條件跳躍 if 與 if-else 條件運算子 ?: 巢狀 if 與 if-else 多重選擇 switch 程式觀摩
關係運算子 關係運算子用於 比較兩數的大小關係 > (大於) >= (大於或等於) < (小於) 關係運算子用於 比較兩數的大小關係 > (大於) >= (大於或等於) < (小於) <= (小於或等於) == (等於) != (不等於) 例 a > b 是一個關係運算式,其值是一個邏輯值(真或假),C語言通常用數值 0 代表假,1 代表真(只要不是 0 就視為真)
邏輯運算子 邏輯運算子是用於邏輯值的運算,大多用來組合各種比較的條件 ,結果為邏輯值 && 符號代表 AND (及) 運算 || 符號代表 OR (或) 運算 ! 符號代表 NOT (非) 運算 例 a > b && b > c 是一個邏輯運算式
if 的語法 當程式中需檢查某種狀況或條件是否發生時,可使用 if 敘述來控制。語法如下: i f (判斷的條件) { 若條件成立(邏輯為真), 則進行某些處理 . }
if 敘述的流程圖
if 的用法 例如 if (n==0) { printf("n is zero"); } 用於判斷當 n 值為 0 時,印出 "n is zero" 的訊息
if else的語法 if-else 敘述通常用於根據某種條件是否滿足,而分別從事兩種不同的處理步驟。其語法如下: if (條件判斷) { 條件成立所進行的處理 } else 條件不成立所進行的處理
if else 敘述的流程圖
if else 的用法 例如 if (a>b) { printf("%d > %d", a, b); big=a; } big=b;
條件運算子 ?: 語法如下: (條件判斷) ? 條件為真時的處理 : 條件為假時的處理 (條件判斷) ? 條件為真時的處理 : 條件為假時的處理 這個問號 ? 與冒號:是視為一體的,合起來構成一個運算子。 例如, (n==0) ? printf("is zero") : printf("is not zero");
【範例 4-4-1】 試使用條件運算子 ?:,求出某數的絕對值。 6 main() 7 { 8 float n, absn; 9 7 { 8 float n, absn; 9 10 printf("Enter a number : "); 11 scanf("%f",&n); 12 absn = (n < 0) ? -n : n ; 13 14 printf("absolute value of %f is %f \n",n,absn); 15 }
巢狀 if 的流程圖
if else 多重選擇的流程圖
【範例 4-5-2】 試設計一個C程式,用 if else 敘述,判斷所輸入的整數是正數、負數或零。 8 int num; 9 10 printf("Enter an integer number : "); 11 scanf("%d",&num); 12 if (num > 0) 13 printf("%d is positive\n",num); 14 else if (num < 0) 15 printf("%d is negative\n",num); 16 else 17 printf("%d is zero\n",num);
多重選擇 switch 的語法 switch (運算式值) { case 數值1 : 主體1; break; case 數值2 : 主體2; case 數值n : 主體n; default : 其他主體; }
【範例 4-6-1】p1/2 將範例 4-5-4 改用 switch 敘述來完成。 6 main() 7 { 7 { 8 float num1, num2; 9 char ch; 10 11 printf("Enter number1 : "); 12 scanf("%f",&num1); 13 printf("Enter number2 : "); 14 scanf("%f",&num2); 15 getchar(); /* skip '\n' the Enter key pressed in scanf() */ 16 printf("Which operation ( + - * / ) ? "); 17 ch = getchar();
【範例 4-6-1】p2/2 18 switch (ch) 19 { 20 case '+' : 19 { 20 case '+' : 21 printf("%f + %f = %f \n",num1,num2,num1+num2); 22 break; 23 case '-' : 24 printf("%f - %f = %f \n",num1,num2,num1-num2); 25 break; 26 case '*' : 27 printf("%f * %f = %f \n",num1,num2,num1*num2); 28 break; 29 case '/' : 30 printf("%f / %f = %f \n",num1,num2,num1/num2); 31 break; 32 default : 33 printf("%c is an invalid operator\n",ch); 34 break; 35 }
程式觀摩【範例 4-7-1】 p1/2 設計一個程式來判斷所按下的鍵,是那一個功能鍵。 10 printf("Press a function key : "); 11 ch = getch(); 12 putchar('\n'); 13 if (ch == 0x00) 14 { 15 ch = getch(); 16 printf("The key you pressed is a function key : ");
程式觀摩【範例 4-7-1】 p2/2 17 switch (ch) 18 { 19 case 0x3B : printf("F1"); 20 break; 21 case 0x3C : printf("F2"); 22 break; 23 case 0x48 : printf("UP"); 24 break; 25 case 0x50 : printf("DOWN"); 26 break; 27 case 0x4B : printf("LEFT"); 28 break; 29 case 0x4D : printf("RIGHT"); 30 break; 31 default : printf("CODE 00 %02X\n",ch); 32 break; 33 }
【範例 4-7-1】的輸出畫面 Press a function key : (press F1 key) The key you pressed is a function key : F1 Press a function key : (press UP arrow key) The key you pressed is a function key : UP Press a function key : (press F9 key) The key you pressed is a function key : CODE 00 43 Press a function key : (press 'a' key) The key you pressed is a normal key : a