• 締切済み

わかりません・・・。

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番目に大きい値と‘整数は何個ですか: ‘と‘入力された整数は 個で です。‘の部分はどうすればいいのでしょうか??

みんなの回答

  • YOKO-bee
  • ベストアンサー率50% (2/4)
回答No.2

まず、目的とされている処理を箇条書きにしてみましょう。 1.登録したい整数の個数入力(最大値100) 2.整数の入力(最大100個) 3.入力された整数の個数出力(最大100) 4.入力された整数の出力(最大100個) 5.入力された整数の最大値を出力 6.入力された整数の2番目に大きい値を出力 以上の6点が明示的な仕様となります。 では、これを入力・出力(表示)に分けて考えてみましょう。 まず入力について。 -------------------------------------- 1.登録したい整数の個数入力(最大値100) 2.整数の入力(最大100個) -------------------------------------- 「1.」は、「#define number 100」という宣言を使用したことで、ちょっと迷ってしまったのかと思われます。ここは「2.」で行っている「整数の入力」を同じことをすれば大丈夫です。「int n;」のように新たな変数を宣言して、変数「n」にscanf()で格納すればいいです。 「2.」関しては、掲載されたソースを見る限り出来ていますね。 ただ、「n」個(最大100個)の整数入力を促す必要があるため、今のソースでは登録したい整数の個数の値に関係なく「必ず」100個入力しないといけません。「number」を変数「n」にしてみましょう。 次に出力(表示)について。 -------------------------------------- 3.入力された整数の個数出力(最大100) 4.入力された整数の出力(最大100個) 5.入力された整数の最大値を出力 6.入力された整数の2番目に大きい値を出力 -------------------------------------- 現状のソースを見る限り「5.入力された整数の最大値を出力」が出来ています。 「3.」「4.」については、単に「1.」「2.」で入力された物を出力するだけです。 「3.」は先に書いた変数「n」を、「4.」は「2.」で入力につかったfor文を参考に「入力ではなく出力する」ようにしてみてください。 「5.」について、現状ソースで出来ていますが勿体無いです。せっかくfor文で「number」回分、比較処理を繰り返しているのですから、もうちょっと手を加えてバブルソートなどしてみてはどうでしょうか。 バブルソートについては、下の参考URLを見てください。サンプルソースも載っています。 「6.」については、先の「5.」で書いたバブルソートを使えば、seisu[0]に最大値、seisu[1]に2番目に大きい値が入りますので、それを表示するようにしてみましょう。 最後に最初に書いた箇条書きをまとめ直してみましょう。 1.登録したい整数の個数入力(最大値100) 2.整数の入力(最大100個) 3.入力された整数の個数出力(最大100) 4.入力された整数の出力(最大100個) ★★★追加(ここから)★★★ 4-2.入力された整数のソート ★★★追加(ここまで)★★★ 5.入力された整数の最大値を出力 6.入力された整数の2番目に大きい値を出力 プログラムというのは、どんなに小さいものでも大きいものでも必ず入力(Input)・出力(Output)=I/Oがあります。まずは要求事項をI/Oを明確にしてみて、そして入力された内容をそのまま出力「出来る物」と「出来ない物」で出力を分類していきましょう。 「出来ない物」は、「何故出来ないのか」と「何をしなければいけないのか」を考えてみてください。 長々と書いてしまいましたが・・・・プログラムの勉強は大変と思いますけど、楽しんで頑張ってくださいね♪

参考URL:
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html
すると、全ての回答が全文表示されます。
  • sobacya
  • ベストアンサー率11% (1/9)
回答No.1

#include<stdio.h> void main (void) { int *input; int input_count; int max[2] = {0, 0}; printf("整数は何個ですか:", &input_count); input = malloc(sizeof (int) * input_count); for (i = 0; i < input_count; i++) { printf("%d何個目:", &input_count); scanf("%d", &input[i]); if (max[1] < input[i]) { max[0] = max[1]; max[1] = input[i]; } } printf("入力された整数は %2d個で,", input_copunt); for (i = 0; i < input_copunt; i++) { printf("%d "); } printf("です.\n最大値は %3dです.\n二番目に大きい値は %3dです", max[0], max[1]); free(input); } これはバグがあるバージョンなのであとは自力で直してください。 フローでも書いて確認してみたほうがいいですよ。

すると、全ての回答が全文表示されます。

専門家に質問してみよう