您的位置:首页 > 编程语言 > C语言/C++

C语言中产生随机数

2012-08-14 20:34 141 查看
C语言中产生随机数
C语言中是怎样产生随机数的呢?这就要用到rand()函数和srand()函数啦!那接下来就分几种情况看看在C语言中到底是怎么产生随机数的。
1、如果你只是要产生随机数,而不需要设定随机数的范围的话,这里你之需要用rand()函数就行啦!
举例:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i = 0;
for(i = 0; i < 10; i++)
printf("%d\n",rand());
return 0;
}


结果:



在这里,你也会有两个疑问:(1)、为什么我设定范围,产生的随机数就这么大?

(2)、产生的不是随机数吗,为什么运行两次产生的随机数都是相同的呢?

第一个问题呢,这就要问stdlib.h啦!因为当调用rand()函数时,rand()会返回一个随机数值,而这个随机数的数值的范围实在0~RAND_MAX之间,但是RAND_MAX定义在stdlib.h中,且其值为2147483647。所以才导致产生随机数的值才那么大呀!



第二个问题呢,接下来才会讲,这里先透露一下,是因为随机数种子(seed)没有设置的原因呀!

2、如果你需要产生一个在一定范围内的随机数,你可以在函数中定义一个random(int number)函数,然后在main()函数里面直接调用random()函数就可以啦(当然random()函数的函数名是随便定义的啦,也可以取别的函数名,不过要便于阅读哟~)

举例:

#include <stdio.h>
#include <stdlib.h>

#define  random(x)    (rand()%x)

int main()
{
int i = 0;
for(i = 0; i < 10; i++)
printf("%d\n",random(16));
return 0;
}

结果:



很神奇吧!那它为什么就能把范围限定在0~15呢?这就得问问“#define random() (rand()%x)”啦,random()函数表示的意思是,把rand()产生的随机数对x取余数,这样就使得产生的随机数设置在0~x的范围内。

3、现在就来讨论1中的第二个问题啦,每次运行产生的随机数都是一样的,那样的话产生随机数的意义不就是不复存在啦吗?这就与srand()函数有关啦,srand()函数是用来设置rand()产生随机数时的随机数种子的;如果在调用rand()函数产生随机数之前,使用srand()设置一下随机数种子,那每次产生的随机数就不一样啦!由于上面两个例子中都没哟设置随机数种子,而rand()在调用时会自动的把随机数种子设置为1,从而导致rand()所产生的随机数值都是一样的呀!

在这里,你就会问:那我怎么设置随机数种子呢?一般,都是用当前的时间作为随机数种子,这样就能保证每次运行时都能取到不同的随机数序列。如:time_t t ;srand( (int) time(&t));

举例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define  random(x)    (rand()%x)

int main()
{
int i = 0;
srand((int)time(NULL));
for(i = 0; i < 10; i++)
printf("%d\n",random(16));
return 0;
}

结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: