c++如何产生0到1之间的随机数?

c++如何产生0到1之间的随机数?用什么指令?
我用过rand(),好像每一次产生的随机数都是41。而且rand()/10这样的语句只能得到整数4,而不是4.1,这是为什么?

C++中用来产生随机数的函数为rand(), 其返回值为整数。

而0到1之间的随机数,明显是浮点数

这样无法直接产生。

于是,必须经过转换。

转换思路为,生成一个0-N的随机数,然后对其除以N+1,则可以得到0-1直接的浮点型随机数。

N的确定,可以与要求的精度有关,比如需要三位小数,可以采用N=999,如需要四位,则采用N=9999,以此类推。

具体操作如下:

#include <cstdlib>
#include <ctime>
void get_rand(float *p, int n)//函数功能为产生n个0-1的随机数,存储于数组p中。
{
    int i;
    #define N 999 //三位小数。
    srand(time(NULL));//设置随机数种子,使每次获取的随机序列不同。
    for(i = 0; i < n; i ++)
        p[i] = rand()%(N+1)/(float)(N+1);//生成0-1间的随机数。
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-19
#include <stdlib.h>
#include <iostream.h>
#include <time.h>

void main( void )
{
int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
cout<<rand()<<endl;
}

Output
6929
8026
21987
30734
20587
6699
22034
25051
7988
10104
因为是整数除以整数嘛,所以得到的肯定也是个整数啊,它会强制转换为整数。所以你得到的是4,而不是4.1。 你要得到4.1那么就除以10.0就可以了 。
记住在以后的除法中,要得到小数,就最好在除数中加上小数。本回答被提问者采纳
第2个回答  2010-11-11
在用rand之前,先用当前时间设置种子,即
srand(time(NULL));
然后要得到0到1之前的,可以
double i = rand()*1.0/RAND_MAX;
同样,你要得到4.1应该是rand()/10.0,否则两个整数相除,得到的是整除的结果,不是double型。
第3个回答  2010-11-11
//产生0--1之间的随机小数(精确到小数点后一位)
#include <stdlib.h>
#include <time.h>
#include <stdio.h>

void main()
{
int i;
double d;
srand((unsigned)time(NULL));
for(i=0;i <10;i++)
{
d=((double)rand())/RAND_MAX;
printf( "d=%.1f\n ",d);
}
}
第4个回答  2010-11-11
VC中使用srand()来初始化为随机数生成器。代码实例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
main()
{ int i;
srand(time(0)); /*设置种子,并生成伪随机序列*/
for(i=0;i<N;++i)
printf("%d\n",rand()%100);/*得到[0,99]伪随机数*/
system("pause");
}

参考资料:http://baike.baidu.com/view/1081216.htm

c++如何产生0到1之间的随机数?
C++中用来产生随机数的函数为rand(), 其返回值为整数。而0到1之间的随机数,明显是浮点数。这样无法直接产生。于是,必须经过转换。转换思路为,生成一个0-N的随机数,然后对其除以N+1,则可以得到0-1直接的浮点型随机数。N的确定,可以与要求的精度有关,比如需要三位小数,可以采用N=999,如需要...

c++如何产生0到1之间的随机数?
在用rand之前,先用当前时间设置种子,即 srand(time(NULL));然后要得到0到1之前的,可以 double i = rand()*1.0\/RAND_MAX;同样,你要得到4.1应该是rand()\/10.0,否则两个整数相除,得到的是整除的结果,不是double型。

c++如何随机生成0和1
1)C++中的rand()函数可以得到一个0-RNDMAX之间的随机数,Randmax是一个宏,你可以把它理解成65535;2)使用rand()函数必须添加头文件,代码如下:include <cstdlib> 3) 得到0或1的随机数代码如下:int num=rand()%2;因为对2求余的结果不是0就是1,因此上面这句代码就得到了一个0或1的随机...

c++如何产生0到1之间的随机数?用什么指令?
i++)\\x0d\\x0a {\\x0d\\x0a number = ((double)(rand() % 10)) \/ 10;\/\/将0~10之间的随机数除以10 \\x0d\\x0a cout<<number<<ends;\\x0d\\x0a }\\x0d\\x0a \\x0d\\x0a system("pause");\\x0d\\x0a return 0;\\x0d\\x0a} ...

C++ 中怎么产生0-1的随机数 注意要包括小数!
我写了一个精确到0.01的供你参考 include<iostream.h> include<stdlib.h> include int main(){ float num;srand(time(NULL));num = (rand()%100)*0.01;\/*这里可以控制精度,应该能看懂吧,这里是两位精度,如果你想精确到0.001,可以写成num = (rand()%1000)*0.001;*\/ cout<<"The numbe...

怎样用c++编写随机数?
在C\/C++中普通的随机数用randomize()与rnd()就好,产生 的数在0到1之间.如果要1到10的可以 randomize();\/\/产生随机数种子之类的,反正是 \/\/用了这句才能真正随机,不然的话,每次程序 \/\/运行结果都会同样的,不用这句也行,可以用 \/\/srand( (unsigned)time( NULL ) );\/\/前提是在程序前面得加...

c++如何随机生成0和1
include <ctime> int main(){ int num[ 100 ];int temp;int counter = 0;srand( time( 0 ));while( counter++ < 100 ){ temp = rand() % 10;if( temp == 0 )num[ counter ] = 0;else num[ counter ] = 1;} return 0;} 取100个随机数,其中0产生的概率为1\/10 ...

C++怎么产生随机数?
) 是用来产生一个0..RAND_MAX之间的随机整数 3. RAND_MAX是cstdlib头文件里面定义的随即整数的最大值。4. 如果需要一个比如0..1之间的数,就要用一些数学计算(比如上面例子)5. 如果需要其它范围的随机数,就要设计一些类似的运算去产生。标准c++函数库只提供产生随即整数的std::rand()函数。

C++怎么获取随机数?
一、C++获取随机数的方法 rand()方法是C++获取随机数的方法,可以通过srand()方法获取系统的时间,用系统时间作为判断依据,生成随机数,随机数的大小通过rand()方法获取的值,进行取余后获得。也就是说,srand方法获取到了系统的时间,他是毫秒级的,然后通过这个毫秒级的数据,对100取余,即可获得0-...

C++产生任意两数之间随机数的方法例举
C++编程中可以产生任意两个数之间的随机数,产生两个数之间的随机数有哪些方法呢?小编与大家例举一下产生随机数的方法。要产生随机数,首先要使用rand()函数。产生随机数,还要使用随机数种子,一般用系统时间值作为随机数种子。如果要产生[i,j]之间的随机数,使用以下方法。产生[i,j)之间的随机数...

相似回答