- ベストアンサー
基礎だと思いますが、教えてください!初心者です。
『0より大きい10個の異なる数字を入力したときに、 大きいものから順番に並び替えて表示する』プログラム の作り方を教えてくださいm(__)m 下に途中までですが、自分なりにやったものを載せておきます。 include <stdio.h> int main() { int input[10],max[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; int i,j; printf("0より大きい10個の異なる数字を入力してください\n"); for(i=1; i<=10; i++)/* 比べるものを10個入力する */ { printf("%d番目の数字を入力してください",i); scanf("%d", &input[i-1]); } for(j=1; j<=10; j++) /* 1つずつ調べている */ { for(i=1; i<=10; i++) { if(max[j-1] < input[i-1]) max[j-1] = input[i-1]; /* 結果をほかの配列に格納している */ input[i-1] = 0; /* 最大となったものを0にしたい,だけどその方法がわからない */ } /* これだと最大値が変わるごとにその値が0になってしまいます */ printf("%2d目の数は%2dです \n",j,max[j-1]); } return(0); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> int main(void){ int input[10],max[10]={ 0 }; int i,j; printf("0より大きい10個の異なる数字を入力してください\n"); for(i=1; i<=10; i++){ printf("%d番目の数字を入力してください",i); scanf("%d", &input[i-1]); } for(j=1; j<=10; j++){ int index=0; for(i=1; i<=10; i++){ if(max[j-1] < input[i-1]) max[j-1] = input[index=i-1]; } printf("%2d目の数は%2dです \n",j,max[j-1]); input[index]=0; } return(0); }
その他の回答 (3)
- ultraCS
- ベストアンサー率44% (3956/8947)
ソートですから、プログラミングの基本中の基本です 10個くらいなら、最小値選択法かバブルソートくらいでいいでしょう。考え方だけ書くので、自分でソースにしてみてください。 検索すればソースもあると思うけど ・最小値選択法 二重のループを回して、最小の値を見つけ、それをdata[i]と置き換える、内側のループは外側のループの次から始めるのがポイント ・バブルソート 次の要素と比較し、大きければ交換、これを最後まで繰り返すと最後に最大値が来るので、ループ回数を減らしながら繰り返す ソートのアルゴリズムはいくつかあり、それぞれに得意な状況(データ数や離散状況)があるので適当なものを選択するのも一つのセンスです。
- pesude_zun1
- ベストアンサー率50% (4/8)
何度もすみませんNo1です 説明が足りないと思ったので書きます。 あなたの作ったプログラムをもとに プログラムを作成するのか それとも 新たに自分のプログラムを書けばいいのか わかりません。
補足
この形でできるのなら、自分でつくったものを改良して プログラムを作成したいです。 もしできないのであれば、ほかの形を教えてください。 質問がわかりにくくてすみませんでした。
- pesude_zun1
- ベストアンサー率50% (4/8)
すみませんが 結局 どこをどうすればよいのでしょうか?
お礼
丁寧にありがとうございました。