在实际编程中,我们经常需要生成随机数,例如,实现排序算法的时候通过生成随机数来测试算法的可行性
C语言生成随机数
在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。
RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。
在使用rand()函数前需要一条语句进行随机数初始值的设置 。
srand((unsigned)time(NULL)); //如果不加上的话会导致每次生成的随机数一样
用系统时间进行随机数初始值的设置。函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子。作为一个随机数实际上是一个伪随机数,并不是实际意义上的随机,仅仅是通过一定的数学方法(不同的数学方法产生满足不同分布的随机数序列),从一个初始值生成的一个序列,因此这个初始值如果雷同的话,生成的随机数也是相同的。因此在第一次使用rand函数前,需要使用srand函数,我们可以通过 srand() 函数来重新“播种”,这样种子就会发生改变。
生成随机数需要用到的头文件为:
#include<stdio.h>
#include<time.h> //time()函数
#include<stdlib.h> //srand()函数
下面是一个随机数生成的实例:
#include<stdio.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));
int arr[10];
int i;
for(i=0;i<10;i++)
arr[i]=rand();
for(i=0;i<10;i++)
printf("%d ",arr[i]);
}
运行结果:
生成一定范围内的随机数
在实际的编程中,我们往往需要确定随机数的范围,可以利用取模的方法:
int a=rand()%100;
则a为0-99的随机数
若要规定上下限,如生成的数的范围为45-87,则代码如下:
int a=rand()%43+45;
分析:rand%43生成了0-42的随机数,+45则表示a的最小值为43,最大值为45
Java生成随机数
在Java中生成随机数需要使用rand()函数,借助java.util.Random类来产生一个随机数发生器,构造函数有两个,Random()和Random(long seed)。
第一个就是以当前时间为默认种子,每次生成不一样的随机数。
第二个是以指定的种子值进行,使用第二个构造方法每次产生随机数的值会相同。
随机数生成实例:
import java.util.Random;
public class Rand {
public static void main(String args[]) {
int a[]=new int[10]; //声明创建长度为10的一维数组
Random ran=new Random();
int i;
//生成随机数组并输出
for(i=0;i<a.length;i++)
{
a[i]=ran.nextInt(1000)+1; // 把范围为1-1000的随机整数复制给a[i]
System.out.print(a[i]+" "); // 输出a[i]
}
}
}
运行结果: