C/C++随机数的定义:
1.如果你只要产生随机数,而不需要规定范围,那么那么你只要用rand()就可以了:
rand()会返回一随机数,范围在0到RAND_MAX间。而rand函数在stdlib.h中,
RAND_MAX值为2147483647.
例如:
#include
#include
int main()
{
for(int i=0;i<10;i++)
printf("%d\n",rand());
}
2.如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)
函数,然后在main()里面直接调用random()函数:
例如:随机生成10个0~100的数:
#include
#include
#define random(x) (rand()%x)
int main()
{
for(int x=0;x<10;x++)
printf("%d\n",random(100));
}
3.上面的这两个例子所生成的随机数都是一次性的,如果你第二次运行上面的程序的话,那么你会发现
你的结果和第一次的一样,而这里的原因就与srand()函数有关了。srand()用来设置rand()产生随机数
时的随机种子。在调用rand()函数产生随机数前,必须现有srand()设好随机种子(seed),如果未设
随机种子,rand()在调用的时候会自动设为1。而上面就是默认设置为1的情况,每次都是相同值1,进而
导致rand()所产生的随机数都一样。
srand()函数定义:
void srand(unsigned int seed);
通常可以利用geypid()或time(0)的返回值来当做seed
如果你用time(0)的话,要加入头文件#include
例如1:
#include
#include
#include
#define random(x) (rand()%x)
int main()
{
srand((int)time(0));
for(int x=0;x<10;x++)
printf("%d\n",random(100));
}
例如2:标准C库中的输出,可以控制srand()的大小
#include
#include
int main()
{
unsigned int seed; /*申明初始化器的种子,注意时usigned int 型的*/
int k;
printf("Enter a positive integer seed value: \n");
scanf("%u",&seed);
srand(seed);
printf("Random Numbers are:\n");
for(k = 1; k <= 10; k++)
printf("%i\n",rand());//记得%i和%d都是表示有符号十进制整数
//区别在于,%i可以自动将输入的八进制(或者十六进制)转换为十进制,而%d则不会进行转换。
printf("\n");
return 0;
}
4.对rand()范围的扩充说明:
x = rand()%11; /*产生1~10之间的随机整数*/
y = rand()%51 - 25; /*产生-25 ~ 25之间的随机整数*/
z = ((double)rand()/RAND_MAX)*(b-a) + a; /*产生区间[a,b]上的随机数*/
以及在stdlib.h中这两个随机函数的原型:
int rand();
void srand (unsigned int);
阅读(1278) | 评论(0) | 转发(0) |