無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大介

無題

#1

投稿記事 by 大介 » 12年前

#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:無題

#2

投稿記事 by バグ » 12年前

y = rand() % 2500 + 1600;

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

y = rand() % 901 + 1600;

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

大介

Re:無題

#3

投稿記事 by 大介 » 12年前

本当にありがとうございました。完璧に数学の罠?みたいなものにひっかかっていました。やっと乱数が理解できましたー。ありがとう。

閉鎖

“C言語何でも質問掲示板” へ戻る