一.C++ 语言中可以使用rand()和srand()来生成随机数

random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。但在C语言中int random(num)可以这样使用,它返回的是0至num-1的一个随机数。 可改用C++下的rand函数来实现。

1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)

2、C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。

3、 比较理想的是用变化的数,比如时间来作为随机数生成器的种子。 time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。

二.rand()函数

rand()是通过线性同于法实现的,生成的是伪随机数,并不是真正的随机数,每次生成的随机数是一定的,在一定范围内可以看成随机数,rand()函数的头文件在里面,所以要添加#include 头文件。

#include<iostream>
using namespace std;
int main() {
	//随机生成0~9的随机数
	for (int i = 0; i < 10; i++) {
		cout << rand()%10 << " ";
	}
	return 0;
}

运行后产生的随机数为3 6 7 5 3 5 6 2 9 1 在10中产生随机数,每次生成的数字都是一样的(注:随机数按理来说每次运行结果不一致,单数每次的运行结果却一样)。

1.rand()函数的使用

1、rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。

2、如果你要产生0-99这100个整数中的一个随机整数,可以表达为:int num = rand() % 100; 这样,num的值就是一个0~99中的一个随机数了。

3、如果要产生1~100,则是这样:int num = rand() % 100 + 1;

4、总结来说,可以表示为:int num = rand() % n +a; 其中的a是起始值,n-1+a是终止值,n是整数的范围。

5、一般性:rand() % (b-a+1)+ a ; 就表示 a~b 之间的一个随机整数。

6、若要产生0-1之间的小数,则可以先取得0~10的整数,然后均除以10即可得到“随机到十分位”的10个随机小数。

若要得到“随机到百分位”的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依 此类推。

2.rand()函数产生的最大随机数是多少

最大32767 (2^16-1)。

系统里的随机数是利用初等数论中的同余定理来实现的.

整数rand的原理是: y=ax+b(mod n)其中,n一般是一个很大的素数,几万。 a也是大素数。而且a,b,n都是常数。所以rand的产生决定于x, 他被称为seed。 每一个seed都是上一次产生的y的函数。这样,如果直接取seed=y的话, 虽然产生的rand之间相关性甚小,但只要知道某个y,就能推知以后的rand。 为避免这种情况,一般取seed为y和当时计算机的时间的函数,如seed=y+t.

三.srand()函数

因为rand()没有设置随机数种子,因此就要引出srand,接下来就来谈谈srand()的运行机制。srand()可以通过系统时钟来设置随机数种子,通过调用time()函数,来设置不同的随机数种子,这样就可以产生不同的随机数,因为调用time()函数所以需要添加头文件。

#include<iostream>
using namespace std;
int main() {
	//随机生成0~9的随机数
	srand((int)time(NULL));
	for (int i = 0; i < 10; i++) {
		cout << rand()%10 << "  ";
	}
	return 0;
}

第一次产生的随机数4 6 0 9 2 0 5 3 8 7

第二次产生的随机数3 9 6 5 7 5 1 0 7 6,很明显两次产生的随机数是不同的。

如果要产生0到1的随机数可以用rand()/double(RAND_MAX)程序来实现,其中RAND_MAX为产生随机数的最大值,如果没有添加srand(int)(time(NULL))随机数种子,则每次运行产生的随机数是一样的,如果添加了随机数种子则每次产生的随机数是不相同的。

随机数与随机种子参考链接:https://blog.nowcoder.net/n/bd40e11aebc34f8198f310798fce60b0