[C++] 随机数之初见

来源:互联网 发布:淘宝改了名称搜不到 编辑:程序博客网 时间:2024/05/16 08:51

    进出csdn这个门户已久,从很多大牛那里学到不少的东西,今天决定开始写自己的技术博客,一来可以和别人分享自己的小经验,结交朋友;二来也可以记录自己成长的点点滴滴,让自己的成长看得见,便于回顾自己的成长历程。

    今天要写的随机数的问题,自己也一直纳闷:计算机是一个非常严格的东西,有确定的输入一定会产生确定的输出,怎么会出现随机数呢? 明白随机数的产生机理后,才明白随机数也是采用一种算法(才用的算法之一是线性同余法)得出来的,只不过得到的结果没有“明显”的规律,所以才这些结果去模拟随机数。 

    这里主要介绍用rand()函数和srand()的配合使用生产随机数的方法。

    一、rand()是C++中生成“随机数”的函数,生成“随机数”时需要一个种子,即初始值,系统用初始值利用递推公式算出一个随机数,默认的种子是1,用for循环生成十个随机数的C++代码如下:

#include <iostream>using namespace std;int main(){for(int i = 0; i != 10; ++i)cout << rand()<< endl;    //输出随机数return 0;}


    得到的十个随机数如图所示,貌似很合理,但是当重复执行该程序时,每次得到的结果都是一样的,这样的“随机数”显得很不合理!原因就是系统每次给的都是默认的种子1,确定的输入必然会得到确定的输出,这一点从计算机严格执行命令的特点来说又是合理的!如何每次都得到不同的种子呢,人们想到了利用系统时间初始化种子,这时就要用到srand()函数。

    二、srand()函数是初始化rand()种子的函数,即每次执行rand()函数时不再拥有同样的种子,这里可用系统时间作为srand()函数的参数,srand((unsigned)time(NULL)); 例子代码如下:

#include <iostream>#include <ctime>using namespace std;int main(){srand((unsigned)time(NULL));for(int i = 0; i != 10; ++i)cout << rand() % 100 << endl;    //输出随机数,用100取余是只想得到[0, 100)的随机数return 0;}
   

    这个运行两次程序后产生的随机数,这样看着更随机!

    产生的随机数的范围可用这个通式进行限定:

     srand((unsigned)time(NULL));

     rand()%(b - a) + a; //产生[a,b)这个范围的随机数,常见到的a是0的情况。

本文参考的文章:浅墨_毛星云点击打开链接 杨中科点击打开链接


0 0
原创粉丝点击