- ベストアンサー
C言語の質問です。
下記のプログラムを実行すると結果が 10,20 になるですが if(a%2)のところが何が真で何が偽なのかよくわかりません。どなたか教えていただけないでしょうか? #include<stdio.h> main(){ int a, b=0; for(a=0;a<10;a++){ if(a%2) continue; b+=a; } printf("%d,%d\n",a,b); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
C言語独特のルールですが、 ゼロが偽、それ以外が真と決められています。
その他の回答 (3)
- notnot
- ベストアンサー率47% (4900/10359)
真とか偽とか考えず、 if ( 式 ) 文1; else 文2; は式が0と等しくなければ文1が、0と等しければ文2を実行すると理解したほうがいいと思います。 そもそもCには真・偽を示す論理型がありません。C++にはありますが。 等号や不等号の演算子は、両辺の関係が正しければ整数1を正しくなければ整数0を返すという演算子で、a%2が、aが偶数なら整数0を奇数なら整数1を返す演算なので地位は対等です。 まあ、あたかも論理型があると考えたほうが理解しやすい局面は多いかとお思いますので、そういうケースでは真・偽で理解して、よくわからなくなったら、基本である0と等しいかどうかに帰ればいいと思います。
- hideo2004
- ベストアンサー率35% (68/189)
演算子の%は剰余算なので、 この場合は、 aを2で割った余りが0のときが偽、0以外のときが真です。
お礼
とても参考になりました。ご丁寧にありがとうございました。
- Tsukasa0215
- ベストアンサー率22% (280/1257)
>if(a%2)のところが何が真で何が偽なのかよくわかりません。 if(a%2)…aを2で割った余りが0か1を見ています。 0以外はしんですから、ここのcontinue;が実行される訳ですね。
お礼
とても参考になりました。ありがとうございました。
お礼
ありがとうございました。助かります。