获取随机数函数sand()的总结

获取随机数函数sand()的用法详见官方文献:http://www.cplusplus.com/reference/cstdlib/rand/?kw=rand

1、函数 int sand(void);的返回值为0——RAND_MAX(官方文献里此值为32767)之间的随机数。

2、介绍sand()函数不可避免要介绍void srand(unsigned int seed);函数,此函数的作用有两个:一、缩小sand()函数的返回值区间大小,执行过srand(unsigned int seed)函数后,sand函数的返回值为[seed,32767)之间的随机数;二、可以理解为密钥值,让每次的sand()执行结果都不同,此时要求seed值必须是变值(密钥值变化结果才能变化嘛)。sand()函数执行之间不执行srand函数与执行srand(1)的结果是相同的。

3、sand()的一些技巧:

(1)若再想缩小返回值的区间大小就要利用一些方法了,比如若想获取[0,34)之间的随机数,我们可以用求余方法处理:sand() % 34。推广公式就是: rand() %(m-n)  + n,返回区间为[n,m)。

(2)前边我们提到过如何让每次的执行结果都不同,我们须把seed的值变化,我们首先想到的肯定是以当前的时间为seed值。

下面是写的一个小例子及运行结果:

例子1:不调用srand(unsigned int seed);时:

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

int main()
{
int i;
int result=0;

printf("The result is:\n");
//srand(time(NULL));
//srand(1);

for(i=0;i<6;i++)
    {
    result = rand()%33 + 1;
    printf("%02d\t",result);
    }
result = rand()%16 + 1;
printf("%02d\n",result);
printf("over!\n");
return 0;
}

编译及执行结果:

$ gcc -o test_rand my_rand.c
$ test_rand
The result is:
09      17      16      26      32      18      03
over!
$ test_rand
The result is:
09      17      16      26      32      18      03
over!
例子2:调用srand(1)时:

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

int main()
{
int i;
int result=0;

printf("The result is:\n");
//srand(time(NULL));
srand(1);

for(i=0;i<6;i++)
    {
    result = rand()%33 + 1;
    printf("%02d\t",result);
    }
result = rand()%16 + 1;
printf("%02d\n",result);
printf("over!\n");
return 0;
}

编译及执行结果:

$ gcc -o test_rand my_rand.c
$ test_rand
The result is:
09      17      16      26      32      18      03
over!
$ test_rand
The result is:
09      17      16      26      32      18      03
over!

例子3:调用srand(seed),并且seed值一直变化的情况:

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

int main()
{
int i;
int result=0;

printf("The result is:\n");
srand(time(NULL));
//srand(1);

for(i=0;i<6;i++)
    {
    result = rand()%33 + 1;
    printf("%02d\t",result);
    }
result = rand()%16 + 1;
printf("%02d\n",result);
printf("over!\n");
return 0;
}

编译及运行结果:

$ my_rand
The result is:
17      31      14      22      29      12      10
over!
$ my_rand
The result is:
19      24      22      29      25      21      16
over!

(不知道大家注意到rand函数返回值的区间的细节没呢? 吐舌头

你可能感兴趣的:(获取随机数函数sand()的总结)