如何用c语言产生一定范围内的随机数?

转载 2015年11月18日 14:02:09
srand((int)time(NULL));设定随机数种子
rand()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况如法炮制!

下面是搜回来的:

问题1: 怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好象每次的随机都一样。 

专家解答: 

    之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种完全相同的序列对于你来说是非常糟糕的。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。你可以在调用rand()函数之前调用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。你也可以使用srand函数来人为指定种子数。Windows 9x/NT的游戏FreeCell就允许用户指定种子数,这样用户如果一次游戏没有成功,下次还可以以同样的发牌结果再玩一次。 
     
  问题2: 我按照上述方法并不能产生随机数,仅产生公差为3或4的等差数列: 
    #include <stdlib.h> 
    #include <iostream.h> 
    #include <conio.h> 
    #include <time.h> 
    void main() 
    { 
     for(int i=0;i<100000;i++) 
     { 
     srand( (unsigned)time( NULL ) ); 
     cout<<rand()<<endl; 
     } 
    } 
专家解答:
   你的程序是有问题的,你每产生一个随机数之前,都调用一次srand,而由于计算机运行很快,所以你每次用time得到的时间都是一样的(time的时间精度较低,只有55ms)。这样相当于使用同一个种子产生随机序列,所以产生的随机数总是相同的。你应该把srand放在循环外: 
     srand( (unsigned)time( NULL ) ); 
     for(int i=0;i<100000;i++) 
     { 
     //相关语句 
     } 

C语言生成随机数

C语言生成随机数 rand函数 函数介绍 rand()函数是产生随机数的一个随机函数: #include int rand(void); 返回值: rand()返回值为一随机数值,范围在...
  • u011192270
  • u011192270
  • 2015年10月24日 21:10
  • 6143

在C语言中如何产生随机数

简单的产生0~100随机数的代码如下: #include"stdio.h" #include"time.h"//在这两个地方使用尖括号总是显示不出来括号中的内容,所以用的双引号 void main(...
  • daijingxin
  • daijingxin
  • 2016年06月27日 10:55
  • 4344

C语言,如何产生随机数(各种转载)

1. 基本函数         在C语言中取随机数所需要的函数是: int rand(void); void srand (unsigned int n);...
  • a1232345
  • a1232345
  • 2015年02月11日 19:49
  • 1608

浅谈C语言中如何取随机数

1. 基本函数 在C语言中取随机数所需要的函数是: int rand(void); void srand (unsigned int n); rand()函数和srand()函数被声明在头文件...
  • moonsheep_liu
  • moonsheep_liu
  • 2015年11月21日 17:01
  • 7028

c语言中生成某一范围的随机数

C语言中用rand()函数产生20-90的随机整数 20-90共有71个数字,所以是rand()%71+20 ; 用rand()生成-20-20的随机数 -20-20共有41个数字,所以是rand(...
  • u010141928
  • u010141928
  • 2017年05月09日 10:14
  • 2211

用C语言产生真正的随机数

为了测试程序,需要产生一些随机数,在网上找到一个很多人用的Demo,发现如果连续产生很多随机数的话,大部分是重复的,因为是根据系统时间来做种子的,我把程序做了一点小的修改,可以产生真正的随机数,经测试...
  • bat603
  • bat603
  • 2007年01月17日 09:15
  • 3306

C语言中的随机数 srand ( ) 和 rand ( )

在C语言中,生成一个随机数,一般利用两个函数,即void srand ( unsigned int seed ) 和 int rand ( void )。其中,srand函数用于生成一个随机数种子,种...
  • XSunrise
  • XSunrise
  • 2015年04月04日 18:34
  • 10543

C语言如何产生一个随机数,rand函数的使用

C语言中用于产生随机数的函数是rand(),下面我用程序说明一下如何在C语言下产生随机数。 示例代码如下: #include #include #include int main(int...
  • rookie_wei
  • rookie_wei
  • 2014年08月10日 01:24
  • 7555

C语言如何生成规定范围内的随机数

如何生成规定范围内的随机数c语言/c++ 编译环境vs2013#include #include #include #define max 100 //随机生成最大的数为100 #define ...
  • baidu_36856113
  • baidu_36856113
  • 2016年12月16日 20:47
  • 3351

c语言中,随机数的生成,随机ID的原理及利用

一、rand() 函数名:   rand 功   能:   随机数发生器 用   法:   int rand(void); 所在头文件: stdlib.h 函数说明 : ...
  • yzq2333
  • yzq2333
  • 2017年03月12日 13:50
  • 304
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何用c语言产生一定范围内的随机数?
举报原因:
原因补充:

(最多只允许输入30个字)