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 のラベルに飛び、そこから break に出会うまで、下の case の文も続けて実行します(フォールスルー)。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言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

C言語の基礎のほかの問題

  1. 上のプログラムを実行したときの出力として、正しいものはどれか。
  2. 上の関数 f を3回続けて呼び出したとき、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 の値はどれか。