函数说明,C语言/C++怎样产生随机数

2020-01-05 19:23 来源:未知

rand(产生随机数)

C/C++ 产生随机数函数

C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。
(1)  如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。
例如:

表头文件: #include<stdlib.h>

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。

#include<stdio.h>
#include<stdlib.h>
void main()
{
       for(int i=0;i<10;i++)
             printf("%dn",rand());
}

定义函数 :int rand(void)

rand(产生随机数)
表头文件: #include<stdlib.h>

(2)  如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数:

函数说明 :

定义函数 :int rand(void)

例如:随机生成10个0~100的数:
#include<stdio.h>
#include<stdlib.h>
#define random(x) (rand()%x)

因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。

函数说明 :
因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。

void main()
{
     for(int x=0;x<10;x++)
           printf("%dn",random(100));
}

返回值:

返回值:
返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。
0~RAND_MAX每个数字被选中的机率是相同的。

 

返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。

范例:
/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考
srand()*/
#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}
    执行:

(3)但是上面两个例子所生成的随机数都只能是一次性的,如果你第二次运行的时候输出结果仍和第一次一样。这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。上面的两个例子就是因为没有设置随机数种子,每次随机数种子都自动设成相同值1 ,进而导致rand()所产生的随机数值都一样。

0~RAND_MAX每个数字被选中的机率是相同的。

9 4 8 8 10 2 4 8 3 6

srand()函数定义 : void srand (unsigned int seed);
通常可以利用geypid()或time(0)的返回值来当做seed
如果你用time(0)的话,要加入头文件#include<time.h>

范例:

9 4 8 8 10 2 4 8 3 6 //再次执行仍然产生相同的随机数

例如:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define random(x) (rand()%x)

/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考

srand(设置随机数种子)
表头文件:#include<stdlib.h>

void main()
{

srand()*/

定义函数:void srand (unsigned int seed);

     srand((int)time(0));
     for(int x=0;x<10;x++)
           printf("%dn",random(100));
}

#include<stdlib.h>

函数说明:
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

这样两次运行的结果就会不一样了!!

main()

范例
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}
      执行:与rand范例比较
5 8 8 8 10 2 10 8 9 9

{

2 9 7 4 10 3 2 10 8 7

int i,j;

又或:

for(i=0;i<10;i++)

用"int x = rand() % 100;"来生成 0 到 100 之间的随机数这种方法是不或取的,比较好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))产生一个0到n之间的随机数

{

int main(void)
{
    int i;
    time_t t;

j=1+(int)(10.0*rand()/(RAND_MAX+1.0));

    srand((unsigned) time(&t));
    printf("Ten random numbers from 0 to 99nn");
    for(i=0; i<10; i++)
        printf("%dn", rand() % 100);
永利平台娱乐,    return 0;
}
除以上所说的之外,补充一点就是srand这个函数一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的数字。

printf("%d ",j);

MSDN中的例子。
// crt_rand.c
// This program seeds the random-number generator
// with the time, then displays 10 random integers.
//

}

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

TAG标签:
版权声明:本文由永利平台娱乐发布于关于我们,转载请注明出处:函数说明,C语言/C++怎样产生随机数