- ベストアンサー
配列を用いない最大値の求め方
今回は配列なしで最大値を求める方法をおしえてください。もちろんfor文やwhile文の中でいろいろするのでしょうが。自分的にはどうしても、たとえばn:0~100、n=0のときにf=0となり、、n=1のときにf=5, n=2のときにf=2・・・となるようなかんすうがあるとして、for文やWhile文でどうやって最大値を新しく出てきたfの値と取り替えればいいのか、また取り替えずにそのままにしておく、すなわち判定条件のプログラミングの仕方がいまいちわかりません。どうか初心者なので丁寧に教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ふつうに考えると int n; int ret; int max; /* nが0から100までのあいだループ */ fot( n = 0, max = 0; n <= 100; n++ ) { /* 関数fにnを渡し、戻り値を取得する */ ret = f( n ); /* 今までの最大値と、戻り値を比較し、戻り値が大きかったら格納する */ if( max < ret ) { max = ret; } } でしょうかね?
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>あと、もちろん関数f()はmain関数以前か以降で定義しておくのですよね? 関数fは、どこにあってもいいですよ。 別のソースファイルでもかまいません。 ただし、 1.main()の前にf()を定義したときは特に制限なし。 2.main()の後にf()を定義したときは、main()の前にプロトタイプ宣言が必要。 3.別のソースファイルにf()を定義したときは、宣言しているヘッダファイルをincludeすることが必要(もしくはextern宣言と呼ばれる特殊な宣言が必要)。 となります。 1.の「main()の前にf()を定義したときは特に制限なし。」と書きましたが、プロトタイプ宣言をしても、ヘッダファイルをインクルードしてもかまいません。 同様に、2の場合でも、ヘッダファイルを使用してもかまいません。 大きなプログラムを書くようになると、必要に応じて理解しやすい単位にソースを分割していくことがほとんどです。 ぜひ、ヘッダファイルを作成していくことをお勧めします。 #説明のときでも変数名や関数名に全角文字を使うのはやめたほうがいいですよ。また、"While"と、Wを大文字にするのもNGです。 Cでプログラムを作っていくのであれば、ソースは半角で、キーワードは正しく書くよう常に心がけてください。
- inetd
- ベストアンサー率23% (43/184)
最大値を入れておく変数を用意して関数の返す値の方がそれよりも大きかったらその変数に代入するというのを繰り返せば出来ますよ。 例) f(0)~f(99) の返す値の最大値を n に入れる。 int i, n, m; n = f(0); for (i = 1; i < 100; i++) { m = f(i); if (m > n) n = m; } printf("最大値 %d\n", n);
補足
どうもありがとうございました。わかる人からすればなんてことはないプログラミングなんですよね。我ながら実力のなさを痛感させられます。やはり慣れも実力のひとつなんでしょうか??たくさんのプログラミングを理解し作ることでその実力もつくのでしょうか?よかったらコメントして下さい。
補足
コメント付きで大変わかりやすいプログラミングで初心者の私にとっては大変ありがたい限りです。for文をこのように使うのかぁという感じです。まぁわかる人からすればあたりまえのことなんでしょうが。あと、もちろん関数f()はmain関数以前か以降で定義しておくのですよね?がんばって作ってみたいと思います。