刚好在找这方面的资料,看到了一片不错的,就全文转过来了,省的我以后再找找不到。
在C语言中,可以通过rand函数得到一个“伪随机数”。这个数是一个整数,其值大于等于0且小于等于RAND_MAX。rand函数和常量RAND_MAX都定义在库stdlib.h之中,这意味着必须在头文件中包含库stdlib.h才能使用rand函数和常量RAND_MAX。
rand函数声明为:
int
rand(void)
//代码示例 start
#include
<stdio.h>
#include
<stdlib.h>
int
main()
{
printf("%d
%d\n", rand(), rand());
}
//代码示例
end
编译运行以上代码,将在屏幕显示两个随机数。但多次运行这个程序,你会发现每次程序启动后生成的两个随机数都是一样的!可见,rand()生成的值并不随机。
标准库(stdlib)中随机数的一个可能的实现如下:
//代码示例
start
#define RAND_MAX
0x7fff
unsigned long int next =
1;
int
rand(void)
{
next
= next * 1103515245 +
12345;
return (unsigned
int)(next/65536) %
RAND_MAX;
}
/*srand函数:为rand函数设置种子数*/
void
srand(unsigned int
seed)
{
next
= seed;
}
//代码示例
end
由上可知,只要我们每次在程序运行开始时用srand设置好不同的nex值,那么程序每次运行都将得到不同是随机序列。那又如何给srand传入不同的数呢?随机数?好吧,这下变成鸡生蛋蛋生鸡的问题了。其实不用那么复杂。我们只需要把当前的时间作为srand的参数传入就好了。程序每次运行的时间点是肯定是不一样的。
要获取当前时间,可以使用time库中的time函数。示例如下:
//代码示例
start
#include
<stdio.h>
#include
<stdlib.h>
#include
<time.h>
int
main()
{
srand((int)time(0));
printf("%d
%d\n", rand(), rand());
}
//代码示例
end
编译运行上述代码,就能让程序每次运行都得到不同的随机值了。
程序中time(0)函数返回值类型为time_t(time_t定义为长整型),time(0)返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。
原文:http://www.cnblogs.com/luyingfeng/p/3550010.html