文档库 最新最全的文档下载
当前位置:文档库 › C语言中SRAND() RAND() TIME()函数

C语言中SRAND() RAND() TIME()函数

C语言中SRAND()  RAND()  TIME()函数
C语言中SRAND()  RAND()  TIME()函数

C语言中产生随机数的方法

C语言中产生随机数的方法 引例:产生10个[100-200]区间内的随机整数。 #include #include //rand函数的头文件 #include //时间函数的头文件 int main() { int i; //循环变量 srand((unsigned) time(NULL)); //产生随机数的起始数据(以时间为种子) for (i=0; i<10; i++) //printf("%d\n", rand()); //产生[0,0x7fff)即[0,32767)以内的随机整数 //printf("%d\n", rand()%100); //产生0-99的随机整数 printf("%d\n", rand()%(200-100+1) + 100); //产生[100,200]内的随机整数return 0; } 在C语言中产生随机数需要以下几个函数的配合使用。 (1)rand函数——产生伪随机数 原型:int rand(void) 头文件:stdlib.h 功能:产生从0到RAND_MAX之间的随机数。RAND_MAX的值通常是0x7fff(十六进制数7FFF,也就是十进制数32767)。 例: #include #include int main() { int k; k = rand(); printf("%d\n", k); return 0; } 编译运行,发现每次运行程序产生的随机数都是一样的。 计算机中产生随机数,实际是采用一个固定的数作为“种子”,在一个给定的复杂算法中计算结果,所以叫“伪随机数”。 C语言中由于采用固定的序列作为种子,所以每次执行所取的是同一个数。 为上面的例子增加一个循环结构: #include #include int main() { int k,i;

用C语言产生随机数

用c语言产生随机数 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道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 #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数for( i = 0; i < 10;i++ ) //打印出10个随机数 printf( " %d\n", rand() ); } 根据上面的程序可以很容易得到0~1之间的随机数:

C语言中的22个数学函数

C语言的22个数学函数 在使用C语言数学函数时候,应该在该源文件中使用以下命令行: #include 或#include "math.h",这里的<>跟""分别表示:前者表示系统到存放C库函数头文件所在的目录寻找需要包含的文件,这是标准方式;后者表示系统先在拥护当前目录中寻找要包含的文件,若找不到,再按前者方式查找。为节省时间,在使用自己编写的文件时使用的是“”,自己编写的文件一般是在当前目录下。 22个数学函数中只有abs的数据类型是:”整型“,”int“。 log10、logE中的10与E是在log的左下角位置。其余求弧度函数需要看清楚是不是指数。排列方式如下:函数名:函数功能参数介绍,返回值,说明。函数原型。 1.abs: 求整型x的绝对值,返回计算结果。 int abs(int x); 2.acos:计算COS-1(x)的值,返回计算结果,x应在-1到1范围内。 doubleacos(double x); 3.asin: 计算SIN-1(x)的值,返回计算结果,x应在-1到1范围内。 doubleasin(double x); 4.atan: 计算TAN-1(x)的值,返回计算结果。double atan(double x); 5.atan2: 计算TAN-1/(x/y)的值,返回计算结果。 double atan2(double x,double y); 6.cos: 计算COS(x)的值,返回计算结果,x的单位为弧度。 double cos(double x); 7.cosh: 计算x的双曲余弦COSH(x)的值,返回计算结果。 double cosh(double x); 8.exp: 求e x的值,返回计算结果。 double exp(double x); 9.fabs: 求x的绝对值,返回计算结果。 duoblefabs(fouble x); 10.floor: 求出不大于x的最大整数,返回该整数的双精度实数。 double floor(double x); 11.fmod: 求整除x/y的余数,返回该余数的双精度。 doublefmod(double x,double y);

C语言随机函数

编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令. # include “stdio.h” # include “stdlib.h” # include “time.h” /*需引用的头文件*/ srand((unsigned)time(NULL)); /*随机种子*/ n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/ int rand(void) 函数int rand( void );返回的是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。 void srand( unsigned int seed ) 改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。 一直被这个东西弄得模糊不清,终于又去整理了一下.弥补一些细节 主要是对rand()函数的使用//#include 原型int rand(void); 例如:void myrand(int imax) { assert(imax>0); int num = rand(); if(num<=imax) { return num; } else { return (num%imax); }

} 功能产生0到RAND_MAX之间的随机整数.至于RAND_MAX有多大,可以自己编程的时候输出.这是库里自带的宏定义. 像这样的一个函数,就产生了一个0到imax的随机整数.但是,当你多次运行你会发现,每一次产生的值都是一样的.并不是说没有随机,而是随机数发生器(程序产生的随机数是依靠时钟钟断来产生的.因此并不是真正意义上的随机.但对于我们来说,已经够用了)没有被重置.导致结果相同.那下面就看一下几种初始化随机数发生器的办法. srand()函数: 原型: void srand(unsigned seed) 功能: 产生随机数的起始发生数据,和rand函数配合使用 头文件: stdlib.h time.h 例: #include #include #include int main(void) { int i; time_t t;

C语言生成随机函数

程序有一个参数,表示生成的密码的长度 运行的时候要加上,比如./password 8 我写的很简单,参数没做检查,你应该自己去完善一下。 #include #include #include void generate(int len,char* buffer) { /*产生密码用的字符串*/ static const char string[]= "0123456789abcdefghiljklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i = 0; for(; i < len; i++) { buffer[i] = string[rand()%strlen(string)]; /*产生随机数*/ } } int main(int argc, char* argv[]) { int len = atoi(argv[1]); /*指定生成的密码长度*/ srand(time(0)); /*设定随机数种子*/ char *buffer = (char*)malloc(len + 1); /*分配内存*/ generate(len,buffer); /*生成密码*/ puts(buffer); /*输出到屏幕*/ FILE* fp = fopen("pass","w"); /*打开输出文件*/ if(fp == NULL) return -1; fwrite(buffer, sizeof(char), len, fp); /*写文件*/ fclose(fp); /*关闭文件*/ free(buffer); /*释放动态分配的内存*/ return 0; /*程序结束*/ } 自己可以写一个函数。 IT生活系列群: 50337593 IT-live(软件开发) 计算机软件技术群,技术是相通的,大家取长补短,共同进步吧!--软件不仅仅是一种思想。他是一门艺术 30633141 IT-live(网站建设)

Matlab中的randperm和randsample函数用法对比

Matlab中的randperm和randsample函数用法对比 构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值、方差、分布)一致的随机数据。具体到Matlab中,此思路的实现会涉及到两个命令:randperm和randsample p.s. 相关的重新排序命令还包括: 1 2 3 4 5 6 7 8 9 Reordering Algorithms amd Approximate minimum degree permutation colamd Column approximate minimum degree permutation colperm Sparse column permutation based on nonzero count dmperm Dulmage-Mendelsohn decomposition ldl Block LDL' factorization for Hermitian indefinite matrices randperm Random permutation symamd Symmetric approximate minimum degree permutation symrcm Sparse reverse Cuthill-McKee ordering 1、RANDPERM 根据Matlab文档,randperm最常用的用法是是返回一个从1-n的包含n个数的随机排列(每个数字只出现一次)——以行向量的形式 1 p = randperm(n) returns a row vector containing a random permutation of the integers from 1 to n inclusive 如果希望从1-n的数字序列里面随机返回k个数,则可以使用 1 p = randperm(n,k) 其中,这k个数之间彼此也是不相同的。可见,randperm能够产生不重复的随机排列,结合原数据, 可写成类似下面的形式: 1 new = old( randperm( size(old,1) ) , : ); 这样新数组中的各行就被重排了。如果各列也需要重排,则可以嵌套使用。 Matlab文档中还说,randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要 重复多次出现的情况,则可以用: 1 randi(n,1,k) randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。 2、RANDSAMPLE randsample的命令组合比randperm要复杂,事实上这个命令内部也有对randperm的调用。因此,在适当的情况下,使用randperm的速度理论上比randsample快。(事实上也快很多) randsample的命令格式: 1 2 3 4 5 6 y = randsample(n,k) y = randsample(population,k) y = randsample(n,k,replacement) y = randsample(population,k,replacement) y = randsample(n,k,true,w) y = randsample(population,k,true,w)

C语言产生随机整数的方法

产生随机整数的方法: #include #include …… srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; /*rand()在C语言中称为随机函数,它的功能是产生一个不超过RAND_MAX的随机非负整数,RAND_MAX是符号常量,代表整型最大值,即随机数的最大值 32767。limit变量表示随机数的范围。例如产生一个100以内的随机数rand()*100.00/ RAND_MAX */ b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; 计算机产生随机数,后一个是根据前一个产生的,这样第一个随机数称为种子。如果没有种子,计算机按默认计算,每次产生的数都一样。种子通常是利用系统时钟设定的:srand((unsigned long)time(0)) 产生随机整数的模板: #include "time.h" #include “stdlib.h” …… srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; //limit表示随机数范围0~limit。

b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; 【例题】两个随机数的加减法 #include "time.h" #include "stdlib.h" #include "stdio.h" int main() { int a,b,z,limit; /* limit随机数的最大值——范围*/ printf("please input the limit\n"); scanf("%d",&limit); while(1) { srand((unsigned long)time(0)); /*产生随机数种子*/ a=rand()*limit/RAND_MAX; b=rand()*limit/RAND_MAX; a=rand()*limit/RAND_MAX; printf("%d+%d=",a,b); scanf("%d",&z); if((a+b)==z) printf("good!\n"); else printf("error!\n"); } while(1); return 0; }

rand系列函数

1,rand生成均匀分布的伪随机数。分布在(0~1)之间 主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数 rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single' rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 2,randn生成标准正态分布的伪随机数(均值为0,方差为1) 主要语法:和上面一样 3, randi生成均匀分布的伪随机整数 主要语法:randi(iMax)在闭区间[1,iMax]生成均匀分布的伪随机整数 randi(iMax,m,n)在闭区间[1,iMax]生成mXn型随机矩阵 randi([iMin,iMax],m,n)在闭区间[iMin,iMax]生成mXn型随机矩阵 4,randperm随机打乱一个数字序列 randperm(n):产生一个1到n的随机顺序。 >> randperm(10) ans = 6 4 8 9 3 5 7 10 2 1 p = randperm(n,k) 返回一行从1到n的整数中的k个,而且这k个数也是不相同的。randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:randi(n,1,k)。 5,randerr函数 randerr(20,7)产生什么矩阵? 产生一个20×7的矩阵,矩阵每一行随机有一个元素为1,其余的为0 out2 = randerr(8,7,[0 2; .25 .75]) 每行出现零个错误的概率是25% 出现2个错误的概率是75%(值为1表示出现错误) (1)产生随机矩阵,并返回制定范围内的元素 >a = randi([-50 50], 1, 100); >b = find(a > 20 & a < 40)2 (2)产生一个元素为0和1,size为100×5的随机矩阵,返回元素全为1的行。 >a = randi([0, 1], 100, 5) >b=find(all(a,2))3 (3)随机产生10个12位的0、1二进制序列,要求每个序列中包含7个1和5个0的形式。%程序如下 >N =10; >data = randerr(N, 12, 7)'; >data = data( : )'; >str1 = dec2bin(data); >str2 = reshape(str1, 12, N); >seque = str2'

实用C语言中有关随机函数的使用详解

c语言中有关随机函数的使用详解 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道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 #inl #include #include #include main( ) { int i; srand( (unsigned)time( NULL ) ); for( i = 0; i 10;i++ )

标准库rand()函数的缺陷以及Blitz++随机数生成的简介

标准库rand()函数的缺陷以及Blitz++随机数生成的简介 (newsuppy,转载请注明出处) 当我们需要在某个任务中使用随机数,通常我们习惯于使用标准库的rand函数。像这样:srand(time(0)); //时间种子 rand() % MAX_RAND; 标准库的rand函数使用线性同余算法,是生成速度相当快的一种随机数生成算法。在多数情况下也确实能满足我们的要求,但是对于一些特殊目的应用这个算法生成的随机数是不行的,比如某些加密算法,蒙特卡罗积分等(在.NET中创建随机密码的加密安全随机数就不能使用Random类的线性同余随机数,而要使用System.Security.Cryptography命名空间中的相关随机数生成类)。 这个线性同余算法的实现可以在很多书籍中找到。下面我给出一个The C Programming Langurage 2nd中的一个实现,这也是普遍使用的标准库随机数算法的实现: unsigned long int next =1; /* rand: return pseudo-random integer on 0..32767 */ int rand(void) { next = next *1103515245+12345; return(unsigned int)(next/65536)%32768; } /* srand: set seed for rand() */ void srand(unsignedint seed) { next = seed; } 这个实现的问题在于rand函数return行中的那个32768,在标准库中这个数字定义为RAND_MAX宏,在VisualC++和Mingw32编译器的stdlib.h头文件(或者cstdlib)中你都可以发现RAND_MAX的值为32768。也就是说这个算法的随机数分布在0--RAND_MAX中,而在一般编译器中就是0--32768。假设你的算法需要的是300000多个的随机数,那么使用rand函数会产生重负次数近30次的随机数!

用c语言产生随机数rand()

用c语言产生随机数rand() 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道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 #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数 for( i = 0; i < 10;i++ ) //打印出10个随机数

Matlab中Rand()函数用法

Matlab中Rand()函数用法: 一、理论准备 matlab函数randn:产生均值为0,方差σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数。 用法:Y = randn(n),返回一个n*n的随机项的矩阵。如果n不是个数量,将返回错误信息。 Y = randn(m,n) 或Y = randn([m n]),返回一个m*n的随机项矩阵。 Y = randn(m,n,p,...) 或Y = randn([m n p...]),产生随机数组(感觉就是三维数组,请看如下例子)。 1: >> rand(1,2,3) 2: ans(:,:,1) = 3: 0.445586********* 0.646313********* 4: ans(:,:,2) = 5: 0.709364830858073 0.754686681982361 6: ans(:,:,3) = 7: 0.276025076998578 0.679702676853675 Y = randn(size(A)),返回一个和A有同样维数大小的随机数组。 randn s = randn('state'),估计和C++里初始化随机种子一个意思,随便了。 二、举例分析 产生一个随机分布的指定均值和方差的矩阵:将randn产生的结果乘以标准差,然后加上期望均值即可。例如,产生均值为0.6,方差为0.1的一个5*5的随机数方式如下:1: x = .6 + sqrt(0.1) * randn(5) 其他类似函数:rand, randperm, sprand, sprandn 三、拓展 用matlab随机产生60个1到365之间的正数1+fix(365*rand(1,60)),fix就是取整函数。 用rand函数随机取100个从-1到2的数x1,x2,...,x = rand(1,100) * 2 - 1。 逗号表示行,分号表示列。

C语言库函数手册

C语言库函数手册 分类函数,所在函数库为 ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9') 返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值, 否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母 ('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母 ('A'-'Z') 数学函数,所在函数库为 math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数e^x的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中 double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回ln(x)的值 double log10(double x) 返回log10(x)的值 double pow(double x,double y) 返回x^y的值 double pow10(int p) 返回10^p的值 double sqrt(double x) 返回x的正平方根 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度

用c语言产生随机数

用c语言产生随机数 c learning 2007-11-29 21:51:21 阅读4755 评论7 字号:大中小 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数, 它的原形是void srand( int a)。 可能大家都知道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之间的随机数程序:

rand、srand函数用法

rand、srand函数用法 写程序2010-02-28 16:18:34 阅读358 评论0 字号:大中小订阅 srand(设置随机数种子) 相关函数 rand 表头文件 #include 定义函数 void srand (unsigned int seed); 函数说明 srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed 都设相同值,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); } } 执行 5 8 8 8 10 2 10 8 9 9 2 9 7 4 10 3 2 10 8 7 rand(产生随机数) 相关函数 srand 表头文件 #include 定义函数 int rand(void)

rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。 返回值 返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。 范例 #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 1、rand返回0-RAND_MAX之间均匀分布的伪随机整数。RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试) 2、C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。 3、比较理想的是用变化的数,比如时间来作为随机数生成器的种子。time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。 // C++随机函数(VC program) #include #include #include using namespace std; #define MAX 100 int main(int argc, char* argv[]) { srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子 for (int i=0;i<10;i++) cout<

C语言随机数产生原理即用法

产生随机数原理: 在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为种子的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。种子的值通常是用快速计数寄存器或移位寄存器来生成的。 下面讲一讲在C语言里所提供的随机数发生器的用法。现在编译器都提供了一个基于标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1.首先给srand()提供一个种子,它是一个unsigned int类型,其取 值范围从0~65535; 2.然后调用rand(),它会根据提供给srand()的种子值返回一个随机数0 到32767之间) 3.根据需要多次调用rand(),从而不间断地得到新的随机数; 4.无论什么时候,都可以给srand()提供一个新的种子,从而进一步随机 化”rad() 的输出结果。 这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。 rand()通常的使用方法: rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。 这样,如果你要产生0~10的10个整数,可以表达为: int N=rand()%11; 这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样: int N=1+rand()%11; 总结来说,可以表示为: a+rand()%n 其中的a是起始值,n是整数的范围。 若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十 分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到

c语言随机函数的使用

原文地址:C语言:随机函数rand()、srand()、random()和randomized()的区别和用法作者:猎空 声明一点:在VC++中,没有random()和randomize()函数,只有rand()和srand()函数。 其中,random()和randomize()函数的使用的方法分别与rand()和srand()函数的使用方法对应类似。 下面就开始讲rand()和srand()函数的使用: 首先,让我们从宏观的角度,来理解它们的使用机理: 1、这两个函数都在头文件是stdlib.h中 2、rand()函数和srand()函数必须配套使用。 其中,rand()是用来产生随机数的发生器,而srand()函数是用来给rand()函数提供变量(或者称种子)。 因为“种瓜得瓜,种豆得豆”,如果你不通过srand()函数来提供不同的种子,那么rand()函数产生的数就只能是固定的瓜或者豆(其实,如果你的程序中没有使用srand()函数,rand()在产生随机数时,会默认调用srand(1),即种子永远是1)。达不到我们预期的要求。所以 rand()函数总是和srand()函数一起使用。 接下来,让我们看看具体如何调用rand()和srand()函数 1、srand()函数 在VC++中,它的声明是:void srand(unsigned seed) 是一个无返回值、单无符型形参的函数。 根据上面的分析,我们知道产生随机数的一个关键是:在程序每次运行中,让这个seed(种子)都不一样,即是一个可变常数。通常情况下,我们会使用时间来作为seed,即令srand((unsigned)time(NULL))。其中,time()函数在头文件time.h中。time()的声明是:long time(long *locatime),它返回的是一个以秒为单位的当地时间,例如:2010年4月19日17:57:02,则它的返回值是:N(年)*365*24*60*60(这是年部分,还要加月、日、时、分、秒才完整。因为不知道是初始年是哪一年,所以用N表示)我现在这个时刻运行的结果是:1271673894(挺大的一个整数) 2.、rand()函数 在VC++中,它的声明是:int rand(void) ,它返回一个[seed, RAND_MAX (0x7fff))间的随机整数,其中,RAND_MAX是个定值,我用VC++查看是:32767。

相关文档