• ベストアンサー

4の倍数を論理演算で表す。。

/*Prog32.cキーボードから整数型変数aへデータを入力し、aの値が4の倍数のときは“4の倍数です”と表示し、そうでないときは、“4の倍数ではありません”と表示する。ただし、整数データのビット数はわからないものとし、計算にはビットごとの論理演算のみを用いる。*/ #include <stdio.h> int main(void) { int a; printf("整数を入力して下さい! "); scanf("%d", &a); (a % 4 ) ? printf("4の倍数ではありません。\n", a) :printf("4の倍数です。\n", a); return(0); } 4の倍数を論理演算で表す方法がわかりません。。 自分では上記のように算術を使うやりかたしかわかりませんでした。 よろしくお願いします!

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

  • ベストアンサー
回答No.2

#include <stdio.h> int main(void) { int a; printf("整数を入力して下さい! "); scanf("%d", &a); if(a%4==0){ printf("%dは4の倍数です。\n", a); } else{ printf("%dは4の倍数ではないです。\n", a); } return(0); } のまちがいか。

その他の回答 (2)

  • floor101
  • ベストアンサー率28% (2/7)
回答No.3

4の倍数は、2進数で表すと、下位2ビットが0です。 ですから、if文の条件式を if ((!(a & 3)) 4の倍数; else 4の倍数ではない; とすればいいと思います。

回答No.1

#include <stdio.h> int main(void) { int a; printf("整数を入力して下さい! "); scanf("%d", &a); if(a%==0){ printf("%dは4の倍数です。\n", a); } else{ printf("%dは4の倍数ではないです。\n", a); } return(0); } でいいんじゃないの?このままこぴぺしても全角の空白がどっかにはいっているからそのまま通らないかも。

関連するQ&A

  • インクリメント演算子

    はじめまして。プログラミングについて、とても初歩的な所で つまづいています。 変数を一つだけかつ、インクリメント演算子のみを用いて 整数値を一つ入力し,その整数値を1ずつ増やした結果を出す 4,5,6,7,8  (←このようにしたい) というプログラミングを書きたいのですが、どこのサイトを見ても 5個の文字の例はありませんでした。 2個までは以下の例でできました。 #include <stdio.h> main() { int a; printf("整数値を入力"); scanf("%d",&a); printf("1ずつ増加%d,%d,\n",a++,a); } もう、この問題で何日も立ち止まっています。 お願いです、どなたか助けてください。

  • if文を条件演算子に書き換えについて・・・

    /* 読み込んだ三つの整数値の最大値を求めて表示 */ #include <stdio.h> int main(void) { int n1, n2, n3, max; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2); printf("整数3:"); scanf("%d", &n3); max = n1; if (n2 > max) max = n2; if (n3 > max) max = n3; printf("最大値は%dです。\n", max); return (0); } 上記のソースコードを、条件演算子を用いた形にするという問題なのですが、初心者で理解しずらいところもありどうやっても同じ結果を出すことが出来ないため質問させていただきました。 ご教授お願いしますm(_)m

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、それらの値の差が10以下でなければ、「それらの差は10以下」そうでなければ「それらの差は11以上」と表示するプログラムを作成せよ。ただし、論理OR演算子を用いること。 (自分の解答) #include <stdio.h> int main(void) { int n1,n2; printf("2つの整数を入力してください\n"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); if ( (n1-n2) <= 10 || (n1-n2) >= 11) { /*ここがわかりません*/ printf("それらの差は10以下です。"); } else { printf("それらの差は11以上です。"); } return 0; } 論理OR演算子の使い方が分かりません。 解答お願いいたします。

  • インクリメント演算子について

    インクリメント演算子について プログラミング超初心者です。 大学のプログラミングの課題で インクリメント演算子を使って 数字をひとつずつ大きく(小さく)していくという課題が出ました 私が作ったプログラムは以下のとおりです #include <stdio.h> int main(void) { int x ; //変数宣言 printf("整数値を入力してください:"); scanf("%d",&x); printf("1ずつ増加\n"); printf("%d,",x++); printf("%d,",x++); printf("%d,",x++); printf("%d,",x++); printf("%d\n",x); printf("1ずつ減少\n"); printf("%d,",x--); printf("%d,",x--); printf("%d,",x--); printf("%d,",x--); printf("%d\n",x--); } ちなみに、整数値は10にしました。 結果は 1ずつ増加 10,11,12,13,14 1ずつ減少 14,13,12,11,10 と、望んでるものになったのですが、疑問があるので質問させていただきます。 xを変数にすると、x++はx+1になると思うのですが表示されたのは10、11、…と 10から表示されました。 しかも、増加していった最後のxはなぜ14になるのでしょうか? 課題は出来たのですが、頭が混乱しています… 詳しく解説をお願いします。

  • 論理演算の解き方を教えて下さい。

    Q.「ある数Nから次のデータに論理演算を用いて変換したい。その手順を16進数で記述せよ。但しXは変化させてはならないビットを表す。また、データ長は8ビットとする。」  (1)N→XXXX0XXX  (2)N→X0111001 という問題です。まず問題文の意味からわかりません。よろしくお願いいたします。

  • C言語の課題で困っています。その1.四則演算

    二つの整数値を読み込んで、前者を後者で割り、その結果の商と余りを表示するプログラムを作成。 実行例にあるよう、ゼロで割るような場合への対処も考慮する。 実行例1: 整数の除算を行います。整数を入力してください。 整数A:13 整数B:5 13 ÷ 5 = 2 あまり 3 実行例2: 整数の除算を行います。整数を入力してください。 整数A:10 整数B:0 0でわることはできません! (注)プログラム実行時にキーボードからどんな整数を入力してもいいように作成すること。 という課題に取り組んでいますが、途中までしか記述できません。 どなたか助けてください。 下記が途中までの記述です。 /*二つの整数値を読み込んで、前者を後者で割り、その結果の商と余りを表示*/ #include <stdio.h> int main(void) { int na, nb; printf("shimasaki kazunori \n"); puts("整数の除算を行います。整数を入力してください。: \n"); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("na ÷ nb = %d あまり %d \n", na / nb, nb, na % nb); return(0); }

  • scanf関数のプログラムをgetchar関数で

    scanf関数を使って四則演算、論理輪、論理積をint、float、double型で表示するプログラムを作ったのですが これをscanf関数ではなく、getchar関数で組みなおし、関数化する課題が出ました。 そのままscanf関数のところだけを変えても型が違うというエラーが出てうまくいきません。 どうすればいいでしょうか? 一応scanf関数で組んだプログラムの一部を載せておきます。 #include <stdio.h> #include <math.h> main() { float a , b; float x[5]; printf("正の数字を2つ入力して下さい(小数点を含めて4ケタまで):\n"); for(;;) { printf("\na="); scanf("%f" , &a); if(a>=0 && a<=9999 && a) { break; } else { printf("****aに入力エラー****\n"); printf("数字は4ケタ以内の正数を入力:\n"); continue; } } for(;;) { printf("b="); scanf("%f" , &b); if(b>=0 && b<=9999 && b) { break; } else { printf("****bに入力エラー****\n"); printf("数字は4ケタ以内の正数を入力:\n"); continue; } } x[0] = a+b; x[1] = a-b; x[2] = a*b; x[3] = a/b; x[4] = a||b; x[5] = a&&b; printf("\n"); printf("int型 結果:\n足し算=%d\n" , (int)x[0]); printf("引き算=%d\n" , (int)x[1]); printf("掛け算=%d\n" , (int)x[2]); printf("割り算=%d\n" , (int)x[3]); printf("論理和=%d\n" , (int)x[4]); printf("論理積=%d\n" , (int)x[5]); printf("\n"); printf("float型 結果:\n足し算=%f\n" , x[0]); printf("引き算=%f\n" , x[1]); printf("掛け算=%f\n" , x[2]); printf("割り算=%f\n" , x[3]); printf("論理和=%f\n" , x[4]); printf("論理積=%f\n" , x[5]); ・ ・ ・ getchar(); }

  • 論理演算結果の表示について

    Cで論理演算をするプログラムを考えているのですが、少し行き詰ってしまいました。 例えば(A+B)*(A+B+C)を論理演算で考えた場合、答えはA+Bとなりますがどうすればこの結果を画面に表示させる事ができるのかが分からないのです。 ただ単に #include <stdio.h> int main(void) { int a,b,c,y ; a = 'A'; b = 'B'; c = 'C'; y = a|b & a|b|c; printf("%c\n",y); } としたら表示結果は「C」となってしまいますよね(文字を2進で計算しているからこの結果になるという事は理解しています)。 もしかしてif文を使用して総当り的に文字を調べていくしか方法がないのでしょうか?実際はもっと複雑な演算をプログラムに計算してもらいたいと考えているので、他に方法がないか考えているのですが… どうかよろしくお願い致します。

  • int型とfloat型の演算結果

    C初心者です。 int型とfloat型で割り算をして処理を表示させてます。 以下、実処理の一部です。 int a; int b; a = 3; b = 2; (1) printf("答え=%d:1のはず\n",a/b); (2) printf("答え=%d:1のはず\n",a/(float)b); (3) printf("答え=%d:1のはず\n",(float)a/b); (4) printf("答え=%d:1のはず\n",(float)a/(float)b); 私の予想では(1)~(4)まですべて1が表示されると思っていました。 実際は(1)のみ1で(2)~(4)は0でした。 (2)~(4)はなぜ0と表示されるのですか? ・整数型と実数型で演算した場合、実数型に合わせられてること ・表示が整数型であること なので1が表示されると予想したのですが・・・。

  • C言語初心者です。次の問題で質問です。

    三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ。 (※if文ではなく、条件演算子を用いよ) if文を用いてのプログラミングは出来ました。 しかし、条件演算子のプログラミングが行き詰りました…。 条件演算子の組み合わせ方が良く分かりません 以下、自分の解答です。(おそらく誤りです) #include <stdio.h> int main(void) { int n1,n2,n3,min; printf("三つの整数を入力してください。\n"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); printf("整数3:"); scanf("%d",&n3); min = (n1>n2>n3) ? n2 : n3; /*ここが分かりません*/ printf("最小値は%dです。\n",min); return 0; } (n1>n2>n3) ? としてしまうと、大小関係の分別が複雑になるので、この書き方は間違っていると思います。(例として、(6>1>4)や(1>6>4)など。) (n1>n2 || n2>n3) ? などと書くのでしょうか?分かりません。 回答お願いいたします。

専門家に質問してみよう