C语言编程中生成随机数的初级教程
几个概念
随机数:数学上产生的都是伪随机数,真正的随机数使用物理方法产生的。
随机数种子:随机数的产生是由算术规则产生的,srand(seed)的随机数种子不同,rand()的随机数值就不同,倘若每次的随机数种子一样,则rand()的值就一样。所以要产生随机数,则srand(seed)的随机数种子必须也要随机的。
用srand()产生随机数种子
原型:void srand ( unsigned int seed );
作用是设置好随机数种子,为了让随机数种子是随机的,通常用time(NULL)的值来当seed。
time()用于随机数种子
函数原型:time_t time ( time_t * timer );
time()函数表示返回1970-1-1 00:00:00 到当前时间的秒数。
用的时候这样:srand(unsigned(time(NULL)));例如产生1~10之间的随机整数
#include#includeint main(){ srand(time(NULL)); for(int i=0;i < 10;i++) { int randValue=rand()%10; }}
上面的程序中要注意srand是在for循环外面的,如果把srand放到for循环里面,则每次产生的随机数都相同。
用rand()产生随机数
原型:int rand ( void );
作用是产生一个随机数,当然随机数是有范围的,为0~RAND_MAX之间,随机数与随机数种子有关。具体来说是,在产生随机数 rand()被调用的时候,它会这样执行:
如果用户之前调用过 srand(seed)的话,他会重新调用一遍 srand(seed)以产生随机数种子;
如果发现没有调用过 srand(seed)的话,会自动调用 srand(1)一次。
如果调用srand(seed)产生的随机数种子是一样的.话(即seed的值相同),rand()产生的随机数也相同。
所以,如果希望rand()每次调用产生的值都不一样,就需要每次调用srand(seed)一次,而且seed不能相同。这里就是经常采用time(NULL)产生随机数种子的原因。
C语言中可以使用rand()函数来生成一个从0到RAND_MAX的uniform分布。基于这个函数,我们可以构造出一些特定的随机数生成器来满足我们的需求。
(一)0到1的uniform分布:
//generate a random number in the range of [0,1]double uniform_zero_to_one(){ return (double)rand()/RAND_MAX;}
(二)任意实数区间的uniform分布:
//generate a random real number in [start,end]double uniform_real(double start,double end){ double rate=(double)rand()/RAND_MAX; return start+(end-start)*rate;}
(三)任意整数区间的uniform分布:
//generate a random integer number in [start,end)int uniform_integer(int start,int end){ int base=rand(); if(base==RAND_MAX) return uniform_integer(start,end); int range=end-start; int remainder=RAND_MAX%range; int bucket=RAND_MAX/range; if(base<RAND_MAX-remainder) return start+base/bucket; else return uniform_integer(start,end);}
这个函数要特别说明一下,平常时候我们都是用rand()%n来生成0到n-1的随机数,但是按这种方法生成的分布并不是uniform的,另外由于RAND_MAX只有32767,因此要生成比这个数更大的随机数需要另外想办法,理论上可以直接用0到1的uniform分布直接放缩,但实际效果不好。这里给出一种移位方式的实现。
(四)32bits的随机数
//generate a random 32 bits integer number int rand32(){ return ((rand()<<16)+(rand()<<1)+rand()%2);}
有了32bits的随机数生成方法,就可以构造32bits范围内的随机整数区间了,方法和之前16bits的情况一样。
(五)32bits范围内的随机整数区间
//generate a random 32bits integer number in [start,end) int uniform_integer_32(int start,int end){ int base=rand32(); if(base==RAND32_MAX) return uniform_integer_32(start,end); int range=end-start; int remainder=RAND32_MAX%range; int bucket=RAND32_MAX/range; if(base<RAND32_MAX-remainder) return start+base/bucket; else return uniform_integer_32(start,end);}
这里RAND32_MAX定义为0x7fffffff。
除此之外,利用rand()函数构造任意分布的随机数也是个值得探讨的问题。
理论上可以通过(0,1)的uniform分布,加上标准采样方法(sampling)获得。
c语言中怎样生成随机数?
C语言中的rand函数可以生成一个伪随机数。这个函数返回一个在0到RAND_MAX之间的整数,其中RAND_MAX是一个在stdlib库中定义的常数,通常是一个相当大的数。使用rand函数的基本语法是:`rand`,调用这个函数会返回一个随机数。二、设置随机种子 为了生成不同的随机数序列,需要在程序开始时使用srand函数设...
c语言随机数怎么生成
在实际编程中,我们经常需要生成随机数。在c语言中我们通常使用rand方法生成随机数,在调用rand前需要调用srand初始化随机数种子。电脑:华为MateBook14 系统:Windows10 软件:notepad++等编辑器、gcc编译器1.0 1、使用rand函数生成随机数,rand随机生成一个位于0~RAND_MAX之间的整数。如下图中,我们直接...
C语言中生成0~1之间的随机数有什么函数
C语言中生成1个0到1的随机数可以执行语句:float b=rand()\/(RAND_MAX+1.0);解析:标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。rand()函数没有输入参数,直接通过表达式rand()来引用;用函数rand取得的随机数除以(...
C语言中怎样生成随机数?
C语言中生成随机数主要依赖于`srand()`和`rand()`这两个函数。`srand()`函数的作用是设定随机数生成的基数,通常需要一个动态变化的种子值,以确保每次产生的随机数不同。如果不使用`srand()`,只依赖`rand()`,虽然简单,但随机数的生成将受到初始种子值的限制,可能产生固定的序列。例如,如果你...
用C语言怎样生成10个1-100之间的随机数
需要准备的材料分别有:电脑、C语言编译器。1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。2、在test.cpp文件中,输入C语言代码:for (int i = 0; i < 10; i++)printf("%d ", rand() % 100 +1);3、编译器运行test.cpp文件,此时成功通过rand产生了10个1-100内的...
c语言随机数函数是什么?
C语言随机数函数是rand。接下来对rand函数进行 一、rand函数的基本介绍 rand函数是C语言中用于生成随机数的标准函数。它返回一个伪随机数,这个数在每次程序运行时都会有所不同。虽然称之为“随机”,但这些数实际上是按照特定的算法计算得出的,因此称为伪随机数。二、rand函数的使用 使用...
C语言如何编程产生随机数?
使用rand()函数产生C语言的随机数,需要加入stdlib.h和time.h在表头,rand()函数需要给srand()函数提供一个参数,不然系统会给定一个默认的参数,如果参数为一任意的常量的话,得到的也是伪随机数:4、按ctrl+F5就可以运行程序了,在弹出的窗口中就会看到得到的所有随机数了:
C语言中获得随机数的方法
C语言\/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言\/C++里没有自带的random(int number)函数。(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。例如...
如何用c语言产生一定范围内的随机数?
利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:1) 首先给srand()提供一个种子...
C语言怎样产生一定范围的随机数?
在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,可以称它为种子。为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数。C语言产生一定范围的随机数的源代码如下:include<stdio.h> include...
韩肤通窍: srand((int)time(NULL));设定随机数种子 rand()%100;产生0-99的随机数. 高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到).其他情况如法炮制!C语言中用rand()函数产生20-90的随机整数 20-90共有71个数字,所以是rand()%71+20 ; 用rand()生成-20-20的随机数 -20-20共有41个数字,所以是rand()%41-20; 需要注意的是,在运行以上代码之前最好设定一下: srand(time(NULL));//用系统当前时间设置rand()随机序列种子,保证每次运行随机序列不一样
拜城县13499798596: 怎么用C语言生成随机数? - ?
韩肤通窍: 生成1~13的随机数,随机数序列中没有重复字数 #include <stdio.h> #include <stdlib.h> // 包含rand()函数说明 #include <time.h> #define N 13 void main( void ) { inti, j, num[N], tmp; //用当前时间种子重置随机数生成器,使每次运行生成不同的...
拜城县13499798596: C语言怎么编写指定个数的随机数? - ?
韩肤通窍: #include <stdlib.h> #include <stdio.h> #include <time.h> int main(void) {int i;int num;printf("请决定产生多少随机数:\n");scanf(" %d",&num);printf("Ten random numbers from 0 to 99\n\n");for(i=0; i<num; i++)printf("%d\n", rand() % 100);return 0; } 楼主看下可以吗? 如果你要接受就用一个数组! srand(unsigned int)是一个初始化随机数发生器!
拜城县13499798596: c语言如何产生在一定范围内的随机数 - ?
韩肤通窍: //---------------------------------------------------------------------------#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) {int a;int t=10,d=100;srand(time(NULL)); /*初始化随机数种子*/ a=rand()%(d-t)+t; /*生成一个[t,d)区间内的整数*/...
拜城县13499798596: 如何用c语言产生一定范围内的随机数 - ?
韩肤通窍: C语言的获取随机数的函数为rand(), 可以获得一个非负整数的随机数.要调用rand需要引用头文件stdlib.h. 要让随机数限定在一个范围,可以采用模除加加法的方式. 要产生随机数r
拜城县13499798596: 怎样用c语言产生一个0到100的随机数 - ?
韩肤通窍: rand()函数,头文件stdlib.hint num; num = rand()%100;
拜城县13499798596: 怎样用c语言取一个随机数 - ?
韩肤通窍: 具体代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> //用到了time函数 int main() { int i,number; srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样 for (i=0; i<50; i++) { number = rand() % 101; //产生0-100的...
拜城县13499798596: 如何用C语言生成真正的随机数 - ?
韩肤通窍: 先使用srand函数以当前时间做一个种子,然后再随机 如:#include//用到了time函数#include #include int main() { int i, number; srand((unsigned int) time(NULL)); //用时间做种,每次产生随机数不一样 for (i=0; i { number = rand() % 12 + 1;//产生1-13的随机数 printf("%d\n", number); } return 0; }
拜城县13499798596: C语言中怎样生成随机数? - ?
韩肤通窍: 在VC中设计到随机数有两个函数 srand() and rand() srand() 的作用是是一个种子,提供每次获得随机数的基数而已,rand()根据种子而产生随机数 注意1:srand() 里的值必须是动态变化的,否则得到的随机数就是一个固定数2:其实可以不用写srand() ,只用rand()就可以了,省事,简单,例子如下 如果我们想得到一个 0-60的随机数那么可以写成 int i; i=rand()%60; 就可以了.当然最好有个统一的标注如下:int i; srand((unsigned)time( NULL )); i=rand()%60; 这样就OK了.
拜城县13499798596: C语言如何生成随机数?
韩肤通窍: C语言生成的的伪随机数的函数rand()包含于time.h库函数 具体例子如下: #include<time.h> #include<stdio.h> int main() { int i; srand((unsigned)time(NULL)); // 初始化种子,保证每次随机得到的数字不一样 for(i = 0; i < 10; i++) { printf("%d",rand()%100); } }