一、浅谈C语言中的rand函数
- rand函数的功能:随机生成一个数,数的范围是0到RAND_MAX(RAND_MAX的值为32767),对应的十六进制范围就是0到0x7fff。
- 函数原型如下:
#include<stdlib.h> //stdlib.h里有宏定义 #define RAND_MAX 0x7fff
int rand(void);
3. rand函数调用方式:
- rand函数每次在调用是会先判断是否有给srand(seek)中的形参seek赋值,如果没有默认seek为1(srand函数在下面浅谈),所以我们就可以发现,当我们没有给srand函数一个实参,直接用rand()输出一个数时,默认第一个随机数都是41,代码如下:
#include<stdlib.h> void main { int a = rand(); printf("%d",a); //不论怎么运行,结果都为41 }
//也就相当于srand(1),seek设置为1 #include<stdlib.h> void main { srand(1); int a = rand(); printf("%d",a); //不论怎么运行,结果都为41 }
二、浅谈C语言中的srand函数
1. srand函数的功能: srand函数设置生成一系列伪随机整数的起点,也就是说rand函数要有不同的起始值,那么srand函数就是来设置rand函数的起始值,而起始值seed有一定的联系,不同的seed就可以设置不同的rand函数的起始值。
2.srand函数原型:
#include<stdlib.h>
void srand(unsignedintseed);
3.srand函数的使用:
- srand是srand函数是随机数发生器的初始化函数,调用时需要给srand函数一颗种子seed来进行初始化起点,如果seed种子的值一样,那么起点也就是一样了。
- 如果我们要得到一个十分随机的数值,就是不管怎么运行,每次的起点都是不一样,那么我们就需要用到time函数来作为一颗种子,播种给srand函数来进行起点的初始化。time的作用是获取系统时间,得到的值是一个时间戳,即从1970年1月1日0点到现在时间的秒数,然后将得到的time_t类型数据转化为(unsigned int)的数,然后再传给srand函数。
- 如果seek种子的值每次都太近的话,生成的第一个随机数的值也就相近 。
//所以可以给time函数的值乘以一个整数
srand((unsigned int)(time(NULL)*10));
- 一般的代码形式如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> void main() { srand((unsigned int)(time(NULL)));//time函数的原型:time_t time( time_t *timer ); int a = rand(); printf("%d",a); //此时a就是一个随机的数 }
三、确定rand函数生成的随机数范围
1.例如:要确定一个[1,100]以内的随机数,代码如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> void main(){ srand((unsigned int)(time(NULL))); //%100,代表筛选出了100一下的数,也就是[0,99];+1后的范围也就是[1,100] int a = rand() % 100 + 1; printf("%d",a); }
结果如下:
如有不足之处,欢迎大家指出!!!