读书人

rand()随机生成数据有关问题

发布时间: 2013-11-25 13:22:27 作者: rapoo

rand()随机生成数据问题
本帖最后由 u012797295 于 2013-11-22 21:27:15 编辑 #include <iostream.h>
#include <time.h>
#include <stdlib.h>
void main()
{
int i,n,
double data[101];
cin>>n;
srand(time(NULL));

for(i=1;i<n+1;i++)
*(data+i)=28+rand()%10/4.0; //随机生成数据,定义data数组为double类型,
//为什么生成的全是整数呢?
//把4.0改为4,有什么不同吗?怎么才能生成小数?
for(i=1;i<n+1;i++)
cout<<data[i]<<" ";
cout<<endl<<endl;


}
[解决办法]
rand函数返回的是整型,要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。

引用:
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
void main()
{
int i,n,
double data[101];
cin>>n;
srand(time(NULL));

for(i=1;i<n+1;i++)
*(data+i)=28+rand()%10/4.0; //随机生成数据,定义data数组为double类型,
//为什么生成的全是整数呢?
//把4.0改为4,有什么不同吗?怎么才能生成小数?
for(i=1;i<n+1;i++)
cout<<data[i]<<" ";
cout<<endl<<endl;


}

[解决办法]
一个是整除一个是除
1/3=0
1.0/3.0=0.3333
[解决办法]
rand函数返回的是整型。

除法的结果类型则是由两边的操作数类型决定的。如果类型不一致会进行类型提升,否则结果类型不变。
提升规则一般是:
1、为防止精度损失,如果必要的话,类型总是被提升为较宽的类型
2、所有小于整型的类型在计算之前都会被转换成整型
3、计算出结果后再转为左值类型并赋给左值

读书人网 >C++

热点推荐