概述
之前查了好几次这个函数,总是看了就忘,忘了再看,今天索性写在博客里,一来加深印象,二来希望帮助还在困惑的同学。
这两个函数是包含在同一个头文件下的,即常用的 #include <stdlib.n>头文件
vs里自带一个随机数生成函数:rand(),原型为:int rand(void);
使用的时候直接调用,它会返回一个随机数,但是,当你再次调用的时候,会发现这次生成的随机数跟上次一模一样。
这是为什么呢,因为我们没有为rand()函数设置种子,它使用的是默认的种子(默认为1),再通过一定的随机数生成算法,就得到了“随机数”,因为种子固定,随机数生成算法固定,所以生成的随机数也是(顺序)固定的,成了伪随机数。ps:种子与随机数的关系可详见http://zhidao.baidu.com/link?url=zlTpRW9b6nEf9zajsOthfPBqtC2LtrGsRTxmBr3Aw3iyXjP7oo2vNf-LUlikrQL2YXzBywY2ZQh7kTj1nnNVNq
所以,我们自然会想到,如果每次设置的种子不一样,是不是生成的随机数就不是固定的了呢?结果的肯定的!如果不怕麻烦的话,我们可以每次使用rand()函数前都手工设置下种子,当然有的人才懒得手工修改呢,怎么办呢?我们首先需要一个时刻变化的数作为种子,然后请srand()函数将该变化的数设为种子,这样就ok了。
srand()函数的原型为:void srand (unsigned int seed);
可以利用vs中的time()函数(头文件time.h)为我们返回一个不断变化的数作为种子,原型为:time_t time(time_t * timer); // time_t 实际上就是长整型long int; 他用来保存从1970年1月1日0时0分0秒到现在时刻的秒数!当参数不为NULL时 需要的是一个time_t*类型的指针,得到的时间值会存在其中,否则只是作为返回值.
srand的常用形式:srand ( time(0) ); // 这样就完成了将time(0)这个数初始化为种子的任务了。
现在就可以生成真正的随机数了:
#include<stdlib.h>
#include<time.h>
void main()
{
srand( time(0) );
printf(" a random number is %dn", rand() );
}
如果要生成0~N之间的随机数只需将上述语句中的rand()改为rand()%N就行了。
总结,
rand()可以生成随机数,但是其种子是固定的(为1);
srand()初始化种子,两个函数有区别的.
最后
以上就是热心水池为你收集整理的rand() 与srand() 函数的全部内容,希望文章能够帮你解决rand() 与srand() 函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复