C语言中random函数与rand()的使用区别及随机数生成方法详解

也许大家都知道C语言中的随机函数random,但是random函数并不是ANSI C标准,所以random函数在gcc、vc等编译器下是无法编译的。

C语言中random函数与rand()的使用区别及随机数生成方法详解

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

如何生成不可预测的随机序列?

使用 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之间的随机数程序:

#包括

#包括

#include //使用当前时钟作为种子

无效主(无效)

{int 我;

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

for( i = 0; i < 10;i++ ) //打印出10个随机数

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

根据上面的程序,你可以很容易得到一个0到1之间的随机数:

#包括

#包括

#包括

主要的( )

{int 我;

srand( (无符号)时间( NULL ) );

for( i = 0; i < 10; i++ )

printf( "%5.2f\n", rand()/32767.0);

生成 1 到 100 之间的随机数可以这样写:

#包括

#包括

#包括

主要的( )

{int 我;

srand( (无符号)时间( NULL ) );

for( i = 0; i < 10; i++ )

printf("%d\n", rand()0+1);

来自

二、三种通用随机数生成器,推荐第三种

函数名称: 兰特

功能:随机数生成器

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

程序示例:

#包括

#包括

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;

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

四、生成不重复随机数

1)#include

#包括

#包括

#包括

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日

87阅读

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

2025年05月09日

86阅读

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

2025年05月09日

78阅读

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

2025年05月09日

63阅读

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

2025年05月09日

91阅读