C語言基礎

int n = 2, c = 0;
switch (n) {
case 1: c += 1;
case 2: c += 10;
case 3: c += 100; break;
default: c += 1000;
}
printf("%d\n", c);

執行上方含有沒有 break 之 case 的 switch 敘述時的輸出,下列何者正確?

  1. A10
  2. B110
  3. C1110
查看答案與解析

正確答案:B. 110

switch 敘述會跳到與 n 的值相符的 case 標籤,並從那裡繼續執行下方 case 的敘述,直到遇到 break 為止(貫穿)。n 為2,因此從 case 2 開始執行,在 c += 10 之後也執行 case 3 的 c += 100,再以 break 離開 switch。c 為 10 + 100 = 110。若是刻意讓它繼續執行,在註解中寫明,就容易與忘了寫 break 區分。

  • A. case 2 之後沒有 break,因此 case 3 的敘述也會執行。
  • B. 正確。連續執行 case 2 與 case 3,再以 break 離開。
  • C. 以 case 3 之後的 break 離開,因此不會執行 default 的敘述。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 執行上方程式時的輸出,下列何者正確?
  2. 連續呼叫上方的函式 f 三次時,第3次的回傳值為下列何者?
  3. C語言中,(1) 在函式中沒有加 static 宣告的區域變數、(2) 以 malloc 配置的區域、(3) 在函式外宣告的變數,各自存在的期間(生命週期)的組合,下列何者正確?
  4. int 為32位元(最大值 2147483647)。上方的函式 fact(n) 能不發生溢位、正確回傳 n 的階乘的最大 n 為下列何者?
  5. int 為4位元組,指標為8位元組。指向 int 的指標 p 的值(位址)為 0x1000 時,p + 3 的值為下列何者?