[C++] 随机数之初见

分享随机数生成与应用技术
本文探讨了计算机中随机数生成的原理及方法,通过使用`rand()`和`srand()`函数实现不同范围的随机数生成,并展示了在实际应用中的灵活运用。

    进出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的情况。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值