概述
1.VC和VS2010中srand()和rand()函数的区别
在VC中rand()和srand()函数是包含在math.h头文件中,在使用时需要添加#include "math.h"或者#include <math.h>,但是在VS2010中srand()和rand()是包含在stdlib.h中的,在使用时需要添加语句#include "stdlib.h"或者#include <stdlib.h>。
2.VS2010中srand()和rand()函数的用法
VS2010中通常用srand()和rand()联合使用来产生随机数,用srand(unsigned int seed)来生成seed,然后通过rand()来产生随机数。它们的原始定义都包含在“根目录visual studio 2010VCcrtsrcrand.c"中。
(1)关于srand的讨论
srand(unsigned int seed)无返回值,但是有形参,通常形参有两种形式,一种是常数,如srand(0),srand(1)等,另一种是嵌入函数,这时候通常会需要包含另外的头文件,time.h等,如srand(time(null)),srand(rand()%5)等等。
srand函数放在循环内时用rand()产生随机数时每次产生的随机数都一样,执行多少遍都一样。代码如下:
#include "stdafx.h"
#include "stdlib.h"
//#include "time.h"
#define SIZE 10
int _tmain(int argc, _TCHAR* argv[])
{
int i,j;
for(i=0;i<4;i++)
{
int a[4];
srand(0);
//srand(time(0));
for(j=0;j<4;j++)
{
a[j]=rand()%SIZE;
printf("%d ",a[j]);
}
printf("n");
}
return 0;
}
这时的运行结果是:
由此可见循环内使用srand时rand()每次产生的随机数都一样。
上述代码中将srand(0)放到外层循环外,这时rand()产生的随机数每次都不一样。
改进后的运行结果为:
由此可见循环外使用srand时rand()每次产生的随机数都不一样。
如果要了解srand(0)和srand(1)的区别可参阅参考来源[2]。
(2)关于rand()的讨论
rand()用来从srand()伪随机数结果中产生随机数,没有形参,有返回值,返回值为处于0~32767之间的随机数,通常我们用取余”%“的方法来得到我们想要的区间内的随机数,比如rand()%10即可得到0~9之间的任意随机数。
如果我们想要获得1~10之间的随机数的时候怎么办呢?这时候加一就可以了,即1+rand()%10。
由此得到一般规律,我们想要得到0~(N-1)之间的随机数时我们可以采用如下步骤:
方法一:直接用rand()%N;
方法二:先定义#define MAXSIZE 32767,然后采用语句"(int)(N*rand()/(MAXSIZE+1.0));",这里之所以加上1.0是为了使除法得到的结果是浮点型。
如果需要得到1~N之间的随机数秩序在上述表达式加一即可,即1+rand()%N或者1+(int)(N*rand()/(MAXSIZE+1.0))。
参考来源:
[1]http://blog.sina.com.cn/s/blog_678c3e390100qndg.html
[2]http://stackoverflow.com/questions/8049556/what-s-the-difference-between-srand1-and-srand0
最后
以上就是舒心小天鹅为你收集整理的VS2010中srand和rand产生随机数的用法1.VC和VS2010中srand()和rand()函数的区别 在VC中rand()和srand()函数是包含在math.h头文件中,在使用时需要添加#include "math.h"或者#include
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复