• 締切済み

3つの入力した数値の大小比較ができません。

#include<stdio.h> int main() { int a,b,c; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); if(a<b) { if(b<c) { if(a<c) { printf("%d<%d<%d\n",a,b,c); } else { printf("%d%d%d",a,b,c); } } if(b>c) { if(a>c) { printf("%d<%d<%d\n",c,b,a); } else { printf("%d<%d<%d\n",a,c,b); } } } else if(a>b) { if(b>c) { if(a>c) { printf("%d>%d>%d\n",a,b,c); } else { printf("%d>%d>%d\n",a,c,b); } } else if(b>c) { if(a>b) { printf("%d>%d>%d\n",a,b,c); } else { printf("%d>%d>%d\n",b,a,c); } } else if(c>b) { if(c>a) { printf("%d<%d<%d\n",b,a,c); } else { printf("%d>%d>%d\n",a,c,b); } } else if(a<c) { if(a<b) { printf("%d<%d<%d\n",a,b,c); } else { printf("%d<%d<%d\n",b,a,c); } } else if(a>c) { if(a<b) { printf("%d>%d>%d\n",b,a,c); } else { printf("%d>%d>%d\n",a,b,c); } } else { printf("%d=%d=%d\n",a,b,c); } } 間違っている部分を教えてください。

みんなの回答

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.7

#include<stdio.h> int main() {  int a,b,c;  scanf("%d",&a);  scanf("%d",&b);  scanf("%d",&c);  if(a<b && b<c)   ;/* a<b<c */  else if(a<c && c<b)   ;/* a<c<b */  else if(b<a && a<c)   ;/* b<a<c */  else if(b<c && c<a)   ;/* b<c<a */  else if(c<a && a<b)   ;/* c<a<b */  else if(c<b && b<a)   ;/* c<b<a */  else   ;/* 同じ値が含まれている */ }

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.6

あー…どこかで誰かが勘違いしてるかな……? > iF(a<b){else(b<c){printf("a<b<c")}} じゃなくて if(a<b) { if(b<c) { /* a<b<c */ } } な。

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.5

> iF(a<b){else(b<c){printf("a<b<c")}} > でa<b<cが成り立ちますか? 誤字脱字は置いといて...... では逆に、a<b かつ b<c で a<b<c が成り立たない状況が考えられますか? プログラムがどうとか言う以前の、算数/数学の話です。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.4

#include <stdio.h> int main(void) { double a, b, c; char buf[BUFSIZ]; int stat; while (1) { stat = 0; printf("input 3 numbers, a b c >> "); if (fgets(buf, BUFSIZ, stdin) == 0) { break; } sscanf(buf, "%lf %lf %lf", &a, &b, &c); if (a <= b) { stat |= 1; } if (b <= c) { stat |= 2; } if (c <= a) { stat |= 4; } switch (stat) { case 1: printf("%lf < %lf <= %lf, a < c <= b\n", a, c, b); break; case 2: printf("%lf < %lf < %lf, b < a < c\n", b, a, c); break; case 3: printf("%lf <= %lf <= %lf, a <= b <= c\n", a, b, c); break; case 4: printf("%lf < %lf < %lf, c < b < a\n", c, b, a); break; case 5: printf("%lf <= %lf < %lf, c <= a < b\n", c, b, a); break; case 6: printf("%lf <= %lf <= %lf, b <= c <= a\n", b, c, a); break; case 7: printf("%lf == %lf == %lf, a == b == c\n", a, b, c); break; } } return 0; }

回答No.3

#1,#2さんとは別のアプローチ方法を 数字データをいったん配列にでもいれて ソート処理(バブルソートが比較的簡単なアルゴリズム) してやるのがメンテナンス性がいいし 対象となる数字の個数が増えても対処しやすいでしょう。

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

ソースコードを投稿するときは全角スペースでインデントすると見やすいですよ。 a<bの時のパターンは a<b<c , a<c<b , c<a<b の三つですね。 それぞれ、どのような条件を加えると成り立つか考えてみてください。 同様にしてb<aの時のパターン b<a<c , b<c<a , c<b<a も考えられます。 これで終わりです。 printfは6個で出来ますね。

mezamasi8
質問者

お礼

回答ありがとうございます。 iF(a<b){else(b<c){printf("a<b<c")}} でa<b<cが成り立ちますか?

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.1

どうも学校の課題っぽいので、自分でがんばってください。でないと勉強になりません。ヒントだけ。 まず、大小関係について頭を冷やして、ノートにでも整理して書いてみましょう。 たとえば、 if(a<b){ if(b<c){ if(a<c){     printf("%d<%d<%d\n",a,b,c); } else{     printf("%d<%d<%d\n",a,b,c); } という始まり方をしていますが、 int変数a,b,cに対してa<bとb<cの両方が成り立ったらifで調べるまでもなく a<c は成り立っています。if(a<c)は無駄。当然else節が実行されることもありません。 このように、二つの数の大小関係の組み合わせと、3つの数の順序の関係を明確化できずにやみくもにプログラムを書いているように見受けられます。

関連するQ&A

専門家に質問してみよう