重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.rand 随机函数发生器
成都创新互联基于分布式IDC数据中心构建的平台为众多户提供遂宁联通机房 四川大带宽租用 成都机柜租用 成都服务器租用。
用法:int rand(void);
用法?:void srand(unsigned seed);
说明:rand使随机数发生器产生一范围从0~2的随机数。发生器通过调用参数值为1的srand函数可重初始化,也可用给定的函数值。
seed调用srand产生一新的起点。
可移植性:UNIX系统适用
源程序:
#includestdlib.h
#define MULTIPLIER 0x015a4e35L
#define INCREMENT 1
static long Seed = 1;
int rand(void)
{
Seed = MULTIPLIER*Seed + INCREMENT;
return ((int)(Seed16) 0x7fff);
}
2.srand 初始化随机数发生器
用法:void srand(unsigned seed);
源程序:
#includestdlib.h
#define MULTIPLIER 0x015a4e35L
#define INCREMENT 1
static long Seed = 1;
void srand(unsigned seed)
{
Seed = seed;
}
摘自TC库函数源程序一书。
自己实现一个产生随机数的函数见高手这里:
return一句的功能只是把得数的绝对值控制在0~32767之间,关键是next
=
next
*
1103515245
+
12345一句。next变量是静态的,变化以后的值是不消失的,下一次还可用,所以每执行一次next
=
next
*
1103515245
+
12345就获得一个新值,这个新值被return取整除、取余除后控制在0~32767之间就形成了0~32767的随机数。比如第一次,next=1*1103515245
+
12345=1103527590,经return中的对65536取整、对32768取余后就是16838;若再来一次,next已经是1103527590了,那么next
=
next
*
1103515245
+
12345就为next
=
1103527590
*
1103515245
+
12345=1217759518843121895;但这个数已经溢出了,实际上表示成了-1770082073,经return中取整取余后返回的就是-27009;可以算出来,再下一次是10113……不过,你这个函数并不能产生真正意义上的“随机”数,因为作为基数的1103515245在每次开始时是不变的,所以只能得出同样的序列,即每次执行都产生16838、-27009、10113……这样一组无限多的数。所以实际的C随机函数rand()的形参并不是void而是一个长整型变量,通常来调用实时时间函数获取实时时间值来得到,因为时间是每时每刻都在变化的,所以充当"1103515245”角色的数就每调用一次的值都不同。这样每次执行就都能得到不重复的序列。至于12345,我想随便取个数都行!仅供参考……
rand()函数会产生范围为0至32767的随机数,% 让它与5求余,变成0至4的随机数,不过每次启动程序产生的随机数都相等,在用srand(unsigned int)输入种子数后产生的才不一样,一般都用的 srand((unsigned int)time(NULL)) 产生种子。(记得要包含 time.h 库文件)
扩展资料:
当提供的种子相同时,随机数序列也是相同的。而且当种子为1时,与不使用srand()函数时一样的,也就是说rand()函数默认情况下初始化种子值为1;
在stdlib.h 中这两个函数的原型是:
int rand();
void srand (unsigned int);
srand(time(0)); i=rand();
或者srand(time(NULL));
这样就是一个伪随机数。
rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time()返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了。
参考链接:
rand()-百度百科
#include stdio.h
#include stdlib.h
int main()
{
unsigned int seed; /*申明初始化器的种子,注意是usigned int 型的*/
int k;
printf("Enter a positive integer seed value: \n");
scanf("%u",seed);
srand(seed);
printf("Random Numbers are:\n");
for(k = 1; k = 10; k++)
{
printf("%i",rand());
printf("\n");
}
return 0;
}
当提供的种子相同时,随机数序列也是相同的。而且当种子为1时,与不使用srand()函数时一样的,也就是说rand()函数默认情况下初始化种子值为1;
在stdlib.h 中这两个函数的原型是:
int rand();
void srand (unsigned int);
srand(time(0)); i=rand(); 这样i就是一个真正意义上的随机数。
rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了.
C语言随机函数主要用于实现一组随机数的生成。
代码示例如下:
#includestdio.h
#includestdlib.h
int main ()
{
int a;
a=rand()%4;
printf("%d\n",a);
return 0;
}
C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。
扩展资料:
C语言随机函数指针位置
void srand( unsigned int seed )
改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。
基于毫秒级随机数产生方法:
#includewindows.h
种子设为:srand(unsigned int seed);
srand(GetTickCount());
参考资料:百度百科-C语言随机函数