• 締切済み

プログラミング・C言語の配列(単純選択ソート)についてです

最近プログラミングを勉強し始めた初心者です。 今、配列について勉強していて あるプログラムを作成しています。 それは10個の実数を入力して、入力された実数を降順に並び替えるものなのですが、 降順に並び替えることができません(泣 どこが違うのか教えていただきたいのですが・・・ よろしくお願いします。 #include <stdio.h> #define NUMBER 10 int main(void) { int i, j, min, min_a, temp; double zissu[NUMBER]; printf("%d個の実数を入力してください", NUMBER); min=i; printf("date[%d]:", i); scanf("%lf", &zissu[i]); for(j=i+1; j<NUMBER; j++) { if(zissu[j] < zissu[min]) min_a =j; } temp = zissu[min]; zissu[min] = zissu[min_a]; zissu[min_a] = temp; } for(i = 0; i < NUMBER; i++) printf("date[%d]=%lf \n", i, zissu[i]); return (0); } 【入出力例】 10個の実数を入力してください data[0]:24.2 data[1]:2 ・・・ data[9]:9 降順にソートしました data[0] = 2 data[1] = 9 data[2] = 24.2 ・・・ みたいにしたいのです。 よろしくお願いします

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>scanf(降順にソートしました)のことでしょうか? ループの外にあるので、配列に値を入れられていません。 ということです。 >min=i; 未初期化の値を参照しています。 >printf("date[%d]:", i); 32ビット環境なら、ココで0が表示される確率は1/4294967296です。 >scanf("%lf", &zissu[i]); 高確率でバッファオーバーフローです。 iが100だったとします。 zissuの配列はdouble型が10個分しかありません。 100番目っていったいドコでしょうか? iがちゃんと初期化されているのは、結果表示のforループの開始時になってからです。 # 今時のコンパイラなら、「未初期化のローカル変数の参照」とかの警告出ると思われますが…。 >具体的にどこい入れればいいのか教えていただきたいです。 大小判定する前…でしょう。 for(i=0;i<NUMBER;i++) {  printf("date[%d]:", i);  scanf("%lf", &zissu[i]); } といったところでしょうか…。 # scanf()が原因でおかしくなる可能性はありますけど。 # abcdとか文字列入力したり… 並び替えの処理も、 >for(j=i+1; j<NUMBER; j++) { とやる場合のiがいくつになっているかは注意が必要です。 # そして、無視している警告の一つである未初期化のローカル変数の参照がこの後でも発生してます。

  • yomyom01
  • ベストアンサー率12% (197/1596)
回答No.1

 forループ内でscanf()を実行してません

bibinnba_b
質問者

お礼

回答ありがとうございます。 scanf(降順にソートしました)のことでしょうか? それを入れてコンパイルしようとしたのですが、エラーがでてどこに入れればいいのかわかりません。 お手数でなければ 具体的にどこい入れればいいのか教えていただきたいです。 それと 入力した実数が 降順通りに並び替えられません。(泣

関連するQ&A

専門家に質問してみよう