c/c++ 随机函数 产生伪随机数

使用ANSI C库函数的rand和srand函数可以实现随机数的产生。使用头文件<stdlib.h>

随机数的产生以一个数字开始,应用一系列数学操作,产生一个与之没有明显联系的数字,但这样的数字都是以有限的方式依赖于前面的数字,更适合成为伪随机数。伪随机数序列的首个数字成为该序列的种子(seed)

rand函数:

int rand(void); //直接返回一个[0,INT_MAX)之间的整数数,其使用的是固定的seed(1),所以每次调用产生的随机数序列是相同的

如果需要每次都产生不一样的随机数序列,需要使得每次的seed不同,可以使用srand函数赋予seed值:

void srand(unsigned seed);

常用<ctimo.h>中的 time_t time(NULL)来产生种子,time_t是(unsigned int)类型,time(NULL)返回的是从1970年1月1日零时(GMT,国际标准时)起逝去的秒数,因此可以每次为srand提供不同的起点。

如果需要产生范围为[0,n)的随机整数,使用: rand()%n;

如果需要产生范围为[a,b)的随机整数,使用: rand()%(b-a)+ a;

如果需要产生范围为[0,1)的随机浮点数,使用: rand()/(double)INT_MAX;

部分代码如下:

#include <stdlib.h>
#include <ctime>

...
srand(unsigned int)(time(NULL));
int ranA = rand()%1000;                         //产生0-999的随机数
int ranB = rand()%(1000-300)+300;       //产生300-999的随机数
int ranC = rand()/(double)INT_MAX * 5; //产生0-5之间的随机浮点数        

  本文参考:数据结构与程序设计 第4章 Niino的C++传说