精华内容
下载资源
问答
  • 试验 srand(time(NULL));

    千次阅读 2021-03-20 16:10:55
    观察这段代码,本身是一个产生随机数打印的代码,num 每次都会由于系统时间的变化,而形成不同的数。 #include <... srand(time(NULL)); while(1){ count++; num = rand(); printf("%d ", num)

            来源于 3-9 猜数字随机种子。观察这段代码,本身是一个产生随机数打印的代码,num 每次都会由于系统时间的变化,而形成不同的数。

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int main(){
    
      int num;
      int count = 0;
      srand(time(NULL));
    
      while(1){
        count++;
        num = rand();
        printf("%d ", num);
        if(count>10){
          break;
        }
      }
      return 0;
    }

    但是如果把 srand(time(NULL)); 这段代码放入 while 中会发生什么?

    int num;
    int count = 0;
    while(1){
      srand(time(NULL));  // 注意,这段代码放进去了
      count++;
      num = rand();
      printf("%d ", num);
      if(count>10){
        break;
      }
    }

    结果就是,num 不再是随机值,而是固定的数值,原因可以参考 https://www.imooc.com/wenda/detail/604944,大体意思是伪随机数的产生依赖种子,种子的时间间隔至少1s才可以生成不同的随机数,放在一个循环中时,由于两行代码之间运行时间间隔不大,导致种子未发生变化,所以没有改变随机数。

    但是!!

    int num;
    int count = 0;
    srand(time(NULL)); 
    while(1){
      count++;
      num = rand();
      printf("time: %ld\n", time(NULL));   // 注意,这段代码放进去了
      printf("%d ", num);
      if(count>10){
        break;
      }
    }

    每次我打印出来的时间,显示出来还是相同的,为什么?明明随机数不同

    把 srand() 放入 while 循环中,时间也是不会变化的,只不过这时随机数也不变了

    目前还没有找到好的回答 ==================》 为什么 srand() 放在循环体外面,打印的时间是不变的,但是随机数是变化的,难道是随机数变化,但是我查看不到吗??

    展开全文
  • srand(time(NULL)); 指令意思

    千次阅读 2019-07-20 14:40:14
    srand srand函数是随机数发生器的初始化函数。  原型:void srand(unsigned seed);...不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00...

    srand

    srand函数是随机数发生器的初始化函数。
      原型:void srand(unsigned seed);
      用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。srand((int)getpid()); 使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的。
    追问

    srand(1)直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化//初始化为srand(0)呢?也会随机数重复?你说的重复是 重复出现初始化的数?所以传时间进去,
    要是随即时间,传数进去?
    上面程序要改成srand((unsigned) time(&t));//直接加上这句就行?

    追答

    电脑的随机数都是伪随机,也就是通过一定的算法得出一个数列,然后每 rand()一次就取一个数。
    而srand()的功能就是就是设置产生随机数的公式的参数(随机数种子),如果使用相同的种子,那么得到的随机数也就是相同的。自然,如果使用不同的种子,得出的随机数序列也是不同的。
    不同的种子会得到 固定 的 不同的随机数序列。

    例如:
    void main()
    {
    srand(1);
    cout<<rand()<<endl;
    cout<<rand()<<endl;
    srand(1);
    cout<<rand()<<endl;
    cout<<rand()<<endl;
    srand(2);
    cout<<rand()<<endl;
    cout<<rand()<<endl;
    srand(2);
    cout<<rand()<<endl;
    cout<<rand()<<endl;
    }
    输出结果:
    41
    18467
    41
    18467
    45
    29216
    45
    29216
    由于通过srand(1)和srand(2)设置了不同的随机数种子
    所以产生了两组不同的随机数,这组数与种子相对应。

    那么怎么利用rand产生真正的“随机数”呢?
    答案是通过srand(time(NULL))使得随机数种子随时间的变化而变化。
    PS:time函数可以获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。

    展开全文
  • 我的上一篇博客提出了“c语言—srand(time(NULL))产生的随机数一样”的问题,并且分析了产生这样的问题的原因,现在给大家讲解这种问题的处理方法,先直接上代码给大家看效果。 #include<stdio.h> #include<...

    我的上一篇博客提出了“c语言—srand(time(NULL))产生的随机数一样”的问题,并且分析了产生这样的问题的原因,现在给大家讲解这种问题的处理方法,先直接上代码给大家看效果。

    #include<stdio.h>
    #include<stdlib.h> //提供srand() rand()
    #include<math.h>   //提供round() pow()
    #include<time.h>   //提供time(NULL)
    #include<windows.h>//提供Sleep()
    void round2();     //除法:四舍五入保留整数位
    void round3();     //除法:c语言中round函数的用法  round函数只有一个参数 有两个参数的不是c语言
    int main()
    {
        round2();
        
        Sleep(1000);
        
        round3();
    
        return 0;
    }
    void round2()
    {
        int a,b;
        int c;
    
        srand(time(NULL));
    
        a=rand()%100-50;
        b=rand()%100+1;
    
        if(a>=0)
        {
            c=(a+b/2)/b;
        }
        else
        {
            c=(a-b/2)/ b;
        }
    
        printf("\n%d/%d=%d\n",a,b,c);
    }
    
    void round3()
    {
        int a,b;
        double c;
    
        srand(time(NULL));
    
        a=rand()%100-50;
        b=rand()%100+1;
    
        c=round((double)a/b);
    
        printf("\n%d/%d=%.0lf\n",a,b,c);
    }
    
    
    
    测试结果:
    
    15/62=0
    
    18/10=2
    
    Process returned 0 (0x0)   execution time : 3.835 s
    Press any key to continue.
    
    

    大家可以看到上述产生的随机数不一样了。

    上一篇博客中讲述了产生的随机数一样的原因是程序是在1s内完成的,所以这里可以让程序执行的时间大于1s。

    这里我使用的是Sleep()函数。

    在使用Sleep()函数时有三个注意事项:
    1.头文件<windows.h>
    2.Sleep()的S要大写
    3.Sleep(1000)是程序睡眠1s(即1000是1s)

    展开全文
  • srand(time(NULL))是什么意思?

    千次阅读 2016-06-24 08:55:16
    第一,srand(time(NULL)); //是以当前时间为种子,产生随意数。其中,time(NULL)用来获取当前时间,本质上得到的是一个大整数,然后用这个数来随机数。 第二,这个错误应该是代码中写楼了什么东西造成的,最大的...
    第一,srand(time(NULL)); //是以当前时间为种子,产生随意数。其中,time(NULL)用来获取当前时间,本质上得到的是一个大整数,然后用这个数来随机数。
    
       第二,这个错误应该是代码中写楼了什么东西造成的,最大的可能应该是大括号少了一半或者好多半。
    展开全文
  • 它们就是rand()和srand()函数。这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0...
  • srand((unsigned)time(NULL))详解

    万次阅读 多人点赞 2016-05-26 20:34:11
    srand函数是随机数发生器的初始化函数。原型:void srand(unsigned seed); 用法:它初始化随机种子,会提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面... time函数来获得系统时间,它的返回值为从 00:
  • c语言srand( (time(NULL) )

    2020-06-21 10:58:27
    c语言中语句srand( (time(NULL) ) ; 表示设置一个随机种子,每次运行都能保证随机种子不同。 在C语言中,rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,它是根据一个数,我们可以称...
  • C++小笔记——srand(time(null))函数 背景介绍 在C/C++中,rand函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,它是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系数...
  • srand()、time(NULL)用法解析

    千次阅读 2011-07-22 12:58:16
    在一些产品的源代码中,经常会发现有这样的语句,srand(unsigned(time(NULL)));为什么要这样做呢,其实很简单。1. time()函数表示返回1970-1-1 00:00:00 到当前时间的秒数,而time(NULL)表示获取一个时间,准确的说...
  • C语言随机数:rand()和srand(time(NULL))的使用

    万次阅读 多人点赞 2019-01-26 20:17:03
    C语言随机数rand()简介srand()简介使用 rand()简介 使用该函数首先应在开头包含头文件&lt;stdlib.h&gt; #include&lt;stdlib.h&gt; //(C++建议使用#include&lt;cstdlib&gt;) 在标准...
  • 测试程序时看到srand(time(NULL))产生的随机数的结果是一样的,便在想为什么,程序测试结果如下: #include<stdio.h> #include<stdlib.h> //提供srand() rand() #include<math.h> //提供round() ...
  • 随机数rand()必须结合srand(time(NULL))

    千次阅读 2012-12-12 12:37:14
    c++中,使用c++ rand()获取随机数必须结合srand(time(NULL)),rand()是依靠初始化值产生随机数,而srand(time(NULL))初始化初始值,使每次产生的随机数不一样。在不使用srand(time(NULL)),通过测试遍历一万遍对于...
  • srand((unsigned)time(NULL));  unsigned  int  r=rand();  cout<  return  0;  }  //rand03.cpp #include #include using namespace std; int main() { srand((unsigned)time(NULL)); ...
  • 关于C++中srand((unsigned)time(NULL))的理解 srand((unsigned)time(NULL))是经常和rand()函数搭配在一起,在平时的编程中,可能我们只用rand()函数就能够满足得到随机数的需求,但实际上,计算机产生的是伪随机数,...
  • 这是两个函数! srand函数 一个是srand函数!这是在调用rand()这...而time(NULL)这个函数的返回值是作为srand函数的参数的!意思是以现在的系统时间作为随机数的种子来产生随机数!至于NULL这个参数,很简单因为...
  • 参考博客:srand((unsigned int)time(NULL))引发的思考 一、srand()与rand() srand是随机数发生器的初始化函数。 在c中:两个函数都位于<stdlib.h>头文件中; 在c++中:这两个函数都位于<cstdlib>(被...
  • time()函数有这个规定 如果你传进去的是一个null指针,那么系统返回当前时间,(否者不是NULL)那么系统认为你要修改当前时间,就把你传进去的指针对应的time_t变量的值设置为当前时间,还有不懂得请补充
  • C++ 关于srand((unsigned int) time(NULL));的报错 在使用srand((unsigned int) time(NULL));时,我发现在不同的编译器中编译含此条语句的代码会出现不同的结果。 在使用CS50 IDE在线编译时需要添加time.h头文件,...
  • srand((unsigned int)time(NULL))引发的思考

    万次阅读 多人点赞 2016-02-21 13:36:53
    这几天刷题碰到这句函数:srand((unsigned int)timeNULL)) 一看之下,有点印象,但就是说不清楚,挺气人的,就想着弄明白这个东西跟大家分享分享 1,srand跟rand的关系: 2,time函数的简单用法; 3,参数...
  • 起因:在IFS画分形的循环中使用了srand((unsigned)time(NULL)); 运行:循环一万次的函数并未达到分形图形的效果 找错中… 解决:将srand((unsigned)time(NULL));从循环中移除就画出来了! 发现自己对srand( ),rand...
  • srand((unsigned)time(NULL))随机数

    千次阅读 2018-10-18 21:36:14
    详细解释:链接 应用: 随机抽取数组中的数 //有放回------------------- #include&lt;stdio.h&gt; #include&lt;string.h&...time.h&gt; #include&lt;math.h&gt; ...
  • srand((usigned)time(NULL))

    2020-02-01 16:58:34
    srand()   这个函数在C/C++中经常跟rand函数一起使用,srand是随机数发生器的初始化函数.   在C中:这两个函数都位与<stdlib.h>头文件里面   在C++中:两个函数都位与<cstdlib>(被包含于iostream...
  • C语言srand((unsigned)time(NULL))…

    千次阅读 2016-09-25 21:24:41
    srand函数是随机数发生器的初始化函数。 原型:void srand(unsigned seed); 用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的...time函数来获得系统时间,它的返回值为从 00:00:00 GM
  • 博主用的是18版本的ubantu,这个问题折腾了好久,最后抓住implicit declaration of function 'time'这条报错信息,这个报错是因为头文件缺失导致的 可能是最近几年C语言版本更新造成的问题吧,这里博主不得不吐槽...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,796
精华内容 21,918
关键字:

srand(time(null))