• ベストアンサー

ifと不等記号( < & > )のみを使って、最大数と最小数を求める (* 超初心者です)

宿題でifと不等記号( < と>)のみを使って、3つの入力された整数の中から最大数と最小数を求めるプログラムを作っているのですが、コンパイルには成功してもいざ実行すると、恐らくエラーが起きていて、数字を入力しても何も出来ません。 下記の文字列はそのifの所のみを貼ったものですが、何が間違っているのでしょうか? ちなみにelseとかは使えません m(_ _)m 純粋にifと不等記号のみしか使ってはダメみたいです。 if( num1 > num2 > num3 ) { printf( "Smallest is %d\n", num3 ); printf( "Largest is %d", num1 ); } /* end if */ if( num1 > num3 > num2 ) { printf( "Smallest is %d\n", num2 ); printf( "Largest is %d", num1 ); } /* end if */ if( num2 > num1 > num3 ) { printf( "Smallest is %d\n", num3 ); printf( "Largest is %d", num2 ); } /* end if */ if( num2 > num3 > num1 ) { printf ( "Smallest is %d\n", num1 ); printf ( "Largest is %d", num2 ); } /* end if */ if( num3 > num1 > num2 ) { printf ( "Smallest is %d\n", num2 ); printf ( "Largest is %d", num3 ); } /* end if */ if( num3 > num2 > num1 ) { printf ( "Smallest is %d\n", num1 ); printf ( "Largest is %d", num3 ); } /* end if */

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

数学的に num1 > num2 > num3 が成り立つ時というような意味で if(num1 > num2 > num3) { … } とは使えません 左から右に評価される段階で (num1 > num2) > num3 ( 0 or 非0 ) > num3 のように評価されて、意図する所とは違ったものになってしまいます。 例えば、num1 が一番大きいという場合には、 (num1 > num2) && (num1 > num3) というような条件になると思います。

その他の回答 (4)

  • peko_pee
  • ベストアンサー率53% (45/84)
回答No.5

ご質問のコードについての回答ではありませんが、考え方としてこんなのもある というところを… ・変数をもうひとつ使える ・変数の内容を入れ替えてもかまわない という条件が許されれば、3つの if 文で num1~num3 の内容を大きさ順に 並べ替えることが出来ます。あとは num1 と num3 を出力すればOK。 宿題ということなので具体例は控えますが、いかにして手を抜くかというのも プログラミングの面白さですから、こういう方法を考えてみるのも勉強になると 思います。

回答No.4

   こんな感じでしょうか。 #include <stdio.h> int main (void) { int num1, num2, num3; printf(" 入力(整数) "); scanf("%d %d %d", &num1, &num2, &num3); if(num1 > num2){ if(num2 > num3){ printf("\n 最大値 %d", num1); printf("\n 最小値 %d", num3); return 0; } if(num1 > num3){ printf("\n 最大値 %d", num1); printf("\n 最小値 %d", num2); return 0; } printf("\n 最大値 %d", num3); printf("\n 最小値 %d", num2); return 0; } if(num2 > num3){ if(num1 > num3){ printf("\n 最大値 %d", num2); printf("\n 最小値 %d", num3); return 0; } printf("\n 最大値 %d", num2); printf("\n 最小値 %d", num1); return 0; } printf("\n 最大値 %d", num3); printf("\n 最小値 %d", num1); return 0; }

  • ko_kinta
  • ベストアンサー率39% (43/109)
回答No.2

"不等記号( < & > )"は"不等記号( < と>)"という意味ではありませんよ。 "<"と"&"と">"を使いなさいということです。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

もう一度教科書を読み直しましょう。 http://wisdom.sakura.ne.jp/programming/c/c6.html 貴方の頭の中で考えた条件式と、if文で使える条件式は違います。

関連するQ&A

  • C言語のプログラミング (基礎)配列の問題ですが。

    次のような問題があって、プログラミングしてみたのですが、 コンパイルすると永久ループになってしまいます。 また、入力されるはずの整数が表示されません。 どうすればよいか教えていただけると助かります。 よろしくお願いします。 整数を順番に入力し、負の数が入力されたら、それまでに入力された非負の整数を、 入力された順番とは逆に全角空白で区切って出力するプログラムを作成しなさい。 自動評価の都合上、上記以外は表示しないこと。なお、入力は最大10回とする。 【0 1 2 3 4 -1 が入力された場合の表示例】 4 3 2 1 0       ************************************** #include <stdio.h> int main(void) { int num[10]; int n; for(n=1;n<11;n++){ printf("整数入力:¥n"); scanf ("%d", &num[n]); if(num[n]<0){ for(n=10;n>0;n--){ printf("%d ",num[n]); } } } }

  • Cプログラムの条件文  if,else if ,elseについて教えてください。

     こんにちは。課題でどうしても解らないところがあるので教えてください。  次のプログラムは一桁の数(0~9)が偶数(EVEN)か奇数(ODD)かを表示するものです。  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); else printf("%d is an ODD. \n", num); } というプログラムをコンパイルして実行すると、ちゃんと実行されるのですが、10以上の数や負数を入力しても動作してしまうんです。  そこで0~9の範囲以外の数が入力されていないかを確認して、その場合を偶数、奇数の判断や表示をせず、エラーメッセージだけを表示して終了するプログラムに書き換えなくてはならないのですが、まず  (1)判断する条件式(変数numの内容が0~9の範囲にあるか)で、num >= 0 && num <= 9 をどこに入れればいいか。  (2)please enter a number[0~9]: 8 8 is an EVEN.  (←例えば8を入れると普通こうなるのですが)   please enter a number[0~9]:12   ERROR:12 is in out of range!!  (←0~9以外ののものだったら、この様にエラー表示にしたいのです。  私が考えたプログラムは  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); if else printf("%d is an ODD. \n", num); else(num >= 0 && num <= 9) printf("ERROR:%d is in out of range!! \n",num); } という風に考えたのですがコンパイルできません。プログラミング初心者なので、書いている内容も解りにくいんですが、どうかよろしくお願いします。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値表示するプログラムを作成せよ。 (自分の解答) #include <stdio.h> int main(void) { int num1,num2; int sum=0; do { printf("整数1>整数2となる整数をそれぞれ入力してください\n"); printf("整数1:"); scanf("%d",&num1); printf("整数2:"); scanf("%d",&num2); if (num1 < num2) printf("整数1>整数2としてください\n"); } while (num1 < num2); printf("%d以上%d以下の全整数の和は",num2,num1); for (num2;num2 <= num1;num2++) { sum=sum+num2; } printf("%dです。",sum); return 0; } これでも一応正しく実行されるのですが、ごちゃごちゃしてるので簡潔に書けないでしょうか? 回答お願いします。

  • C言語

    次のプログラムは、自然数を入力して,その約数を表示するものである。ブログラム中の0 ~に適するものを答えなさい。ただし,a%bはaをbで割ったときの会りを求める演算 である。 参考 約数とは、入カした自然数に対して,その数を割り切ることのできる整数である。 例えば、6の約数は、1, 2, 3,6となる。 #include <stdio.h> int main (void) int i, num; printf("自然数を入カしてください。"): scanf ("%d", &num); printf("%dの約数は", num) ; for (i =@;i <= num; i++) ( if (num % i @ 0) { printf ("%d,i@1): printf("です。 ¥n"): return 0; 9 この問題の@の部分に入る数字、記号を教えて欲しいのとなぜそうなるのかも教えていただきたいです(-。-;

  • 数当てゲームについて

    #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int num; int no; int max=11; int limit=0; srand(time(NULL)); /*乱数の値を初期化*/ no = rand() %1000; do{ printf("あと入力回数は%d回です。数字を入力してください。\n",max-limit); scanf("%d",&num); limit++; if(num>=1000 || num<=-1000) { printf("-999以上999以下の整数を入力してください。\n"); return -1; } if(num>no) { printf("\a大きいです。\n"); } else if(num<no) { printf("\a小さいです。\n"); } }while(no!=num && limit<max); if(no==num) { printf("正解です。\n"); printf("%d回で当たりました。\n",limit); } else { printf("残念です。当たりませんでした。\n"); printf("正解は%dでした。\n",no); } return 0; } これは、0以上999以下の整数を入力させて11回以内にランダムで 入力した値を当てさせるゲームです。 質問内容としては 「0以上999以下」→「-999以上999以下」に変更するにはどうすれば よいかです。 一部、「-999以上999以下」の値を入力してくださいとなっていますが 結局わからずにそのままになっているためです。 よろしくお願いいたします。

  • コンパイルエラー

    コンパイルしても、12行目(printf("%d番目の整数を入力してください。"i+1);が、関数呼び出しに)がないとでます。でもどこが間違っているか分かりません。 教えてください。お願いします。 #include <stdio.h> int main(void) { int num; int sum=0; int i; for(i=0; i<10; i++){ printf("%d番目の整数を入力してください。"i+1); scanf("%d", &num); sum+=num; } printf("合計は、%dです。\n", sum); return(0); }

  • C言語の問題でわからないところがあります

    先ほども似たような内容で質問させて頂いたのですが、もう一度質問させてください。 最近C言語を勉強し始めたのですが、わからないところがあります。 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成するものなのですが、うまくいかなく困っています。 他の書き方でやれば普通にいけると思うのですが、これだとできない理由がわからないと、もやもやしてしまうので・・・・ プログラムは以下の通りです #include <stdio.h> int main(void) { int n1,n2,n3,n4; puts("二つの整数を入力してください"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); n3=(n1>n2) ? n2 : n1; n4=(n1>n2) ? n1 : n2; printf("%d以上%d以下の全整数の和は", n3,n4); int num=n3; /* numの最初の値は小さい方の値 */ int wa=0; /* n3が小さい方の数、n4は大きい方の数 */ do{ if (n1>n2) { wa=n4+num; /* 大きいほうの数(num)にsub(小さい方の数+0,2,3,4・・・)を足していく */ num=num+1;/* ここを通るたびにsubに+1 */ printf("%d",wa);} else { wa=n4+num; num=num+1; printf("%d",wa);} }while(num<n4); /* num<n4を満たさない=numが大きいほうの数よりも大きくなったらループを終了 */ printf ("です\n"); /* ですっす */ return 0; } これで大きい方に37、小さいほうに28と入力すると656667686970717273ととても大きな数値になってしまいます。 ループが間違っているのでしょうか? whileは whileの後の()の中身の条件を満たしているとにループする、と認識しているので、numが大きい方の数値より大きくなったとき、ループを終了するようにしているつもりです。 ここがどこか間違っているのでしょうか・・・? それから、初期化というのもいまいち理解していないのですが、intで宣言するときに、中に数値を格納しておく、という物だと思っています。 宣言の後にprintf("%d",num);などで確認すると、代入できているようなので、これは間違っていないと思うのですが・・・・、 間違っているところがざっとみて解りましたら、回答頂けるとありがたいです。 C言語を始めたばかりなので、できれば簡単に説明して頂けるとありがたいです。

  • C言語初心者です。次のプログラムを簡潔にしたいです

    二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 自分のプログラムは以下の通りです。 #include <stdio.h> int main(void) { int num1,num2,small,big,sum=0; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d",&num1); printf("整数B:"); scanf("%d",&num2); small=(num1 > num2) ? num2 : num1; big=(num1 > num2) ? num1 : num2; printf("%d以上%d以下の全整数の和は",small,big); if (num1 < num2) { do { sum+=num1; num1++; }while (num1 <= num2); } else { do { sum+=num2; num2++; }while (num2 <= num1); } printf("%dです。",sum); return 0; } 結果は正しく表示されるはずです。 しかし多変数かつループ文を組み合わせているため、長ったらしくなっています。 どのようなプログラミングならば、簡潔にかけますか? 解答がないので困っています。

  • 最大値を求める

    3つの整数を入力して、最大値を求めるプログラムを作りたいのですが、整数を入力するところまでは うまくいくのですが、結果が、255、と出てしまいます。どこがおかしいのかが解かりません。 どなたか教えていただけませんか? 宜しくお願いします。 #include <stdio.h> int main(void) { int num[3]; int max, i, j; puts("三つの整数を入力してください"); for(i = 0; i < 3; ++i) { printf("整数%d:", (i + 1)); scanf("%d", &num[i]); } max = num[0]; for(j = 0; j < 3; ++j) { if(max < num[j]) { max = num[j]; } } printf("最大値は%dです。\n", max); return 0; }

  • C言語 "myfunc.h"がエラーになります。

    いつも大変お世話になっております。 C言語に関する質問です。 "myfunc.h"の箇所がコンパイルエラーになります。 全体のコードとコンパイルエラーが下記です。 #include <stdio.h> #include "myfunc.h" int main(void) { int num1, num2, ans; printf("1番目の整数を入力してください。\n"); scanf("%d", &num1); printf("2番目の整数を入力してください。\n"); scanf("%d", &num2); ans = max(num1, num2); printf("最大値は%dです。\n" , ans); return 0; } コンパイルエラー C:\MinGW>gcc text13.c -o text13 text13.c:2:20: fatal error: myfunc.h: No such file or directory #include "myfunc.h" ^ compilation terminated. です。 ご多忙のところ恐れ入ります。 どこがおかしいのか、 ご回答のほどよろしくお願い申し上げます。

専門家に質問してみよう