C语言和java中生成随机数的原理和方法

来源:互联网 发布:顺源it 编辑:程序博客网 时间:2024/06/03 18:59

C语言

一.函数
1:int rand(void)
该函数会产生一个[0,RAND_MAX]的伪随机数,那什么是伪随机数?
相当于一个序列a1-an,第一次使用会返回a1, 第二次使用会返回a2….第n次返回an,这样每次调用rand()都能产生一个不同的数,只要整个序列的规律不明显,整个函数看起来就是随机的。
而这个序列是计算机通过调用srand((int)time(NULL))函数随机产生的。

2:void srand(unsigned seed)

srand((unsigned)time(NULL))则使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数序列,所以,在相同的平台环境下,不同时间产生的随机数会是不同的。如果该函数的参数是一个常数,那么每次生成的随机数序列都是固定的。
二.函数使用
1.标准使用:

# include <stdio.h># include <stdlib.h># include <time.h>int main(void){    srand((int)time(NULL));    printf("%d\n",RAND_MAX);    for(int i = 0; i<5; i++)    {        printf("%d\n",rand());     }      return 0;}

结果:

2:如果你想产生在[0, 32767]范围内的一个范围的随机数,可以这样:

# include <stdio.h># include <stdlib.h># include <time.h>int main(void){    int n;    srand((int)time(NULL));     printf("你想生成随机数的最大值是多少?\n");     scanf("%d",&n);     for(int i = 0; i<5; i++)    {        printf("%d\n",rand()%n);     }      return 0;}

结果:


3.如果你还不满足n的范围,可以这样(缺点:n太大精度不好):

# include <stdio.h># include <stdlib.h># include <time.h>int main(void){    int n;    srand((int)time(NULL));     printf("你想生成随机数的最大值是多少?\n");     scanf("%d",&n);     for(int i = 0; i<5; i++)    {        double t =(double)rand()/32767;//产生一个[0,1]内的随机数        double c = t*n;//将他变成你想要的范围        printf("%d\n",(int)c);     }      return 0;}

结果:

三.注意:
1.srand()函数是用来初始化随机数种子的,种子决定序列,种子相同,序列也就相同,每次产生的随机数也就相同,而且srand()只需要执行一次,不要在程序中多次使用它,防止产生相同的随机数。
2.关于time_t time(0):time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。
3.如果在程序中没有使用srand()函数,那么系统会默认给种子初始为0,所以每次产生的随机数序列都是一样的,这个要注意。

Java

一:函数
1.Math.random()
该函数会默认生成[0,1)内的随机数,注意1不闭合。所以你要产生某一范围内的随机数就要最后加上1.
二:函数的使用

public class Main {    public static void main(String[] args) {        // TODO Auto-generated method stub        System.out.println("你想要的范围最大数:");        java.util.Scanner input = new java.util.Scanner(System.in);        double n= input.nextDouble();        for(int i = 0; i<5; i++)        {            System.out.println(Math.random()*n+1);        }    }}

结果:
这里写图片描述
这里写图片描述
3.java很方便吧

0 0
原创粉丝点击