• ベストアンサー

printf、最大値の出し方

3つの整数を入力し、どれが最大値かを判別するプログラムを作りたいです。 #include<stdio.h> main() { int i, x, max; max = 0; i = 1; while(i <= 3) { printf("整数:"); scanf("%d",&x); if (x > max) { max = x; } i++; } printf("最も大きい整数は%d\n", max); } とすると 整数:と3回表示されますが、これを一つ目の整数:、二つ目の整数:3つ目の整数:と表示されるようなプログラムにするにはどうしたらよいでしょうか。

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

  • ベストアンサー
回答No.5

#1です。度肝を抜かせたようで良かったです。 漢字で出す場合には3つ書くという方法が良いかも知れないです。 ■Sample #include<stdio.h> main(void) { int x, max; max = 0; printf("一つ目の整数:"); scanf("%d", &max); printf("二つ目の整数:"); scanf("%d", &x); if ( x > max ) max = x; printf("三つ目の整数:"); scanf("%d", &x); if ( x > max ) max = x; printf("最も大きい整数は%d\n", max); } 一つ目をいきなりmaxに入れているのは、普通に考えて一つ目が最大値(暫定)になるからです。

ichigo2007
質問者

お礼

何度もありがとうございます。 丁寧に回答していただいて、とても感謝しています。 こんなにさらりとできてしまうなんて羨ましい限りです。 私ももっと勉強してうまく作れるようになりたいと思います。 ありがとうございました。

その他の回答 (4)

回答No.4

#1です。補足ありがとうございました。 直接printf()の中に文章入れてしまうと、それがそのまま出てしまいます。 これをどうするかというと、一番最初のアドバイスです。 printf("最も大きい整数は%d\n", max); これはmaxに入っている値を表示させています。という事はちょうどiで3回の制御を掛けているので、これと同じように「iに入っている値を表示させる」にすれば良かったのです。 printf("%dつ目の整数:", i); こういう風にしてみて下さい。どうですか? まぁさすがに漢字で「一つ目の整数」と出すのは難しいです。漢字で出すのはプログラムを大きく変える必要があります。

ichigo2007
質問者

お礼

ありがとうございます。 なるほど!!そういう方法がありますね。 しかし、課題として出されたものなのですが、課題の見本では一つ目の・・・と漢字になっています。 このプログラムじゃだめなんですね・・・ でもprintf("%dつ目の整数:", i);には度肝を抜かれました。 ありがとうございます。

noname#62235
noname#62235
回答No.3

一つ目の整数、二つ目の整数とは、「一番大きい整数」「二番目に大きい整数」という意味でしょうか? もしそうなら、今のプログラムは「一番大きい整数」しか算出できないロジックですから、これを「二番目に大きい整数」「三番目に大きい整数」も算出できるようなロジックに変更する必要がありますよね。 その上で、最後に別のループを作って表示を行うようにする必要があるわけで、今の構造からは大きく変更する必要があると思いますよ。 C言語なんだからsort関数をつかったら簡単にできますけど、反則なんでしょうかね?(^^;

ichigo2007
質問者

お礼

回答ありがとうございます。 1つ目の整数を入力してください、2つ目の整数を入力して下さい・・・という意味です。3つ整数を入力して、その中から一番大きい整数を表示させるプログラムです。

回答No.2

#1です。早速チャレンジして頂けたようで・・・。 9回聞かれてしまいますか?修正前は「整数:」と3回だけ聞かれるのに、修正したら9回聞かれるのですか?それは気になりますね。 私が直したパターンだとちゃんと出てきます。もし良かったら直したソースを貼り付けてもらえると助かります。 触る部分は先程アドバイスした「printf("整数:");」の部分だけなので、たくさん聞かれる事は無いと思います。 while(i <= 3)でも問題ないですよ。元はそれで3回聞かれていた訳なので、プログラム的には問題無いと思います。

ichigo2007
質問者

お礼

再度ありがとうございます。printf("整数:")だけですか・・・ それだと、9回は聞かれないのですが、同じ事を3回聞かれてしまいます。 例を示すと(適当な数を入力しています)、 今は 整数:5 整数:13 整数:8 最も大きい整数は13 となりますが、printf("整数:")のところをprintf("一つ目の整数:")とすると、当然ですが、 一つ目の整数:5 一つ目の整数:13 一つ目の整数:8 最も大きい整数は13 となりますよね? これを 一つ目の整数:5 二つ目の整数:13 三つ目の整数:8 最も大きい整数は13 としたいのです・・・

回答No.1

C言語ですね。これから必要になるので勉強ですか? 1つ目の整数: みたいに表示させるんですよね?いきなり答えを言ってしまっても「ああそうかぁ」で終わってしまうので、参考までに・・・ printf("整数:"); この部分を工夫すれば表示されそうですね。どういう風にするかと言えば、質問者様も実際にされているようですよ。 printf("最も大きい整数は%d\n", max); これは画面にmaxの値を表示させているのですよね?という事は同じようにiの値を画面に出すようにすれば良いんだ!と思いませんか? どうしても分からなければ、もう一度聞いても良いと思いますが、ヒントがあれば十分できそうです。チャレンジしてみてはいかがですか?

ichigo2007
質問者

お礼

早速回答いただきありがとうございます。 while(i <= 3) にしているので、3回出てきてしまうのです・・・ 整数:だけだと区別がないので、3回出てきてもいいのですが、 1つ目、2つ目、3つ目がそれぞれ3回出てきてしまって、合計9回聞かれるようになってしまうのです。 printfだけでなくプログラム自体を大きく変えなくてはならないのですか?xの値だけではなく、文字を3つ用意しなくてはならないのでしょうか?

関連するQ&A

  • 最大値を求める

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

  • printf()で出力したいんですが?

    #include <stdio.h> int main( void ) { int air[4]; int i; i = 0; printf( "データ入力\n" ); do{ scanf( "%d\t", &air[ i++ ]); } while(air[ i - 1 ] > 0 ); printf( "%d\n", i ); return 0; } このプログラムはコンパイル出来ますが、期待していたprintf関数での出力ができません。 その理由として何がありますか?関数の使い方が間違っているのか、DO~WHILE文が使えない場所 なのか、もし直すとすればどう直せばいいのですか。

  • for文

    整数を読み込んで、その値を0までカウントダウンしながら表示するプログラム作りたいのですが、 while文ではできたのですが、for文ではうまくいきません。 どこが間違っているのでしょうか? OS:Windows XP C++Builder X パーソナル #include <stdio.h> int main(void) { int i; int num; printf("整数を入力してください:"); scanf("%d", &num); for(i = num; i <= 0; --i) { printf("%d", i); } return 0; } 宜しくお願いします。

  • printfが後で実行されます。

    最近、プログラミングを始めた初心者です。 エクリプスを使い、次のようなプログラムを作ったのですが、 実行結果が思いと違うのです。 #include<stdio.h> int main(void) { int i, dt; printf("数値を入力:"); scanf("%d", &dt); i = 2; while(dt != 1) { while(dt % i == 0) { dt = dt / i; printf("%d\n", i); } i ++; } return 0; } 実行結果 60 数値を入力:2 2 3 5 数値を入力:の後に、scanfで入力したいのですが、 入力したあとでないと、printfの内容が表示されないのです。 コードは大丈夫だと思うのですが、、、 初心者なので、何をどうすれば解決するのか検討もつきません。 どなたかお分かりになる方、よろしくお願いいたします。

  • 空Enterの扱い方

    3つの整数を入力し、最大値を出力するプログラムを作りました。 最大値をさがすステップに入る前に、 「最大値を出力しますか?(y/n)」と聞いてy+Enterで実行するようになっています。この部分を、 y+Enter もしくは 空Enter で実行するにはどのように変更すればよいのでしょうか?大変お手数ですが、教えてください。 よろしくお願いします。 #include <stdio.h> #include <stdlib.h> int main(){ int i,max,max_no,a[3]; char YN[2]; printf("整数を3つ入力してください。\n"); for(i=0;i<3;i++){ printf("%d番目の整数: ",i+1); scanf("%d",&a[i]); } printf("最大値を出力しますか?(y/n):"); scanf("%s",YN); if(YN[0]=='y'){ printf("最大値をさがします。\n"); } else{ exit(0); } max_no=0; max=a[max_no]; for(i=1;i<3;i++){ if(a[i]>max){ max=a[i]; max_no=i; } } printf("最大値は %d 番目のデータ %d です。\n",max_no+1,max); return 0; }

  • 並べ替えのプログラム

    整数を20個入力し、まずそのまま表示してその後大きい順に並べ替えて表示するプログラムを作っているのですが、最大値しか表示されません。多分for文の3重ループの中がおかしいと思うのですがよくわかりません。 #include <stdio.h> int main(int argc, char* argv[]) { int c,i,x,max; int sav = 0; int before[20]; int after[20]; int check[20] = {0}; printf("整数を20個入力してください: "); for(i = 0; i < 20; i++) { scanf("%d",&before[i]); } printf("\n"); printf("BEFORE\n"); for(i = 0; i < 20; i++) { printf("%d\n",before[i]); } printf("\n"); max = 0; for(c = 0; c < 20; c++) { for(x = 0; x < 20; x++) { for(i = 0; i < 20; i++) { if(before[i] > max && check[i] == 0) max = before[i]; sav = i; } if(check[sav] == 0) check[sav] = 1; after[19 - x] = max; } } printf("AFTER\n"); for(x = 0; x < 20; x++) { printf("%d\n",after[x]); } return 0; } よろしくお願いします。

  • わかりません・・・。

    100個以下の整数を読み込んで、読み込んだ整数の一覧,それらのうちの最大値と二番目に大きい値とを表示するプログラムをつくりたいのですが、わかりません。 教えてください!! 実行例 整数は何個ですか:5 1 個目:65 2 個目:30 3 個目:98 4 個目:10 5 個目:54 入力された整数は 5 個で, 65 30 98 10 54 です. 最大値は 98 です. 二番目に大きい値は 65 です. ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #include<stdio.h> #define number 100 int main (void) { int i; int seisu[number]; int max; puts("整数を入力してください。"); for(i=0, i<number, i++){ printf("%2d番",i+1); scanf("%d",&seisu[i]); } max=seisu[0] for(i=1, i<number, i++){ if (seisu[i]>max) max=seisu[i]; } printf("最高点:%d\n",max); return(0); } までしかわかりません。 2番目に大きい値と‘整数は何個ですか: ‘と‘入力された整数は 個で です。‘の部分はどうすればいいのでしょうか??

  • プログラミングで二番目に大きい数を表示する

    指定された個数(100個以下)だけ整数を読み込んで,読み込んだ整数の一覧,それらのうちの最大値と二番目に大きい値とを表示するプログラムを作成。最大となる値が複数入力された場合も正しく処理する。 このプログラムで入力した数字が全部同じ時、二番目に大きい値はありません。と表示したいのですが、どのようにしたらいいのかわかりません。教えてください。あとこのプログラムで最大値と二番目に大きい値出せたのですが、念のため問題ないか確認お願いします。 #include <stdio.h> #define NUMBER 100 /*整数の個数の上限*/ int main(void) { int i; int num; int kazu[NUMBER]; int max; int sec; printf("整数は何個ですか:"); scanf("%d", &num); puts("整数を入力してください。"); for(i = 0; i<num; i++){ printf("%3d個目:",i+1); scanf("%d", &kazu[i]); } printf("入力された整数は%d個で、\n",num); for(i=0;i<num;i++) printf("%d ",kazu[i]); printf("です。\n"); sec = max = kazu[0]; for(i=1; i<num; i++){ if(kazu[i]>max) max=kazu[i]; } for(i=0;i<num;i++){ if(kazu[i]>max){ sec=max; max=kazu[i]; }else if((max>kazu[i]) && (kazu[i]>sec)) sec=kazu[i]; } printf("最大値は%dです。 \n",max); printf("二番目に大きい値は%dです。\n", sec); return(0); }

  • if文を条件演算子に書き換えについて・・・

    /* 読み込んだ三つの整数値の最大値を求めて表示 */ #include <stdio.h> int main(void) { int n1, n2, n3, max; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2); printf("整数3:"); scanf("%d", &n3); max = n1; if (n2 > max) max = n2; if (n3 > max) max = n3; printf("最大値は%dです。\n", max); return (0); } 上記のソースコードを、条件演算子を用いた形にするという問題なのですが、初心者で理解しずらいところもありどうやっても同じ結果を出すことが出来ないため質問させていただきました。 ご教授お願いしますm(_)m

  • C言語で困っています。

    正の整数を入れたときに、階乗を求めるプログラムを作りたいのですが、 ↓のプログラムを起動させたら、最終的な答えが1(kaizyo=1)になって、非常に困っています。 何故なのでしょうか?それと、どこを直せばいいですか? #include<stdio.h> main() { int x; int kaizyo=1; printf("整数を入力して下さい:"); scanf("%d",&x); if(x<=0) { printf("値が不適当です。"); } else { while(x<1) { kaizyo=kaizyo*x; x=x-1; } printf("%dの階乗は%dです。",x,kaizyo); } }

専門家に質問してみよう