※ ChatGPTを利用し、要約された質問です(原文:乱数発生)
乱数発生でランダムな西暦年月日を生成する方法と理解の誤差について
このQ&Aのポイント
乱数発生により、ランダムな西暦年月日を生成するプログラムについて説明します。
乱数発生には制約があり、一部の値が予想よりも大きくなる場合があることに注意が必要です。
プログラム内で使用する乱数の範囲や計算方法により、意図しない数値が生成されることがあります。
#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以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。
お礼
なるほど!完全に勘違いしてました!罠ですね。 正しくはy = rand() % 901 + 1600; でしたーやっと理解できましたーすごい感動。みなさんもひっかかりませんでした?こんなミスとは思いませんでした。数字が大きすぎるからできないのかなーとか思っていました。笑 ありがとうございました。