#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范围,看看是否是数据过大导致的错误。