C语言和Java生成随机数

在实际编程中,我们经常需要生成随机数,例如,实现排序算法的时候通过生成随机数来测试算法的可行性

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]
		} 
	}
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值