無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者

無題

#1

投稿記事 by 初心者 » 17年前

変数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:無題

#2

投稿記事 by 管理人 » 17年前

確かにこれは解りにくいですね。
条件式は評価されたときに何が返るかご存知でしょうか。

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:無題

#3

投稿記事 by 通り » 17年前

aを2で割った余りが0ならば、という意味だからです。

初心者

Re:無題

#4

投稿記事 by 初心者 » 17年前

実行させるために、!をつけて、否定してる ということですか?

管理人

Re:無題

#5

投稿記事 by 管理人 » 17年前

同じ内容になりますが、
a%2
なら偶数だと0になりますよね。
条件文を真にするためには0以外にしないといけないので
!(a%2)
として式を真にしているのです。

フリオ

Re:無題

#6

投稿記事 by フリオ » 17年前

 
 これまでの回答と重複しますが、
"!a"は"a == 0"と同値です。
なので、
"!(a % 2)"は、"a % 2 == 0"と同値です。
 

初心者

Re:無題

#7

投稿記事 by 初心者 » 17年前

分かりましたー!
早い返答ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る