最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

随机函数的产生方法

来源:动视网 责编:小OO 时间:2025-09-24 16:48:55
文档

随机函数的产生方法

C语言随机函数rand()的用法时间:2010-08-1520:45:27来源:网络作者:未知点击:7次rand和srand的用法首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。rand(产生随机数)表头文件:#include定义函数:intrand(void)函数说明:因为rand的内部实现是用线rand和srand的用法首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说
推荐度:
导读C语言随机函数rand()的用法时间:2010-08-1520:45:27来源:网络作者:未知点击:7次rand和srand的用法首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。rand(产生随机数)表头文件:#include定义函数:intrand(void)函数说明:因为rand的内部实现是用线rand和srand的用法首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说
C语言随机函数rand()的用法时间:2010-08-15 20:45:27来源:网络 作者:未知 点击:7次 

rand和srand的用法 

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。 

rand(产生随机数) 

表头文件: #include 

定义函数 :int rand(void) 

函数说明 : 

因为rand的内部实现是用线

rand和srand的用法 

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。 

rand(产生随机数) 

表头文件: #include 

定义函数 :int rand(void) 

函数说明 : 

因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。 

返回值: 

返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。 

0~RAND_MAX每个数字被选中的机率是相同的。 

范例: 

/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考 

srand()*/ 

#include 

main() 

int i,j; 

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

j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); 

printf("%d ",j); 

执行: 

9 4 8 8 10 2 4 8 3 6 

9 4 8 8 10 2 4 8 3 6 //再次执行仍然产生相同的随机数 

srand(设置随机数种子) 

表头文件:#include 

定义函数:void srand (unsigned int seed); 

函数说明: 

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。 

范例 

/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/ 

#include 

#include 

main() 

int i,j; 

srand((int)time(0)); 

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

j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); 

printf(" %d ",j); 

执行:与rand范例比较 

5 8 8 8 10 2 10 8 9 9 

2 9 7 4 10 3 2 10 8 7 

又或: 

用"int x = rand() % 100;"来生成 0 到 100 之间的随机数这种方法是不或取的,比较好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))产生一个0到n之间的随机数 

int main(void) 

int i; 

time_t t; 

srand((unsigned) time(&t)); 

printf("Ten random numbers from 0 to 99 "); 

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

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

return 0; 

除以上所说的之外,补充一点就是srand这个函数一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的数字。 

MSDN中的例子。 

// crt_rand.c 

// This program seeds the random-number generator 

// with the time, then displays 10 random integers. 

// 

#include 

#include 

#include 

int main( void ) 

int i; 

// Seed the random-number generator with current time so that 

// the numbers will be different every time we run. 

// 

srand( (unsigned)time( NULL ) ); 

// Display 10 numbers. 

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

printf( " %6d ", rand() ); 

printf(" "); 

// Usually, you will want to generate a number in a specific range, 

// such as 0 to 100, like this: 

int RANGE_MIN = 0; 

int RANGE_MAX = 100; 

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

int rand100 = (((double) rand() / 

(double) RAND_MAX) * RANGE_MAX + RANGE_MIN); 

printf( " %6d ", rand100); 

总结: 

我们知道rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种了,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) 功能是 

初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列, 

那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,是吧。利用srand((unsign)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的,对了,你知道time() 函数的功能是返回从1970/01/01到现在的秒数的吧,可能这个起始时间不正确,你查一下对不对吧,C还提供了另一个更方便的函数, randomize() 

原形是void randomize(),功能是用来始初rand() 的种子的初始值,而且该值是不确定的,它相当于srand((unsign)(time(NULL)) 不过应注意的是randomize()的功能要通过time来实现所以在调用它时头文件要包含time.h罢了.

 

本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2010/0815/25098.php

TC随机函数(宏)有:random( )、rand( ) 等,函数的具体使用方法 c语言 

浏览次数:374次悬赏分:0 | 解决时间:2010-12-23 13:57 | 提问者:上弦月_cp 

最佳答案 

函数名: random 

功  能: 随机数发生器 

用  法: int random(int num); 

程序例: 

#include

#include

#include

/* prints a random number in the range 0 to 99 */ 

int main(void) 

   randomize(); 

   printf("Random number in the 0-99 range: %d\\n", random (100)); 

   return 0; 

  

  

函数名: rand 

功  能: 随机数发生器 

用  法: void rand(void); 

程序例: 

#include

#include

int main(void) 

   int i; 

   printf("Ten random numbers from 0 to 99\\n\\n"); 

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

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

   return 0; 

}

C语言中的随机数函数rand()和srand()用法简介

2011-06-21 23:43:23| 分类: IT技术 | 标签:c rand 字号:大中小 订阅 

在ANSI C中,支持对不同的平台采用对应的最佳随机数算法。但是,ANSI C同时也提供了标准的随机化算法以及库函数(可以在不同的平台应用)。 

标准的库函数主要包括rand()和srand(),其中,rand()产生伪随机数,srand()用于设置种子。

具体介绍如下:

int rand(void),返回范围为0—RAND_MAX的整数值,RAND_MAX与具体的C实现有关系,一般定义为0X7FFF。此函数内部实现采用线性同余法,因为产生随机数的周期特别长,所以在一定的范围内可以看作是随机的,产生的伪随机数可认为服从正态分布。rand()若要产生一个随机数,需要设置相应的种子,默认种子为seed=1。 

void srand(unsigned int),用于设置rand()的种子,可以考虑采用一个不断变化的变量作为函数参数,一般选用系统时间time()。

其中,size_t time(size_t*),此函数返回自1970年1月1日0时0分0秒到当前时刻的时间间隔(秒),size_t与具体的C实现有关,一般为unsigned long,此函数的使用方法为:

(1)定义一个size_t类型,取其地址作为函数参数,系统时钟被存放在该地址中;

(2)函数参数采用空指针,使用函数返回值time(0)的形式得到系统时间。

使用rand()取得规定范围的返回值得方法为:

(1)[a,b)之间的随机整数,rand() % (b-a)+ a (结果值将含a不含b),若a=0,则rand() % b;

(2)[0,1]之间浮点数,rand() / double(RAND_MAX);

(3)[0,1)之间浮点数,rand()/double(RAND_MAX+1.0);

(4)[0,n)之间的浮点数,n*rand()/double(RAND_MAX+1.0),[0,n)之间的整数,n*rand()/(RAND_MAX+1.0);

(5)[0,n]之间的浮点数,n*rand()/double(RAND_MAX),[0,n]之间的整数,n*rand()/RAND_MAX。

文档

随机函数的产生方法

C语言随机函数rand()的用法时间:2010-08-1520:45:27来源:网络作者:未知点击:7次rand和srand的用法首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。rand(产生随机数)表头文件:#include定义函数:intrand(void)函数说明:因为rand的内部实现是用线rand和srand的用法首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top