Chinaunix
标题:
c++随机数问题,请指导!
[打印本页]
作者:
oydhc
时间:
2010-03-02 19:39
标题:
c++随机数问题,请指导!
今天刚学随机数,指导怎么随机生成整数,但很好奇如何生成浮点数,但书上没写,就想了个简单方法,如代码:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
void sort(int [],int);
void main()
{
int a[100],b[100];
float c[100];
srand(time(0));
for(int i=0;i<100;i++)
{a[i]=rand()%100;
cout<<a[i]<<" ";
b[i]=rand()%100;
cout<<b[i]<<endl;
c[i]=(float)(a[i]/b[i]);
cout<<c[i]<<endl;
}
}
编译可以通过,但运行就弹出错误框,这是为什么呢?
于是稍作修改,变成下面:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
void sort(int [],int);
void main()
{
int a[100],b[100];
float c[100];
srand(time(0));
for(int i=0;i<100;i++)
{a[i]=rand()%100;
cout<<a[i]<<" ";
b[i]=rand()%100;
cout<<b[i]<<endl;
}
c[i]=(float)(a[i]/b[i]);
for(i=0;i<100;i++)
cout<<c[i]<<endl;
}
用着次没错误显示,但c[i]显示的数值全部一样,我用另一个编译器(c++程序学习系统)却能完成我的目标,这是为什么呢?
如果有更简单的随机浮点数的方法,请赐教!
作者:
chary8088
时间:
2010-03-02 19:49
a[i]=rand()%100;
cout<<a[i]<<" ";
b[i]=rand()%100;
cout<<b[i]<<endl;
这两个用的同一个种子,产生的随机数是一样的,
for(i=0;i<100;i++)
cout<<c[i]<<endl;
应该输出都是1
作者:
dragonfly0427
时间:
2010-03-02 19:57
haha,
当然是一样的了,
因为你只计算了一次啊,
第一个应该没什么问题啊
顺便问下,你用srand(time(0)),好像什么也没做啊
作者:
drangon
时间:
2010-03-02 20:45
本帖最后由 drangon 于 2010-03-02 20:47 编辑
有个问题: c
=(float)(a
/b
);,应该写成
c
= (float)a
/ (float)b
;
另外rand()本来产生的就不是随机数,是“伪随机数”,通过数学公式计算出来的,有某些特性不奇怪。
作者:
chary8088
时间:
2010-03-02 21:02
这样修改就可以了
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
void sort(int [],int);
void main()
{
int a[100],b[100];
float c[100];
srand(time(0));
for(int i=0;i<100;i++)
{a[i]=rand()%100;
cout<<a[i]<<" ";
srand(time(0) + 1);//保证种子不一样
b[i]=rand()%100;
cout<<b[i]<<endl;
}
c[i]=(float)(a[i]/b[i]);
for(i=0;i<100;i++)
cout<<c[i]<<endl;
}
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2