- 締切済み
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); } } 間違っている部分を教えてください。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- Trick--o--
- ベストアンサー率20% (413/2034)
#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)
あー…どこかで誰かが勘違いしてるかな……? > iF(a<b){else(b<c){printf("a<b<c")}} じゃなくて if(a<b) { if(b<c) { /* a<b<c */ } } な。
- Trick--o--
- ベストアンサー率20% (413/2034)
> 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)
#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; }
- dondon5959
- ベストアンサー率15% (36/229)
#1,#2さんとは別のアプローチ方法を 数字データをいったん配列にでもいれて ソート処理(バブルソートが比較的簡単なアルゴリズム) してやるのがメンテナンス性がいいし 対象となる数字の個数が増えても対処しやすいでしょう。
- Trick--o--
- ベストアンサー率20% (413/2034)
ソースコードを投稿するときは全角スペースでインデントすると見やすいですよ。 a<bの時のパターンは a<b<c , a<c<b , c<a<b の三つですね。 それぞれ、どのような条件を加えると成り立つか考えてみてください。 同様にしてb<aの時のパターン b<a<c , b<c<a , c<b<a も考えられます。 これで終わりです。 printfは6個で出来ますね。
- a-saitoh
- ベストアンサー率30% (524/1722)
どうも学校の課題っぽいので、自分でがんばってください。でないと勉強になりません。ヒントだけ。 まず、大小関係について頭を冷やして、ノートにでも整理して書いてみましょう。 たとえば、 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つの数の順序の関係を明確化できずにやみくもにプログラムを書いているように見受けられます。
お礼
回答ありがとうございます。 iF(a<b){else(b<c){printf("a<b<c")}} でa<b<cが成り立ちますか?