C语言rand()函数详解:如何生成伪随机数及使用srand()改变种子值

C语言中的rand()函数可以用来生成随机数,但它不是真随机数,而是伪随机数。根据一个数(种子)和一定的递归公式计算出的一系列数字。当这一系列数字非常大时,就符合正常发表,相当于生成随机数(不是真正意义上的随机)。 number),当计算机正常开机时,这个种子的值是固定的,除非你损坏了系统。为了改变这个种子的值,C语言提供了srand()函数,其原型为void srand(int a)。

C语言rand()函数详解:如何生成伪随机数及使用srand()改变种子值

rand() 将返回一个范围从 0 到 RAND_MAX 的随机值。返回 0 到 RAND_MAX 之间的随机值。 RAND_MAX 在 stdlib.h 中定义(其值至少为 32767)。我的运算结果是一个不定数,具体取决于你定义的变量类型。对于int来说是32767。在调用该函数生成随机数之前,必须先使用srand()设置随机数种子。如果没有设置随机数种子,rand()在调用时会自动将随机数种子设置为1。一般用for语句来设置种子数。有关详细信息,请参阅下面的示例。

1. 如何生成不可预测的随机序列?使用 srand((unsigned int)(time(NULL))) 是一种方法,因为每次运行程序的时间都不同。

C语言提供的随机数生成器的使用:目前的C编译器提供了基于ANSI标准的伪随机数生成器函数来生成随机数。它们是 rand() 和 srand() 函数。这两个函数的工作流程如下:

1)首先向srand()提供一个种子,它是一个unsigned int类型,取值范围为0到65535;

2) 然后调用 rand(),它将根据提供给 srand() 的种子值返回一个随机数(0 到 32767 之间)

3)根据需要多次调用rand()以不间断地获取新的随机数;

4) 任何时候,您都可以向 srand() 提供新的种子,以进一步“随机化”rand() 的输出。

以下为0~32767、0~1、0~10之间的随机数程序:

#包括

#包括

#包括

int main()

srand( (无符号)时间( NULL ) ); //初始化随机数

for(int i=0;i

//printf(" %d\n",rand()); //0到32767之间的随机数

//printf( "%5.2f\n", rand()/32767.0); //0到1之间的随机数

printf("%d\n", rand()0+1); //0到100之间的随机数

返回0;

2. 3个通用随机数生成器(推荐第三个)

函数名称: 兰特

功能:随机数生成器

用法:无效兰特(无效);

程序示例:

#包括

#包括

int 主函数(无效)

整数我;

printf("0到99的十个随机数\n\n");

对于(i=0;我

printf("%d\n", rand() % 100);

返回0;

函数名称:随机

功能:随机数生成器

用法: int random(int num);

程序示例:

#包括

#包括

#包括

/* 打印 0 到 99 范围内的随机数 */

int 主函数(无效)

随机化();

printf("0-99范围内的随机数:%d\n", random(100));

返回0;

函数名称:randomize 这个更好!

功能:初始化随机数生成器

用法:无效随机化(无效);

程序示例:

#包括

#包括

#包括

int 主函数(无效)

整数我;

随机化();

printf("0到99的十个随机数\n\n");

对于(i=0;我

printf("%d\n", rand() % 100);

返回0;

随机数生成算法在《常用计算机算法》中有介绍

3. 如何生成设定范围内的随机数

由于rand生成的随机数范围是0到rand_max,而rand_max是一个非常大的数,那么如何生成从X到Y的数字呢?

从X到Y,有Y-X+1个数,所以要生成从X到Y的数,只需要这样写:

k=rand()%(Y-X+1)+X;

通过这种方式,您可以生成任何您想要的范围内的随机数。

4. 生成不重复的随机数

方法一:

#包括

#包括

#包括

#包括

swap(int *pm,int *pn) /*交换必须使用指针*/

国际温度;

温度=*下午;

*pm=*pn;

*pn=温度;

int 主函数(无效)

int i,a[513];

/*int *pa,*pb;*/

srand( (无符号)时间( NULL ) ); /*定义这个生成不同的随机数*/

for(i=1; i=1; i--)

/* pa=&a[i]; pb=&a[rand()%i+1];*/

交换(&a[i], &a[rand()%i+1]); /*添加的1是从1到i随机的,不会包含0*/

/*不再需要定义指针了,所以结论是一样的*/

printf("\n") ;

对于(i=1;我

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

85阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

85阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读