- 締切済み
c言語プログラミングの質問です。
整数NとN個の整数を受け取り,受け取ったN個の整数のうち最大のものを表示するプログラムを記述せよ. ただし,N>0とする. 入出力例 入力 ⇒ 出力 3 2 1 8 ⇒ 8 5 13 14 11 12 15 ⇒ 15 2 -1 -2 ⇒ -1 という問題です。「3つの数の中から~」という場合はそれぞれa,b,cとおいて比較できるのですが、この問題のような場合はどうすればいいですか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- KEIS050162
- ベストアンサー率47% (890/1879)
何個比較するかは、入力される N によって決まるので、N 回、比較しながら繰り返す形の構造となります。 下記例は、while 文を使って、Nを減算しながら繰り返す方法です。入力された値が前の値より大きければ、最も大きい値を更新しながら繰り返して比較していきます。保持する最も大きい値も、入力する値もそれぞれ一個でいいので、変数をむやみに増やす必要はないです。配列とかにする必要もないです。 例では、最も大きい値を max 、都度入力される値を m として毎回比較しています。 途中、 flg の処理があるのは、一番初めに入力された m を max にコピーして置くための処理です。入力される値の最小値が未定で、かつ負の整数もありえるので、maxを 0 で初期化出来ず、この方法にしました。(ちょっと分かり難いかな?)この辺りは色々工夫してみてください。 でも、肝心なのは、未定回数、繰り返しながら比較する、という全体の大まかな構造さえ分かれば、よいかと思います。 解答例 #include <stdio.h> void main(void) { int n,m; int max,flg=0; printf("N = "); scanf( "%d",&n ); while( n > 0 ) { printf("Number = "); scanf( "%d", &m ); if (flg == 0 ) { max = m; flg = 1; } else if ( m > max ) max = m; n -= 1; } printf("Max = %d\n", max ); }
- mitoneko
- ベストアンサー率58% (469/798)
考え方としては、最初の数字から順番に数字を見ていきます。最初の数字を見ている時は、その数字が最大ですね。次の数字を見る時は、今覚えている最大の数字と比較して大きい方を最大として覚える・・・どんどん続けて、最後まで見たとき、覚えている数字が最大値です。 ループでやることになりますね。 断片だけ示すと、 max = values[0]; for (i = 1; i < N; i++) { if (values[i] > max) max = values[i]; } なんて感じになるでしょうか。 と普通なら、そうなりそうなものですが、例題の3行目だけが???です。 素直に見れば、答えは2になるはずなんですが・・・ もし、誤植なら、OKです。
- maiko0333
- ベストアンサー率19% (839/4401)
aを最大値と置けばいいです。 最初の数字をaに設定し、大きい値が来るとaに入れる ことの繰り返しです。