C语言中如何产生随机数

今天看到一段小程序 ,里面用到随机数。才发现在C语言中产生随机数不像matlab中那么简单。

C中也有rand()函数,但是rand()函数产生的数不是真正意义上的随机数,是一个伪随机数,是根据一个数,我们称它为种子,为基准以某个递推公式推算出来的一系列数。范围在0~RAND_MAX之间。RAND_MAX和rand()一样也定义在stdlib.h中,其值至少为32767。当计算机正常开机后,种子是固定了的。所以如果不结合其他函数,使用rand()产生随机数就会出现以下情况:

 1 #include<stdlib.h>
 2 int main()
 3 {
 4      int i,j;
 5      for(i=0;i<10;i++)
 6      {
 7             j=1+(int)(rand()%10);
 8             printf("%d",j);
 9      }
10 }

你会发现程序连续执行N次的结果是一样的,这是因为如果未设置随机数种子,rand()在调用时会默认随机数种子为1。为了解决这个问题C提供了srand()函数。所以在调用rand()产生随机数之前必须调用srand()设置种子。srand()的原形是void srand(int a)。下面结合srand()的使用我们编写一个产生随机数的程序:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
     srand((int)time(0));
     int i;
     for (i=0;i<!0;i++)
     {
        printf("%d ",(int)(rand()%10));
      }

      printf("\n");
}
[email protected]:/home/qj/python_pro# ./test
5 6 2 3 8 6 1 9 8 0
[email protected]:/home/qj/python_pro# ./test
5 6 1 7 6 0 9 8 0 2
[email protected]:/home/qj/python_pro# ./test
1 1 6 2 6 1 6 5 1 0
[email protected]:/home/qj/python_pro# ./test
9 4 0 3 0 7 8 7 0 1
[email protected]:/home/qj/python_pro# ./test
8 2 1 5 4 0 2 9 5 2
[email protected]:/home/qj/python_pro# ./test
6 1 9 6 8 2 6 2 1 1
[email protected]:/home/qj/python_pro# ./test
2 1 0 4 0 8 9 0 7 2
[email protected]:/home/qj/python_pro# ./test
7 4 9 3 1 7 6 4 1 0
[email protected]:/home/qj/python_pro# ./test
4 8 1 1 1 2 6 3 3 0
[email protected]:/home/qj/python_pro# 

其中time()用来获得机器时间,它定义在time.h中。

由于程序执行是随机的,系统时间也具有随机性。故可以得到具有随机性的种子,且每次使用rand()函数前都使用srand()设置一次种子,这样我们就能得到随机数了。

还可以参考:

http://wenku.baidu.com/link?url=UCsVYyZNNAoXlVUIqhGjppcbL6JlCpxMPxAhyzep_ePMDxb977NQqTk-DAed7k7-kjj9v90Bn6N0a-P1rfaGi9DvN0WsVY04kF8-L34dXn_
时间: 2024-12-15 07:16:15

C语言中如何产生随机数的相关文章

Java语言中自动生成随机数

参考原文:http://zhidao.baidu.com/link?url=nB3BT69wmUAiSPfKGgK5Q7HOFFP9AIE04AthreRd9yYcwKhUQsQRWlMdMhW1Qm4P7VqyHREaRqeL_6v6q8B2K_ 1.使用org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(10)取数字字母随机10位;//取得一个3位随机数字字符串 String num = RandomStringUtils

C语言中随机数相关问题

用C语言产生随机数重要用到rand函数.srand函数.及宏RAND_MAX(32767),它们均在stdlib.h中进行了声明. int rand(void);//生成一个随机数 voidsrand(unsigned int seed); //为rand设置"种子"的值 srand()就是给rand()提供种子seed,如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的.通常的做法是以这样一句代码: srand((unsigned)time(NULL)); 来取

【编程开发】C语言中随机数rand使用注意事项

[编程开发]C语言中随机数rand使用注意事项 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:随机数在编程开发中非常重要,以C语言中的rand函数为例,使用时需要注意随机数的随机体现在哪里,比如是程序在不同的时刻执行时,相同位置的随机数是否需要一样,还是要每次执行生成的随机数也要不一样,等等,这些都是需要加以关注的地方. 经测试,发现,在不使用srand这个随机数种子的情况下:每次运行生成的随机数都是一样的.有的时候是需要这样子的,当然可以直接使

c语言中实现从0-1的随机数输出

原文:c语言中实现从0-1的随机数输出 今天晚上同学问了一个巨简单的问题,问我怎么用c语言输出0-1的随机数,可别说,一时之间还想不出来.在写的过程中发现,直接调用random函数还不能实现,用以下方法可以解决: #include<stdio.h> #include<time.h> #include<stdlib.h> int main() { int i; srand(time(NULL)); printf("%lf\n",(double)rand

C语言/C++中如何产生随机数

C语言/C++中如何产生随机数 作者: 字体:[增加 减小] 类型:转载 时间:2013-10-14我要评论 这里要用到的是rand()函数, srand()函数,和time()函数.需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件 C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数. 需要说明的是,iostream头文件中就有srand函数的定义,

R语言中的四类统计分布函数

R语言中提供了四类有关统计分布的函数(密度函数,累计分布函数,分位函数,随机数函数).分别在代表该分布的R函数前加上相应前缀获得(d,p,q,r).如: 1)正态分布的函数是norm,命令dnorm(0)就可以获得正态分布的密度函数在0处的值(0.3989)(默认为标准正态分布). 2)同理,pnorm(0)是0.5就是正态分布的累计密度函数在0处的值. 3)而qnorm(0.5)则得到的是0,即标准正态分布在0.5处的分位数是0(在来个比较常用的:qnorm(0.975)就是那个估计中经常用到

C语言中的数组调用——混乱的内存管理

在C语言中想要创建数组只能自己malloc或者calloc,数组复制则是memcpy. 这样创建出来的数组在调用时是不会检测数组边界的,即你声明了一个长度为5的数组,却可以访问第6个位置……也可以给第7个位置赋值……不知道这算不算内存泄露,可否通过这种方法偷取内存中的情报呢? 例: int main(){ int *list=(int*)malloc(5*sizeof(int)); for(int i=0;i<5;++i){ list[i]=i; } for(int i=0;i<15;++i)

谈谈 C# 语言中的 static 关键字

01: /// <summary> 02: /// 使用字节数组中的值初始 ZipInteger 结构的新实例 03: /// 注意:本构造函数会破坏传入的 bits 参数的值. 04: /// </summary> 05: /// <param name="bits">顺序为 big-endian 的字节值的数组</param> 06: public ZipInteger(byte[] bits) 07: { 08: if (bits

C语言中的数组

一维数组 数据类型 数组名[] = { }; 在标准C语言环境下,数组大小只能用常量 int array[1000]={}; for (int i =0 ; i < 1000; i++) { printf("%d ", array[i]); } //打印出来是随机数,只是大部分是0 第一种:直接初始化赋值: int array[10]={1,2,3,4}; for (int i = 0; i < 10; i ++) { printf("%d ", arr