获取随机数函数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!
#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!