プロが教えるわが家の防犯対策術!

C言語の初心者です。よろしくお願いいたします!

乱数に関する質問:毎回違う乱数を生成するにはどうすればいいでしょうか。
学校の講義の中に 
>>time() は1970 年1 月1 日0 時0 分(標準時)からの経過秒数を返
すため,1 秒以内に何度も実行すると,同じ数字で乱数を初期化す
ることになり,結果も同じになってしまう.
という記述がありますが、時間を置いてから、実行しても同じ結果となりました。

その一
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main(void)
{
double x,y;
int i,index=0;
double a,n;
printf("How many trials?...");
scanf("%lf",&n);
for (i=0;i<n;i++) {
x=rand()/(RAND_MAX+1.0);
y=rand()/(RAND_MAX+1.0);
if((x*x+y*y)<1) index++;}
a=4*index/n;

printf("Result is %.2f(%.2f)",a,sin(-a));
return 0;
}

その二
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int a;
srand((unsigned)time(NULL));
a=(int)(rand()/(RAND_MAX+1.0)*10);
printf("%d\n",a);
return 0;
}

お忙しい中、教えていただけたらうれしいです。

※添付画像が削除されました。

A 回答 (2件)

>時間を置いてから、実行しても同じ結果となりました。


まず、srand()-rand()だけで値を表示してみる。
その後、一気に計算するのではなく、小さな単位で計算結果を表示してみる。
このとき、intではなくdouble宣言の変数でで%f表示する。
そうすると、どこに不備があるのかわかる。

この回答への補足

早速の返答ありがとうございます!!
まず、intをdoubleに直して実行結果を確かめました。毎回これだけしか値が変わらないことがわかりました。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
double a;
srand((unsigned)time(NULL));
a=rand();
printf("%f\n",a);
return 0;
}

ここでもうひとつ追加質問させていいでしょうか。
たとえば、10以内の整数から、ランダムで数字を取るようなプログラミングを作れないでしょうか。もっと具体的に5.8301から次は5.8344みたいなのではなく、今回は5、次に9が来るかもしれないような乱数プログラミングってできないでしょうか?

何度もすみません!

補足日時:2009/02/06 18:12
    • good
    • 0

double a;


srand((unsigned)time(NULL));
a=rand();
rand( )関数の戻り値は int なのでこれはだめですよ。

>10以内の整数から、ランダムで数字を取るようなプログラミング
int a, i;
srand((unsigned)time(NULL));
for ( i = 0; i < 100; i++)
{
a = rand() % 10; // 0から9までの整数が返る
printf("%d ", a);
}
    • good
    • 0
この回答へのお礼

ご返答をありがとうございます。
自分の書いたプログラミングと比べて、どうがだめかよく分かりました。

お礼日時:2009/02/07 10:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!