ページ 11

無題

Posted: 2007年1月03日(水) 23:52
by 大介
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{int y, m, l;

srand( (unsigned)time( NULL ) );
y=rand() % 2500 + 1600;
m=rand() % 12 + 1;
l=rand() % 29 + 1;
printf("西暦%d年%d月%d日",y,m,l);
return(0);
}今回は乱数発生でランダムにだされた西暦年月日をつくりましたが、y=rand() % 2500 + 1600;
というのがありこれはyという乱数が2500以下1600以上という意味なのですがなぜかプログラムを実行しても3000いくつとか4000いくつなんてのもでてきます。m=rand() % 12 + 1;はちゃんと12以下1以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。

Re:無題

Posted: 2007年1月04日(木) 00:00
by バグ
y = rand() % 2500 + 1600;

これでは、1600~4099の間の乱数が発生してしまいますよ。下記のようにすればOKです。

y = rand() % 901 + 1600;

rand() % 901 は、0~900の乱数を発生させます。この乱数に1600を足すので、1600~2500の乱数になる訳です。

Re:無題

Posted: 2007年1月04日(木) 00:21
by 大介
本当にありがとうございました。完璧に数学の罠?みたいなものにひっかかっていました。やっと乱数が理解できましたー。ありがとう。