• ベストアンサー

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); }  

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

C言語独特のルールですが、 ゼロが偽、それ以外が真と決められています。

noname#13733
質問者

お礼

ありがとうございました。助かります。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.4

真とか偽とか考えず、 if ( 式 ) 文1; else 文2; は式が0と等しくなければ文1が、0と等しければ文2を実行すると理解したほうがいいと思います。 そもそもCには真・偽を示す論理型がありません。C++にはありますが。 等号や不等号の演算子は、両辺の関係が正しければ整数1を正しくなければ整数0を返すという演算子で、a%2が、aが偶数なら整数0を奇数なら整数1を返す演算なので地位は対等です。 まあ、あたかも論理型があると考えたほうが理解しやすい局面は多いかとお思いますので、そういうケースでは真・偽で理解して、よくわからなくなったら、基本である0と等しいかどうかに帰ればいいと思います。

  • hideo2004
  • ベストアンサー率35% (68/189)
回答No.3

演算子の%は剰余算なので、 この場合は、 aを2で割った余りが0のときが偽、0以外のときが真です。

noname#13733
質問者

お礼

とても参考になりました。ご丁寧にありがとうございました。

回答No.2

>if(a%2)のところが何が真で何が偽なのかよくわかりません。 if(a%2)…aを2で割った余りが0か1を見ています。 0以外はしんですから、ここのcontinue;が実行される訳ですね。

noname#13733
質問者

お礼

とても参考になりました。ありがとうございました。

関連するQ&A

専門家に質問してみよう