ページ 1 / 1
無題
Posted: 2008年7月22日(火) 18:14
by 初心者
変数aに3473を与え、この値の偶数、奇数を判定するプログラムを作れ。
というC言語の課題が出たんですけど、解説を読んでも、よくわからないので質問させてください。
#include<stdio.h>
main()
{
int a,b;
a = 3473;
if (! (a % 2)) {
printf("%4d は、偶数。\n",a);
}
if ( (a % 2)) {
printf("%4d は、奇数。\n",a);
}
となるそうなんですけど、なぜ、!(a % 2)なら偶数となるのでしょうか・・・。
Re:無題
Posted: 2008年7月22日(火) 18:29
by 管理人
確かにこれは解りにくいですね。
条件式は評価されたときに何が返るかご存知でしょうか。
if( ○○ )
と書いたとき、○○が真なら実行されますよね。
真というのは「0以外」
偽というのは「0」です。
では、aという数が以下のように変化しているとしましょう。
0,1,2,3,4,5,6....
と言う数を2で割ったあまりを「a%2」であらわしてみると
0,1,0,1,0,1,0....
ですよね。
つまり計算結果が0なら偶数です。ここで
if( a%2 )
とすると、偶数の時0なので、実行されませんよね。
何故なら0は偽だからです。
ビックリマークは否定を表しますから、
if( !(a%2) )
は「0以外」をあらわします。つまり、真です。
わかるでしょうか?
Re:無題
Posted: 2008年7月22日(火) 18:30
by 通り
aを2で割った余りが0ならば、という意味だからです。
Re:無題
Posted: 2008年7月22日(火) 18:45
by 初心者
実行させるために、!をつけて、否定してる ということですか?
Re:無題
Posted: 2008年7月22日(火) 19:19
by 管理人
同じ内容になりますが、
a%2
なら偶数だと0になりますよね。
条件文を真にするためには0以外にしないといけないので
!(a%2)
として式を真にしているのです。
Re:無題
Posted: 2008年7月22日(火) 22:19
by フリオ
これまでの回答と重複しますが、
"!a"は"a == 0"と同値です。
なので、
"!(a % 2)"は、"a % 2 == 0"と同値です。
Re:無題
Posted: 2008年7月23日(水) 01:53
by 初心者
分かりましたー!
早い返答ありがとうございました