# L5 : Selection Statement ###### tags: `C` ## 一 . Statement ### (一) . Staement的基本觀念 1. 常見的statement : - **Selection statements**: if and switch - **Iteration statements**: while, do, and for - **Jump statements**: break, continue, and goto. 2. C內其他的Statement : - Compound statement - Null statement ### (二) . 關係運算子 1. 功用 : 可以同時比較整數和浮點數。 2. 優先序 :比算術運算子還要下面。 3. 回傳 : 回傳值為0或1。 4. left associative : 由左邊讀到右邊。 ```c= i<j<k; (i<j)<k; //(i<j)或回傳0或1。 ``` ### (三) . 相等運算子 1. 功用 : 可以同時比較整數和浮點數是否相等。 2. 優先序 :比算術運算子和關係運算子還要下面。 3. 回傳 : 回傳值為0或1。 4. left associative : 由左邊讀到右邊。 ### (四) . 邏輯運算子 1. 功用 : 可以同時比較左右兩邊的條件是否相等。 - 視任何非0的為true。 - 視任何0的為false。 2. 優先序 :不同運算子的優先順序不同。 - 『!』 : 優先序同+、-。 - 『&&、||』 : 比相等、關係運算子還要下面。 3. 回傳 : 回傳值為0或1。 4. associative : 不一定。 - 『!』 : rigth,由右邊讀。 - 『&&、||』 : left,由左邊讀。 5. Short circuit : 兩個運算元,先判斷左再右。 ## 二 . If敘述 ### (一) . 單個if-else組成 1. if 的組成 : ```c= if(expression){ statement; } ``` 2. if 的判斷 : 會視expression內非0的為true。 3. Compound statement: 用\{ \}包含的敘述,可以分割區域,區域變數。 4. else 的組成 : ```c= if(expressino){ statement; }else { statement; } ``` ### (二) . 多個if-else組成 1. 巢狀if-else : 多個if-else組成的。 2. Dangling else : C會讓else 跟著最近的if ```c= if (A) if (B) C; else D; // else 會跟著if(B)。 ``` ## 三 . Conditional 敘述 ### (一) . Conditional 1. 功用和回傳 : 若expression非零,則回傳expression 1 ,否則expression 2。 ```c= i>j?i:j; //(expression ? expression 1 : expression 2) ``` 2. 優先序 : 最低的。 3. 常用於printf或return。 ### (二) . C中的boolean值 #### C89前 : 沒有bool型態需要自己定義。 1. 用整數取代 : 可以用,半沒有增加可讀性。 ```c= bool judge=1; ``` 2. 用巨集定義 : ```c= #define bool int bool judge=0; ``` #### C99後 : 有了_Bool type 1. 只能是0或1 : 嘗試存任何非0的數,都會變成1。 2. 可以被運算,比較,和印出。 3. C99可以匯入標頭檔stdbool.h,使我們可以使用bool表示_BOOL,且可以指定True或false。 ```c= #include<stdbool.h> bool judge; judge=true; judge=false; ``` ## 四 . Switch case 敘述 ### (一) . Switch case 的組成 1. controlling expression : 用於辨別的主要變數。 2. constant expression : 每個行況下辨別的依據。 3. statement : 每個情況下執行的狀況。 ```c= switch ( controlling expression ) { case constant-expression : statements … case constant-expression : statements default : statements } ``` ### (二) . Controlling statement 1. 必須是整數和字元。 2. 不行是字串或浮點數。 ### (三) . constant expression 1. 不能包含變數或functiuon call。 - 可以是expresssion,但不能包含變數。 - 若變數被定義成常數可以。 3. 必須是整數或字元。 4. 可以多個case 同一個statement。 5. 同一個case的條件不能出現多次。 6. 每一個case 都要加上break : 否則會有一直執行的錯誤。