ページ 11

配列と乱数について

Posted: 2016年4月30日(土) 22:51
by めんこ
乱数を使って小数を格納して格納された小数を大きい順にソートするプログラムを作ったのですが、
実行したときに、最初のnに格納されている数と最後に格納されているnの数が真ん中のソートの部分で変わってしまい、
さらに出力された数字が一部分を除入て0.000になってしまいます。
どうすれば大きい順にソートされるでしょうか?

コード:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define M 5

int main(void)
{
	double n[100];
	int i, s, t, j, num;

	srand((unsigned int)time(NULL));

	for (i = 0; i < M; i++){
		n[i] = (rand() % 100) / 100.0;
		printf("%2f\n", n[i]);
	}

	for (s = 0; s < M - 1; s++){
		for (t = s + 1; t < M; t++){
			if (n[t] > n[s]){
				num = n[t];
				n[t] = n[s];
				n[s] = num;
			}
		}
	}


	for (j = 0; j < M; j++){
		printf("\n%2f\n", n[j]);
	}
	return 0;

}

Re: 配列と乱数について

Posted: 2016年5月01日(日) 11:53
by だんごさん
21行目、num = n[t];
ここのnumはint型です。0.xxxの値を代入すると0になります。
ですので、23行目、n = num;では0を代入することになります。
numをdouble型にしてみてはいかがでしょう。

と思ったら同じトピックがありましたね。
配列と乱数について