产生随机数的两种方式
不需要规定产生随机数范围
1.所有产生随机数的方法都是在以下两个头文件下实现的:
#include<cstdlib.h>
#include <cstdio.h>
2.不需要规定范围用rand()即可,如下面一个例子:
#include <cstdlib>
#include <cstdio>
int main()
{
int i;
for(i = 1; i <= 10; i++)
{
printf("%d ",rand());
}
printf("\n");
return 0;
}
运行结果如下:
在多次运行后可以发现:
1.用rand()产生的随机数其实是有上限的,即为stdlib.h的上限,为:32767。
2.每一次运行该程序产生的随机数都是这样的几个数,这是因为,rand()虽然可以产生一个随机数,但这却并不是一个真正的随机数,而是一个伪随机数,是根据一个被称为种子的数根据推算公式而得的,每一次的种子都是在开机的时候决定了的,rand()每次调用时生成的种子一般是1。如果我们想要改变种子的值的话,我们就需要用到srand()来设立种子。实例如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int x,num;
srand(time( NULL ));
x =rand();
printf("%d",x);
return 0;
}
这样便可以使每次产生一个新的随机数,关键在于srand(time( NULL ))这个语句,这个语句便可以使每一次运行程序的时间不同,导致srand()给出的种子的数不一样,从而使产生的随机数不一样了。
产生有范围的随机数
rand()产生的随机数均是从0开始的,若需改变随机数的范围可见如下代码:
实例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int x,num;
srand(time( NULL ));
x =1+(rand()%100);
printf("%d",x);
return 0;
}
以(rand()%100)的格式可以使随机数的上限改为99,以1+(rand()%100)的格式则可以改变下限为1,上限为100。
将方法格式化,即为:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int x,num;
int i,j;
scanf("%d%d",&i,&j);
srand(time( NULL ));
x =(rand()%(j-i+1))+i;
printf("%d",x);
return 0;
}
通过上面的实例,我们可以推出用户确定随机数范围的一般形式:(rand()%(j-i+1))+i 。i为下限,j为上限。