随机数生成:伪随机数和真随机数

伪随机数

C语言随机数的生成,很随机,又不随机,比如像下面的程序

//C语言生成随机数的函数在stdlib.h库中
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a, i;
	for (i = 0; i < 4; ++i)
	{
		a = rand();
		printf("%d ",a);
	}
	return 0;
}

上面的代码经过运行生成了

41 18467 6334 26500

但是无论运行多好遍结果都是一样的,随机数并不随机。

这是因为rand()函数包含一个随机数种子,当我们没有指定时,这个种子默认为1,如果我们想要每次运行的结果不同,就需要一个变化的种子。

真随机数

现实世界的时间是流逝的,每一刻的时间都是不同的,这正满足了我们想要的随机。所以我们采集系统时间来做随机数种子,保证每次生成的结果不同。

这里用到time.h库

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int a, i;
	srand((unsigned)time(NULL));
	for (i = 0; i < 4; ++i)
	{
		a = rand();
		printf("%d ",a);
	}
	return 0;
}

srand函数生成随机种子。
srand函数的参数为无符号数,用(unsigned)强制转换
time(NULL)返回系统当前时间与1970年1月1日0时0分0秒之间的时间差,以秒为单位

这时候数字已经可以随机了,但是怎样才能获得我们想要的数字?

%(取余)不失为一个好选择。
例如,我们取0~10

a=rand()%10;

我们取10~100

a=10+rand()%100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值