• ベストアンサー

0~4以外の際のif文

0~4以外のif文を作りたいのですが ↓のif文を色々変化させたのですが、4より大きくなおかつ0より小さいという結果が出ませんでした。 どこか間違ってるのだと思うのですが・・・ a<0で0ではないことはコンパイルして0ではないことは判明しました。 a<5もやってみましたが・・・。 int a; scanf("%d",&a); if(a < 5 && a < 0){ 4 より大きい & 0より小さい else 0~4以外 関数などは使いません。よろしくお願いします

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

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

> 4より大きくなおかつ0より小さい 「なおかつ」は「両方の条件を満たす」です。 ・4より大きい ・0より小さい を両方満たす値は,0が4より小さいために存在しません。 > 0~4以外 は, 「『0以上かつ4以下』ではない」ですから,ド・モルガンの法則により, 「『0以上ではない』または『4以下ではない』」となり, 「0未満または4より大きい」となります。 これらをそのままコードに落とすと,それぞれ !(0 <= a && a <= 4) !(0 <= a) || !(a <= 4) a < 0 || 4 < a のようになります。

izupawapuro
質問者

お礼

>a < 0 || 4 < a やはり&&であらわすとなるとできないですよね 4 < aというのがやっていいやり方なのかわからないのですが a < 0 || a > 4 でも同じ動作ができたのでよかったです ご回答ありがとうございます!

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

a < 5 を「4 より大きい」と思っているのが思った結果にならない理由です。 ……というか、「4 より大きい & 0より小さい」と「0~4以外」って言ってること同じですよね? どちらかをもう一方とは反対のことを言うように変えてください。そうしないとif文の括弧の中をどう直せばいいかアドバイスできません。

izupawapuro
質問者

補足

ああ、見直したら確かにそうでした・・・ごめんなさい 4より大きい & 0より小さい は 0~4だったら ですね。 プラスに補足しておくと その際にcnt+1する感じかもしれないです elseのとこは 0~4以外です

関連するQ&A

  • if~else文の中にまたif~else文をいれるには。

     このプログラムを思うように実行したいのですが、できません。 コンパイルはできるのですが、警告が4つほど出て、結果も自分が思ってるのとは違います。 プログラムのどこを改善すべきか教えてください。 OSはWindows XPで、コンパイラはボーランドのフリーコンパイラを使用しています。 #include<stdio.h> int main(){ int a,b,c,d; printf("1か0を入力してください。\n"); scanf("%d",&a); if(a=0) { printf("2か3を入力してください。\n"); scanf("%d",&b); if(b=2){ printf("今まで合計は%dです。\n",a+b); } if(b=3){ printf("今まで合計は%dです。\n",a+b); } else { printf("指定した数字を入力して下さい。\n"); } } else if(a=1) { printf("あなたは%dを入力しました。\n",a); } else { printf("指定した数字を入力してください。\n"); } return 0; }

  • main関数以外での結果の表示?

    C言語で関数を用いたプログラムを作成しています。内容はA君、B君のボーリングの成績を入力し、その点数をランク付けするというものです。(250以上はS、200以上はA、150以上はB、100以上はC、50以上はD、50未満はFになります。) それから、このプログラムの条件は 1、main関数は値の入力と関数を呼び出すだけ。 2、関数の引数は入力した2つの値。 3、関数の中で結果を表示。 4、関数の戻り値はなし。 というもので、3番の結果のmain関数以外での結果の表示の仕方がわからず、どうやって結果を表示させていくのかよくわからず、行き詰っています。そのあたりの解説をしていただくとありがたいです。 なお、私が途中まで書いたので、問題点の指摘をおねがいいたします。 #include<stdio.h> int ia(int x); int ib(int y); int main(){  int a,b;  printf("A君のスコア");  scanf("%d",&a);  printf("B君のスコア");  scanf("%d",&b);  }  int ia(int x);  char ix;  if(x>=250){  ix = 'S';  }else if(x>=200 && x<250){  ix = 'A';  }else if(x>=150 && x<200){  ix = 'B';  }else if(x>=100 && x<150){  ix = 'C';  }else if(x>=50 && x<100){  ix = 'D';  else{  ix='F'; } int ib(int y);  char iy;  if(y>=250){  iy = 'S';  }else if(y>=200 && y<250){  iy = 'A';   }else if(y>=150 && y<200){  ix = 'B';  }else if(y>=100 && y<150){  iy = 'C';  }else if(y>=50 && y<100){  iy = 'D';  }else{  iy ='F'; }

  • if文の演算子について

    if文の演算子について int a=0,b=1,c=1,d=1; if(a==1 && b==1 && c==1 ||d==1){ Printf("yes"); }else{ Printf("no"); } if((a==1 && b==1 && c==1 )||d==1){ Printf("yes2"); }else{ Printf("no2"); } } 上記のif文で出力結果が異なります。 if((a==1 && b==1 && c==1 )||d==1)の方はa=1、b=1、c=1の時もしくはd=1の時と 理解できるのですが、 if(a==1 && b==1 && c==1 ||d==1)の方は、どういう条件の時が当てはまるのでしょうか?

  • elseif文の中のif文のところで

    今、c言語の勉強をしていまして、 演習問題のプログラムを作成しています。 elseif文の中のif文のところで エラーが出てしまうのですが・・・。 ご教授して頂けたら幸いです。 #include<stdio.h> int main(void) { int kyori,untin; printf("ようこそ \n"); printf("距離を入力してください->"); scanf("%d", &kyori ); if(kyori < 5) untin = 120; else if(kyori >= 5 && kyori < 21) untin = ((kyori-4)/2*20)+120; else if(kyori >= 21 && kyori < 1000) untin = ((kyori-20)/5*40)+280; //7840円 else if(kyori >= 1000 ) untin = ((kyori-1000)/10*50)+8120 ここでエラー→→→ if(untin <> 0) untin = untin + 50; printf("運賃は%dです。",untin); }

  • if文で困っています。

    define A 5 void main(void) int i; scanf("%d", &i); if (i <= A){ このような形をつくったのですが、if文のところで質問があります。 「数字をいくつか入力し、その入力したデータ数が5つより少ないときに・・・」というようなプログラムにしたいのですが、この場合、「入力した数値が5.0以下であるときに・・・」というプログラムになっているのではないかと、困っています。どちらが正しいのでしょうか?

  • C言語 if文について

    #include <stdio.h> int main(void) { int a; printf("整数を入力してください:"); scanf("%d",&a); if(a % 10 == 5) puts("最下位の桁は5です。"); else puts("最下位の桁は5でありません。"); return 0; これでどうして読み込んだ整数値の最も下の桁が5であるかどうかを判断しているのでしょう? ifの式がいまいち理解できません。 解説できる方いませんか?

  • if-else文および標準演算子(*/+-%)の入力方法

    度々失礼します。 C言語超初心者のものです。QNo.3392139(回答してくださった皆さんありがとうございます。)でも質問させていただきましたが、詳細が足りないようなので、 ここで再度質問をさせていただきます。 プログラミング内容 (1)Enter first integer: 17 [好きな数値選択] (2)Enter operator:(*/+-%) [好きな演算子選択] (3)Enter second integer:5 [好きな数値選択] というように数字・標準演算子・数字の順でキーボードから入力し、 (4)17 / 5 = 3 を(1)~(4)までDOS画面?上に表示させるものです。 そして、if-else文を作成して、以下のようにプログラムを組んでみたのですが(標準演算子は”/”を選択するようにしています)、 else文のところで”parse erro before 'else' ”というエラーが出てしまいます。このエラーがなくなれば、プログラムはうまく起動すると思うのですが・・・。 どこが悪いのでしょうか? まあ、超初心者なので、使える言語はint、float、char、そして関数はscanf、if-else文、位です。 int main() { int num1, num2, num4, num5, num6; char chr; printf("Enter the first integer: "); scanf("%d",&num1); scanf("%c",&num5); printf("Enter an operator (* / + - %): "); scanf("%c",&chr); scanf("%c",&num6); printf("Enter the second integer: "); scanf("%d",&num2); if(chr == '/') num4 = num1 / num2; printf("%d / %d = %d\n", num1, num2, num4); else printf("Can not\n"); system("pause"); return 0; } 大変皆さんお忙しいとは思いますが、出来たらお願いします。 査閲ありがとうございます。

  • if文が機能しません

    初歩的な質問でお恥ずかしいのですが、簡単なif文が、機能してくれません。 良かったら、アドバイスよろしくおねがいします 以下がソースとなります。 double x, a; x=(int) (rand() / (RAND_MAX+1.0) * 100); if (0 <= x < 50) {        a=1; } else {        a=2; } これなんですが、結果が全てa=1となってしまい、分岐してくれません。 なぜでしょうか?

  • 配列やif文について

    課題がでました。 最大で30個の整数を入力し、それを大きい順に並び替えるプログラムを 1次元配列と繰り返し・if文を使い作成しなさい。 例は input 12 8 90 the large order 90 12 8 という課題がでました。 ここの方なら簡単とは思いますが、よろしくお願いいたします。 自分で作ったプログラムは #include <stdio.h> main() { int a[30]; int n; int imax; int work; int max ; int i,k; printf("seisuunokosuu(<=30)="); scanf("%d",&n); for(i=0;i<n;i++){ printf("input.%2d=",i+1); scanf("%d",&a[i]);} for(i=0;i<n;i++){ imax = i; max = a[imax]; for(k=i+1;k<=n;k++){ if(a[k] > max){ imax =k; max = a[imax]; } } work = a[i]; a[i] = a[imax]; a[imax] = work; } for(i=0;i<n;i++){ printf("%d\n",a[i]); } return(0); } ですが、繰り返し・if文(一度)をつかっていません。 アドバイスの方よろしくおねがいいたします。

  • if文について

    ソートのプログラムにおいて昇順・降順を選択して表示させるプログラムを書いてるのですが 下記のように記述するとエラーが出てしまいます。 よく調べたのですがエラー表示もよくわからないものなのでした。 どのようにすればうまく動くようになるのでしょうか? #include <stdio.h> #define swap(type, x, y) do {type t = x; x = y; y = t; } while (0) void bubble(int a[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) if (a[j - 1] > a[j]) swap(int, a[j - 1], a[j]); } } void bubble2(int a[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) if (a[j - 1] < a[j]) swap(int, a[j - 1], a[j]); } } int main(void) { int i; int x[7]; int nx = sizeof(x) / sizeof(x[0]); int select; printf("%d個の整数を入力せよ。\n", nx); for (i = 0; i < nx; i++) { printf("x[%d] : ", i); scanf("%d", &x[i]); } printf("昇順ですか降順ですか? 0:昇順/1:降順 >"); scanf("%d",&select); if (select == 0) bubble(x, nx); puts("昇順にソートしました。"); for (i = 0; i < nx; i++) printf("x[%d] = %d\n", i, x[i]); else bubble2(x, nx); puts("降順にソートしました。"); for (i = 0; i < nx; i++) printf("x[%d] = %d\n", i, x[i]); return (0); }

専門家に質問してみよう