随机数发生器

时间:2022-09-03 23:31:23

#include<stdio.h>

#include<stdlib.h>//rand(),srand(),RAND_MAX

#include<time.h>//time(NULL)

double random()//生成0-1的随机数

{

return (double)rand()/RAND_MAX;

}

int random1(int m)//生成0-m的随机数

{

return (int ) (random()*m + 0.5);

}

 

int main()

{

srand(time(NULL));//初始化随机数种子。time(NULL)返回从1970年1月1日0点以来经过的秒数

int m;

scanf("%d", &m);

printf("%d\n",random1(m));

return 0;

}

 

      上面的程序用于生成0-m的随机数。

 

探究:

1、输出RAND_MAX得到32767(2^15-1)

2、srand()

    首先,无srand()语句时:

   循环 printf("%d\n",rand());

    每次输出的结果都是一样的,我的机器上是41、18467、6336、26500.。。。。

    有srand(time(NULL))则每次都不同。

   其次,无TIME(NULL)时,用srand(n),其中n为常数。

   只要n不变,那么输出的数字就不一样。

   于是可以知道,srand()播种子,必须其中的参数是变化的随机数才是变化的,用time(NULL)当然是个很好的选择,不过如果两次申请随机数时间间隔没有1秒的话可能会导致相同的随机数生成。

 

    其次,只用一个srand语句!

 

 

用途:

       将程序与已知正确的程序对比调试错误。出现错误后不急于调试,可以缩小m范围,看看是否是数据过大导致的错误。