• 締切済み

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つの数の順序の関係を明確化できずにやみくもにプログラムを書いているように見受けられます。

すると、全ての回答が全文表示されます。

専門家に質問してみよう