プロが教える店舗&オフィスのセキュリティ対策術

#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);
}
}

間違っている部分を教えてください。

A 回答 (7件)

どうも学校の課題っぽいので、自分でがんばってください。

でないと勉強になりません。ヒントだけ。
まず、大小関係について頭を冷やして、ノートにでも整理して書いてみましょう。
たとえば、
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つの数の順序の関係を明確化できずにやみくもにプログラムを書いているように見受けられます。
    • good
    • 0

ソースコードを投稿するときは全角スペースでインデントすると見やすいですよ。



a<bの時のパターンは
a<b<c , a<c<b , c<a<b
の三つですね。
それぞれ、どのような条件を加えると成り立つか考えてみてください。
同様にしてb<aの時のパターン
b<a<c , b<c<a , c<b<a
も考えられます。
これで終わりです。

printfは6個で出来ますね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/31 20:16

#1,#2さんとは別のアプローチ方法を


数字データをいったん配列にでもいれて
ソート処理(バブルソートが比較的簡単なアルゴリズム)
してやるのがメンテナンス性がいいし
対象となる数字の個数が増えても対処しやすいでしょう。
    • good
    • 0

#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;
}
    • good
    • 0

> iF(a<b){else(b<c){printf("a<b<c")}}


> でa<b<cが成り立ちますか?

誤字脱字は置いといて......
では逆に、a<b かつ b<c で a<b<c が成り立たない状況が考えられますか?
プログラムがどうとか言う以前の、算数/数学の話です。
    • good
    • 0

あー…どこかで誰かが勘違いしてるかな……?


> iF(a<b){else(b<c){printf("a<b<c")}}
じゃなくて
if(a<b) { if(b<c) { /* a<b<c */ } }
な。
    • good
    • 0

#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
  ;/* 同じ値が含まれている */
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!