if(a) 判斷邏輯、while(V) 等價轉換、printf 格式字串解析if (a) printf(...); else printf(...); 為何只寫 a 就能判斷真假?C 語言任何標量型別(整數、浮點、指標)在條件判斷時,規則統一為:
因此 if (a) 等價於 if (a != 0)。這是語言規格定義的**隱式轉換為布林語境**,適用於 if, while, for, ?:, ||, &&, ! 等所有邏輯運算場合。
while (V) { ... } 與 (V == 0) 為何不等價?while (V) → V 非零時執行迴圈體,V 為零時跳出。(V == 0) → 是一個**關係運算表達式**,值為 1(真,當 V 為 0)或 0(假,當 V 非零)。while (V == 0) { ... },則變成「V 為零時持續執行」,邏輯**完全相反**。V 可以是任何標量變數或表達式(計數器、旗標、函數回傳值…)。
printf("NO%d:%f\n", n, ave); 冒號是什麼作用?冒號只是字面字元**,會原樣輸出到螢幕。格式字串中 雙引號內所有非格式指示字元(非 % 開頭)皆為字面輸出**,包含空白、標點、中文字、換行符 \n 等。
輸出範例:NO3:85.500000(冒號、中文全形冒號皆原樣印出)。
| 構造 | 條件為真(執行/繼續)條件 | 條件為假(跳出/跳過)條件 |
|---|---|---|
if (expr) | expr != 0 | expr == 0 |
while (expr) | expr != 0 | expr == 0 |
for (; expr; ) | expr != 0 | expr == 0 |
expr1 || expr2 | expr1 != 0 或 expr2 != 0 | 兩者皆 0 |
expr1 && expr2 | 兩者皆非 0 | 任一為 0 |
想系統建立觀念,推薦免費中文視頻教程: