C言語の基礎

int x = 5;
if (x = 0)
    printf("zero ");
else
    printf("nonzero ");
printf("%d\n", x);

if 文の条件に = を書いた上のコードを実行したときの出力として、正しいものはどれか。

  1. Azero 0
  2. Bnonzero 5
  3. Cnonzero 0
答えと解説を見る

正解:C. nonzero 0

if の条件の x = 0 は、比べる == ではなく代入です。x に0が入り、代入の式の値も0になるので、条件は偽と判断され、else 側の「nonzero」が表示されます。続く printf では、代入で0になった x が表示されます。gcc では -Wall を付けるとこの書き方に警告が出るので、警告を有効にしておくと誤りに気づきやすくなります。

  • A. 代入の式の値は代入した0なので、条件は偽になり、zero は表示されません。
  • B. x = 0 は比較ではなく代入なので、x は0に変わっています。
  • C. 正しい。x に0が代入され、条件は偽になります。
この分野を解く 分野ページへ

C言語の基礎の参考書を探す PR

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

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

  1. レジスタの値 reg のビット2が1かどうかを調べるつもりで、上のコードを書いた。実行したときの結果として、正しいものはどれか。
  2. uint8_t は8ビットの符号なし整数型である。上のコードを実行したときの出力として、正しいものはどれか。
  3. uint8_t は8ビットの符号なし整数型である。x を10回増やす上のコードを実行したときの出力として、正しいものはどれか。
  4. unsigned char は8ビット、int は32ビットとする。上のコードを実行したときの出力として、正しいものはどれか。
  5. uint8_t は8ビットの符号なし整数型、int は32ビットとする。上のコードを実行したときの結果として、正しいものはどれか。