rand函数

在头文件stdlib.h中的rand函数

	int rand(void);
	void srand(unsigned int seed);

rand函数不是真正的随机数生成器,而是srand会设置供rand使用的随机数种子。
如果在第一次调用rand之前没有调用srand,那么系统会自动为你调用srand。而使用同种子相同的数调用rand会导致相同的随机数序列被生成。
srand((unsigned)time(NULL))则使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到的“随机数”都会是一组固定的序列,因此srand生成的随机数是伪随机数。
rand函数产生一个0到RAND_MAX的伪随机数,这里的RAND_MAX因不同的实现而异,但RAND_MAX至少为32767。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int i;
	for(i=0;i<10;i++)
	printf("%d ",rand());
	printf("\n");
	return 0;
}



第一次输出内容;41 18467 6334 26500 19169 15724 11478 29358 26962 24464
第二次输出内容:41 18467 6334 26500 19169 15724 11478 29358 26962 24464
.
.
.
第n次输出内容:41 18467 6334 26500 19169 15724 11478 29358 26962 24464
每次设下的随机数种子seed都是1.

系统在调用rand()之前都会自动调用srand(),如果用户在rand()之前曾调用过srand()给参数seed指定了一个值,那么 rand()就会将seed的值作为产生伪随机数的初始值;
而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始值。如果给了一个定值,那么每次rand()产生的随机数序列都是一样的~~
所以为了避免上述情况的发生我们通常用srand((unsigned)time(0))或者srand((unsigned)time(NULL))来 产生种子。如果仍然觉得时间间隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某个合适的整数。 例如,srand((unsigned)time(NULL)*10)

time(NULL)的结果是一个数字,每秒都在递增1,也就达成了rand函数使用的种子在不断变换的效果。
需要引用头文件#include<time.h>
不同背景和前景下输出不同内容。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<math.h>
#include<time.h>
#define N 100
char randk()
{
	char ch=0;
	ch=(char)abs(rand()%16);
	if(ch>=10)
	ch=ch-10+'A';
	else
	ch+='0';
	return ch;
}
int main()
{
	srand((unsigned)time(NULL));//使用系统定时/计数器的值作为随机种子 
	char str[10]="color ";
	for(int i=0;i<N;i++)
	{
		str[6]=randk();
		str[7]=randk();
		system(str);
		puts("内容");
		Sleep(200);
		system("cls");
	}
}

拓展
要想生成指定范围的随机数需要使用到求余运算符%
如果我们需要0-10的随机数

	rand()%11;

可以达到这个效果,同样0-100写成

	rand()%101;

求0-n的随机数,使用rand()%(n+1);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值