アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://webkaru.net/clang/check-odd-even/
 ですが!仕組みがいまいちわかりません。
えーとaがif5だったら%2に==0を代入した場合・・・
 なのでelseに回される。
 だと思うのですが!?以上の・・・の内容がわかればこのプログラムの意味が
分かると思うのですが、どなたか教えていただけないでしょうか?
 以下プログラムです。
 よろしくお願いいたします
#include <stdio.h>

int main(void)
{
int a;

printf("整数を入力してください = ");
scanf("%d",&a);

if( a % 2 == 0 ){
printf("%d は偶数です\n", a);
} else {
printf("%d は奇数です\n", a);
}

return 0
}

質問者からの補足コメント

  • お付き合いくださいまして誠にありがとうございました。
     えーと
     真面目に参考書で調べましたところ!
    演算子    機能       使用例
    %    割り算の余り    a=B%C;
     とありまた。
    以上の参考書の「使用例」の意味がよくわかりません! 「機能」の
     ”割り算の余り”ならば
      「使用例」の”a=B%C;”を数字の置き換えた場合ご説明をしてくださるお
     方がおられましたらご教授をお願いいたします。
     基本で、躓く場となりかねません!基本がわかっていないとやっぱり行き詰
     りますからね・・・ 誠にご恐縮で申し訳ございませんが新春早々からの
     ”暴言的なご回答”は、お控えくださいませ^^
      お付き合いのほどを何トドよろしくお願い申し上げます

      補足日時:2016/01/13 04:50
  • スーパーレスポンスのご回答誠ありがとうございました。
     せっかくのご回答ですので、あわてずじっくり海馬から大脳に浸透させたいと存じます。
    ご解決までしばらくお待ちくださいませ^^
    PHP等、昨年は大変お世話になりました。本年も昨年同様よろしくお願いいたします。
    本年後期からは、はまだわかりませんが洋上から電波を飛ばしているかもしれません(笑い)

    No.5の回答に寄せられた補足コメントです。 補足日時:2016/01/13 05:08
  • 今朝開いたら、みなさからたくさんのご回答をいただいおりました^^
     ありがとうございます。
    手が空き次第じっくり読んで海馬~大脳へ情報の伝達を試みます。
    しばらくお待ちくださいませ^^

      補足日時:2016/01/14 05:43
  • ありがとうございます。
    ==は代入ではなく、比較です。0と同じかどうか判定しています。
     そうでした。!
     参考書には
    ==は”比較演算子の種類”で”等しい” 
    =が”代入”でしたので あー勘違いでした。
    その角度から紐解いていくと何となく見えてきそうな気がします。
     しばらくお待ちくださいませ。

    No.9の回答に寄せられた補足コメントです。 補足日時:2016/01/15 06:07
  • %意味ですが、ほかの参考書には、
    %の意味でたとえば→a=b%c→bをcで割った余りをaに代入(整数型のみ有効)
    if( a % 2 == 0 ){・・はもしa÷2のあまりは0と等しいのだから
    偶数となり そのほかだったらelseに回され、奇数となり・・・

    間違いないでしょうかね^^

      補足日時:2016/01/15 06:26

A 回答 (9件)

続けて失礼します。



> 「使用例」の”a=B%C;”を数字の置き換えた場合ご説明をしてくださるお
 方がおられましたらご教授をお願いいたします。

a = 5 % 3 の場合
5割る3は、商が1, 余り2です。
従ってaには2が代入されます。
この回答への補足あり
    • good
    • 1
この回答へのお礼

siffon9様、毎回&沢山のご回答をいただき誠にありがとうございました。
助かっております^^
わかりやすご回答でした。
 OKです。

お礼日時:2016/01/16 06:30

if( a % 2 == 0 ){


これは

int amari = a % 2;
if( amari == 0 ){

と同じになります
ある数字と2で割った時、割り切れる時(余りが0)は偶数、
割り切れない時(余りが1)は奇数になりますよね。

この算数を利用して偶数か奇数かを判定しています。

aが5の時は
int amari = 5 % 2; → 5÷2の余りがamari に代入されるのでamari は1
if( amari == 0 ){ のif分には入らず、elseの処理に入ります。

==は代入ではなく、比較です。0と同じかどうか判定しています。
この回答への補足あり
    • good
    • 0

間違い、修正



>Cが 4 の場合、Bがどんな数字でも a には 0~3が入ります
の下の表、間違いだらけなので、いかに修正

a=0 B=0 C=4  0÷4=0 余り 0
a=1 B=1 C=4  1÷4=0 余り 1
a=2 B=2 C=4  2÷4=0 余り 2
a=3 B=3 C=4  3÷4=0 余り 3
a=0 B=4 C=4  4÷4=1 余り 1
a=1 B=5 C=4  5÷4=1 余り 2
    • good
    • 1

割り算のあまり、というよりも


割り算のあまりの特性を利用していると考えて下さい

C が 3 の場合、Bがどんな数字でも a には 0~2が入ります
a=0 B=0 C=3  0÷3=0 余り 0
a=1 B=1 C=3  1÷3=0 余り 1
a=2 B=2 C=3  2÷3=0 余り 2
a=0 B=3 C=3  3÷3=1 余り 0
a=1 B=4 C=3  4÷3=1 余り 1
a=2 B=5 C=3  5÷3=1 余り 2
: (Bを1づつ増やしていくと a 延々と 0,1,2 を吐きます)

Cが 4 の場合、Bがどんな数字でも a には 0~3が入ります
a=0 B=0 C=3  0÷4=0 余り 0
a=1 B=1 C=3  1÷4=0 余り 1
a=2 B=2 C=3  2÷4=0 余り 2
a=3 B=3 C=3  3÷4=0 余り 3
a=1 B=4 C=3  4÷4=1 余り 1
a=2 B=5 C=3  5÷4=1 余り 2
: (Bを1づつ増やしていくと a 延々と 0,1,2,3 を吐きます)

Cが 5 の場合、Bがどんな数字でも a には 0~5の値が入ります
Cが 6 の場合、Bがどんな数字でも a には 0~7の値が入ります
Cが n の場合、Bがどんな数字でも a には 0~(n-1)の値が入ります
    • good
    • 0

算数・数学では、左から右に流れます。


B % C = a
5 % 2 = 1
※計算結果が、「=」の左側から右側に流れる。

プログラムの場合、右から左へ流れます。
a = B % C
1 = 5 % 2
※計算結果が、「=」の右側から左側へ流れる。

( a % 2 == 0 )について。
まず、算数・数学では、「代入」と「比較」の区別がありません。
例えば、「1 = 0」は正しくありません。これは、「比較」です。
5 % 2 = 1
の計算例でも、5を2で割った余りは1なので、「1 = 1」となり「比較」して正しいと判断します。
しかし、プログラムでは計算結果を「代入」すると言う考え方があります。
1 = 5 % 2
と説明しましたが、これは間違いで正しくは「a = 5 % 2」となります。
5を2で割った余りを「a」に入れる(代入する)です。
結果、「a = 1」となります。

このように、プログラムでは「代入」と「比較」では意味が異なる事から、
「=」は代入、「==」は比較としています。
aが5とした場合、
( 5 % 2 == 0 )
となり、
( 1 == 0 )
で、「==」は比較なので、等しくないとなります。

if( a % 2 == 0 ){
 printf("%d は偶数です\n", a);
} else {
 printf("%d は奇数です\n", a);
}

このプログラムでは、
( a % 2 == 0 )が等しい場合、
 printf("%d は偶数です\n", a);
が実行され、
( a % 2 == 0 )が等しくない場合、
 printf("%d は奇数です\n", a);
が実行されます。

つまり、ある数値を2で割った余りが0(割り切れたら)偶数。
余りが1(割り切れなかったら)奇数。
と表示しているわけです。
    • good
    • 0

> ( a % 2 == 0 )



A % Bは、Aを2で割った余りを求めます。
X == Yは、XとYが等しいなら真、等しくないなら偽を求めます。

「%」と「==」は演算子(計算するときに使用する記号)といいます。演算子には演算(計算)する優先順位があります。
例えば1+2×3の場合は、2×3を先に計算しますよね。これは「+」より「×」の方が優先順位が高いからです。

↓は、C言語で使用する演算子です。
http://www.bohyoh.com/CandCPP/C/operator.html

「%」と「==」の優先順位をみて下さい。「%」が4で、「==」が8になっています。
つまり「%」の方が優先順位が高いので先に計算する必要があります。

元の( a % 2 == 0 )で考えると、a%2を先に計算する必要があります。括弧を付けてわかり易くすると
( (a % 2) == 0 )となります。

つまり
「aを2で割った余り」が0と等しければ真で、0と等しくなければ偽になるということになります。
    • good
    • 0

C言語の"=="は比較演算子です。

代入文ではありません。
この場合、
"a % 2"は a を 2 で割ったあまりを求めています。
よって、a を 2 で割ったあまりが 0 であるか比較し、0の場合(偶数の場合)はその if文に掛かる文が実行され、そうでなければ(奇数の場合) else文に掛かる文が実行されます。
    • good
    • 0
この回答へのお礼

ご回答くださいまして誠にありがとうございました。
 わかりやすいご回答でした^^
 現在PHPとC言語を併用しながら
プログラミングを学習中でございます
こんごともよろしくお願いいたします。

お礼日時:2016/01/16 06:23

> えーとaがif5だったら%2に==0を代入した場合・・・



えーと基本中の基本を全く理解できていません。

> if( a % 2 == 0 ){

これはaを2で割った余りが0か判定しているだけです。
    • good
    • 0

質問の文章が何言ってるかわかりませんが、余りがゼロなら偶数、そうでないなら奇数と判定しているだけです。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!