C语言中random函数与rand()的使用区别及随机数生成方法详解
也许大家都知道C语言中的随机函数random,但是random函数并不是ANSI C标准,所以random函数在gcc、vc等编译器下是无法编译的。

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;我