0%

C语言随机数

今天(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);

示例:

#include<stdio.h>
#include<stdlib.h>
int main()
{
int x=rand();
printf("%d",x);
return 0;
}

rand()函数的局限性

如果多次运行以上的代码,产生的随机数是相同的,因为rand()函数产生的随机数是伪随机数,是用一个“种子”(seed,数值)根据特定公式运算生成的。当计算机在每一次启动时,“种子”是随机的,但当计算机完成启动后,“种子”一般就不再发生改变;因此,当计算机启动后,只使用rand()函数生成的随机数是固定不变的,直至计算机的下一次启动。

srand()函数

使用<stdlib.h>头文件中的srand()函数可以修改“种子”,该函数需要一个unsigned int类型的参数作为修改“种子”的参考,该参数可以是当前的系统时间,也可以是其它变量例如当前的进程号。

srand()函数的使用

用法:

void srand(unsigned int seed);

示例:

使用<time.h>头文件中的time()函数可以获得当前的系统时间(精确度:秒)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));
int x=rand();
printf("%d",x);
return 0;
}

生成一定范围内的随机数

在实际开发中,一般需要生成在某一个范围内的随机数,那么这时就可以使用取余运算来实现随机数的范围限定。

示例

生成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范围内的随机数

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
srand((unsigned)time(NULL));
int i;
for(i=0;i<10;i++)
{
//srand()函数不能放置于循环体内
int x=rand()%18+10;
printf("%d\t",x);
}
return 0;
}

其中,srand()函数不能放置于循环体内。假如srand()函数放置于循环体内,因为rand()函数是使用srand()函数的返回值来运算的,而srand()函数的每一次重新调用,srand()函数在每一秒内(srand((unsigned)time(NULL));的精确度为秒,而该循环算法的运算速度极快)运算得到的结果都是一致的,因此rand()函数的返回值都是一致的。


如有错误,请大佬在评论区多多指教,不胜感激ヾ(≧▽≦*)o。

本文整理自

C语言随机数生成教程,C语言rand和srand用法详解

C语言,如何取一组固定范围的随机数-xyphf

随机数函数srand和rand()的使用心得