今天(2020/8/10)探究了如何使用C语言来生成随机数后,深夜写下此文作为笔记 (/ω\) 。
rand()函数
在C语言中,可以使用<stdlib.h>
头文件中的rand()
函数来生成随机数。rand()
会随机生成一个位于0~RAND_MAX区间的整数,RAND_MAX
是<stdlib.h>
头文件中的一个宏,用来指示rand()
函数返回的随机数的最大值,但C语言中并没有规定RAND_MAX
的具体数值,只是规定该值最小为32767。在实际使用中一般也不需要知道RAND_MAX
的具体数值。
rand()函数的使用
用法:
int rand(void); |
示例:
|
rand()函数的局限性
如果多次运行以上的代码,产生的随机数是相同的,因为rand()
函数产生的随机数是伪随机数,是用一个“种子”(seed,数值)根据特定公式运算生成的。当计算机在每一次启动时,“种子”是随机的,但当计算机完成启动后,“种子”一般就不再发生改变;因此,当计算机启动后,只使用rand()
函数生成的随机数是固定不变的,直至计算机的下一次启动。
srand()函数
使用<stdlib.h>
头文件中的srand()
函数可以修改“种子”,该函数需要一个unsigned int
类型的参数作为修改“种子”的参考,该参数可以是当前的系统时间,也可以是其它变量例如当前的进程号。
srand()函数的使用
用法:
void srand(unsigned int seed); |
示例:
使用<time.h>
头文件中的time()
函数可以获得当前的系统时间(精确度:秒)
|
生成一定范围内的随机数
在实际开发中,一般需要生成在某一个范围内的随机数,那么这时就可以使用取余运算来实现随机数的范围限定。
示例
生成0~9的随机数:
int x=rand()%10; //此时生成随机数的下限和上限分别是0和9 |
生成20~29的随机数:
int x=rand()%10+20; //此时相对于范围0~9,生成随机数的下限和上限分别增加了20 |
生成14~22的随机数:
int x=rand()%9+14; //此时相对于范围0~8,生成随机数的下限和上限分别增加了14 |
总结
生成范围为a~b的随机数x:
int x=rand()%(b-a+1)+a; |
连续生成多个随机数
可以使用循环语法实现连续生成多个随机数。
示例
连续生成10个10~27范围内的随机数
|
其中,srand()
函数不能放置于循环体内。假如srand()
函数放置于循环体内,因为rand()
函数是使用srand()
函数的返回值来运算的,而srand()
函数的每一次重新调用,srand()
函数在每一秒内(srand((unsigned)time(NULL));
的精确度为秒,而该循环算法的运算速度极快)运算得到的结果都是一致的,因此rand()
函数的返回值都是一致的。
如有错误,请大佬在评论区多多指教,不胜感激ヾ(≧▽≦*)o。
本文整理自