推測ですが、与えられた問題は、
- C言語において"="(代入演算子)と"=="(比較演算子)の違いを理解しているか
- if文の条件分岐を文法的に厳密に理解しているか
を問う設問だと思います。
以下、例を挙げて説明します。**評価値とは、「その値を評価したもの」**です。
[1] 代入演算子の場合
C
1a = 5; // (1) 仮に、a = 5とします。
2b = a // (2) 代入演算子
3if (b = a) // (3) if文の評価対象が b = a
(1)はわかると思います。"a"の評価値は"5"です。
(2)は「bにaの値を代入する」という意味です。"b = a"の「評価値」は"5"になります。
(3)はif文の評価対象が"b = a"です。この例の場合
は同じことになります。
次に、if文の分岐条件を正確に記述します。
if文は後に続く()の中の値が
と判断します。
上の例では、if文の中の値は"5"ですので、"真"となり、
"0以外の値がbに代入された"ということになります。
の場合、if文の評価対象は"0"ですので、"偽"となり、
"0がbに代入された"ということになります。
[2]比較演算子の場合
次の例を挙げます。
C
1a = 5; //
2b = 5; //
3a == b // (1)
4if(a == b) // (2)
(1)では"=="つまり比較演算子を使っています。
比較演算子では、
- aとbを比較し、一致した場合、評価値は"1"になる
- aとbを比較し、一致しない場合、評価値は"0"になる
上の例では"a == b"の評価値は"1"です。
(2)ではif文の評価対象は"a == b"です。上の例では
は同じことですので、if文は"真"となり、if文の直後の文が実行されます。
もし、a = 5, b = 3の場合、
は同じことになり、if文は"偽"ですので、if文の直後の文は実行されません。
以上、長くなりましたが、if文に関してご説明しました。
まとめると、
if文は、評価対象の値が非0ならば真、0ならば偽となるため、設問にあったプログラムは正しい。
ということになります。
参考にしていただけると幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/05 14:25
2020/10/05 15:26
退会済みユーザー
2020/11/23 09:07