c++如何产生0到1之间的随机数?
c++如何产生0到1之间的随机数?用什么指令?我用过rand(),好像每一次产生的随机数都是41。而且rand()/10这样的语句只能得到整数4,而不是4.1,这是为什么...
c++如何产生0到1之间的随机数?用什么指令?
我用过rand(),好像每一次产生的随机数都是41。而且rand()/10这样的语句只能得到整数4,而不是4.1,这是为什么? 展开
我用过rand(),好像每一次产生的随机数都是41。而且rand()/10这样的语句只能得到整数4,而不是4.1,这是为什么? 展开
9个回答
展开全部
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间的随机数。
}
展开全部
#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就可以了 。
记住在以后的除法中,要得到小数,就最好在除数中加上小数。
#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就可以了 。
记住在以后的除法中,要得到小数,就最好在除数中加上小数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在用rand之前,先用当前时间设置种子,即
srand(time(NULL));
然后要得到0到1之前的,可以
double i = rand()*1.0/RAND_MAX;
同样,你要得到4.1应该是rand()/10.0,否则两个整数相除,得到的是整除的结果,不是double型。
srand(time(NULL));
然后要得到0到1之前的,可以
double i = rand()*1.0/RAND_MAX;
同样,你要得到4.1应该是rand()/10.0,否则两个整数相除,得到的是整除的结果,不是double型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//产生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);
}
}
#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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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");
}
#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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询