精华内容
下载资源
问答
  • 主要为大家详细介绍了C/C++产生随机数函数的实现方法,如何使用C/C++产生随机数函数,感兴趣的小伙伴们可以参考一下
  • C++产生随机数函数rand()

    千次阅读 2020-03-11 18:28:10
    C++产生随机数函数rand() C++11之前没有random,生成随机数用rand(),可以配合srand()来使用。rand()不是真正的生成随机数,而是线性取余,有可能也会生成相同的数出来。生成的随机数最大值为RAND_MAX,宏定义在<...

    C++产生随机数函数rand()

    C++11之前没有random,生成随机数用rand(),可以配合srand()来使用。rand()不是真正的生成随机数,而是线性取余,有可能也会生成相同的数出来。生成的随机数最大值为RAND_MAX,宏定义在<stdlib.h>中,为0x7FFF,也就是4294967295。
    rand()规则:
    生成0到最大值之间的随机数:rand()
    生成(a,b)之间的随机数:(rand()%(b-a)) + (a+1)
    生成[a,b)之间的随机数:(rand()%(b-a)) + a
    生成(a,b]之间的随机数:((rand()%(b-a)) +a )+ 1
    生成[a,b]之间的随机数:(rand()%(b-a+1)) + a
    例如产生一个10~20之间的随机数

    (rand()%10) + 10
    

    srand()用来设置rand()产生随机数时的随机数种子。 参数seed必须是个整数,通常可以利用time(0)的返回值或NULL来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

    #include <iostream>
    #include <stdlib.h>
    #include <random>
    #include <ctime>
    using namespace std;
    
    void f1()
    {
    	srand((int)time(0));
    	cout << "f1 rand:" << endl;
    	for (int i = 0; i < 10; ++i)
    	{
    		cout << rand() << ' ';
    	}
    	cout << endl;
    }
    
    void f2()
    {
    	cout << "f2 rand:" << endl;
    	for (int i = 0; i < 10; ++i)
    	{
    		srand((int)time(0));
    		cout << rand() << ' ';
    	}
    	cout << endl;
    }
    
    int main()
    {
    	f1();
    	f2();
    	system("pause");
    	return 0;
    }
    
    

    输出:

    f1 rand:
    28071 30499 28792 20690 25000 5286 6554 1446 4794 29189
    f2 rand:
    28071 28071 28071 28071 28071 28071 28071 28071 28071 28071
    

    产生相同随机数的原因:
    计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。

    展开全文
  • 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得...
    计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。) 
     
    我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。
     
    1.rand()
    功能:随机数发生器
     
    用法:int rand(void)
     
    所在头文件: stdlib.h
     
    rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。
     
    rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。
     
    用户未设定随机数种子时,系统默认的随机数种子为1。
     
    rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。
     
    2.srand()
    功能:初始化随机数发生器
     
    用法: void srand(unsigned int seed)
     
    所在头文件: stdlib.h
     
    srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
     
    3.使用当前时钟作为随机数种子
    rand()产生的随机数在每次运行的时候都是与上一次相同的。若要不同,用函数srand()初始化它。可以利用srand((unsigned int)(time(NULL))的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。
     
    4.产生随机数的用法
    1) 给srand()提供一个种子,它是一个unsigned int类型;
    2) 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);
    3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
    4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
     
    0~RAND_MAX之间的随机数程序
    #include <iostream>  
    #include <stdlib.h>  
    #include <time.h> 

    using   namespace  std; 

    int  main()  

            srand((unsigned)time(NULL)); 
             for( int  i = 0; i < 10;i++ ) 
                    cout << rand() << '\t'; 
            cout << endl; 
             return  0;  
    }
     
    5.产生一定范围随机数的通用表示公式
    要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
    要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
    要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
    通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
    要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
    要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。
     
    以上内容整理自互联网资料。

    本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/197020

    转载于:https://www.cnblogs.com/xhwang_daisy/archive/2011/03/07/1973339.html

    展开全文
  • C语言中有可以产生随机数函数,需要添加 stdlib.h 头文件和 time.h 头文件。 srand((unsigned) time(NULL)); //初始化随机种子 for(int i = 0; i < 10; i++) printf("%d ", rand()); 其中,rand()函数...

    C语言中有可以产生随机数的函数,需要添加 stdlib.h 头文件和 time.h 头文件。

    	srand((unsigned) time(NULL));	//初始化随机种子 
    	for(int i = 0; i < 10; i++)
    		printf("%d ", rand());

    其中,rand()函数只能产生[0, RAND_MAX]范围内的整数(RAND_MAX是stdlib.h中的一个常数)。

     

    如果想要产生给定范围[a,b]内的随机数,需要使用 rand()%(b-a+1)+a。其中rand()%(b-a+1)的范围是[0,b-a],再加上a之后就是[a,b]。


    若要生成大于RAND_MAX的随机数,则可使用下一种方法:

    1.先用rand()生成一个[0,RAND_MAX]范围内的随机数

    2.然后用这个随机数除以RAND_MAX,这样就能得到一个[0,1]范围内的浮点数

    3.最后用这个浮点数乘以范围长度b-a+1,再加上a即可

    (int)(round(1.0 * rand() / RAND_MAX * (right - left) + left))

    即如上代码所示,可产生[left,right]范围内的随机数。

    展开全文
  • c++随机数产生函数

    2011-06-30 19:43:58
    c++随机数产生函数 可以实现 rand(产生随机数)
  • C++产生随机数

    2020-06-20 14:56:13
    目录C++产生随机数rand()srand()为了方便的使用我们可以用宏定义来替换 rand函数其他的随机数的范围通式 c++产生验证码 正文 回到顶部C++产生随机数 C++中没有自带的random函数,要实现随机数的生成...

    原文地址:https://www.cnblogs.com/xiaokang01/p/9786751.html

     

    正文

    C++产生随机数

    C++中没有自带的random函数,要实现随机数的生成就需要使用rand()和srand()。

    不过,由于rand()的内部实现是用线性同余法做的,所以生成的并不是真正的随机数,而是在一定范围内可看为随机的伪随机数。

    rand()

    rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。

    复制代码
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    

    int main()
    {
    for (int i = 0; i < 10; i++)
    {
    cout << rand()%100<< " ";
    }
    return 0;
    }
    83 86 77 15 93 35 86 92 49 21  在100中产生随机数, 但是因为没有随机种子所以,下一次运行也是这个数,因此就要引出srand

    复制代码

    srand()

    srand()可用来设置rand()产生随机数时的随机数种子。通过设置不同的种子,我们可以获取不同的随机数序列。

    可以利用srand((int)(time(NULL))的方法,利用系统时钟,产生不同的随机数种子。不过要调用time(),需要加入头文件< ctime >。

    复制代码
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    

    int main()
    {
    srand((int)time(0)); // 产生随机种子 把0换成NULL也行
    for (int i = 0; i < 10; i++)
    {
    cout << rand()%100<< " ";
    }
    return 0;
    }

    13 8 99 28 43 84 34 24 72 19 
    11 90 27 79 94 4 9 42 84 26  两次产生的数据就不一样了

    复制代码

    为了方便的使用我们可以用宏定义来替换 rand函数

    复制代码
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #define random(x) rand()%(x)
    using namespace std;
    

    int main()
    {
    srand((int)time(0)); // 产生随机种子 把0换成NULL也行
    for (int i = 0; i < 10; i++)
    {
    cout << random(100) << " ";
    }
    return 0;
    }

    复制代码

     

    其他的随机数的范围通式

    产生一定范围随机数的通用表示公式是:

    要取得[0,n)  就是rand()%n     表示 从0到n-1的数

    要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 
    要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 
    要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 
    通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 
    要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。 
    要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。

    复制代码
    //
    // Created by lk on 18-10-14.
    //
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #define random(a,b) (rand()%(b-a)+a)
    

    using namespace std;

    int main()
    {
    srand((int)time(0)); // 产生随机种子 把0换成NULL也行
    for (int i = 0; i < 10; i++)
    {
    cout << random(5, 10) << " ";
    }
    return 0;
    }
    5 5 9 7 9 6 5 5 7 7  产生5到10之间的数, 不包括5 和 10

    复制代码
    展开全文
  • c++产生随机数函数

    2013-03-18 16:35:47
    函数一:int rand(void); 从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。 rand()在每次被调用的时候,它会查看: 1) 如果用户在此之前调用过srand(seed),给seed指定了...
  • C/C++产生随机数

    2018-07-21 17:14:53
    C/C++产生随机数用到两个函数rand() 和 srand() 一. 不指定范围产生随机数 用到函数rand(),函数原型为int rand(),无参数。此时会产生一个介于0~RAND_M
  • C++怎样产生随机数:这里要用到的是rand()函数, srand()函数C++里没有自带的random(int number)函数。 (1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0...
  • c++产生随机数

    2020-06-16 21:09:19
    2.使用 srand(time(nullptr)),其中time(nullptr)是获得当前系统的时间,然后作为随机数种子的,随机数种子不同,则产生随机数也是不同的,否则产生随机数是相同的 二、rand产生随机数 1.函数原型为int rand...
  • 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,...我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推
  • c++ 产生随机数

    2016-10-09 11:08:00
    C++随机数函数为rand(), 可以获得一个非负整数的随机数。 要让随机数限定在一个范围,可以采用模除加加法的方式。 要产生随机数r, 其范围为 m,可以使用如下公式: rand()%(n-m+1)+m 其原理为,对于任意数, 0()%...
  • 两个函数的头文件用stdlib.h即可 直接调用rand()即可 不需要...用户未设定随机数种子时,系统默认的随机数种子为1。 rand()与srand()的联系与区别: rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数sran

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,899
精华内容 12,759
关键字:

c++产生随机数的函数

c++ 订阅