C语言 用蒙特卡洛法求圆周率 帮忙修改一下程序

#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define N 30000
main()
{
float x,y;
int c=0,d=0;
srand(time(0));
while(c++<=N)
{x=rand()/(double)RAND_MAX;
y=rand()/(double)RAND_MAX;
if(x*x+y*y<=1)
d++;
}
printf("pi=%f\n",4*d/N);
}
在visual studio 2010中运行的,菜鸟,不知道错在哪里,帮帮忙!

#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define N 30000
int main() //标准C++写法
{
double x,y; //不提倡用float,因为你已经显式转换成了double,会丢失数据.
int c=0,d=0;
srand((time_t)time(0)); //强制类型转换
while(c++<=N)
{x=rand()/(double)RAND_MAX;
y=rand()/(double)RAND_MAX;
if(x*x+y*y<=1)
d++;
}
printf("pi=%lf\n",4.000000*d/N);
return 0; //返回值
}追问

请问srand((time_t)time(0)); 中的(time_t)是什么意思?

追答

强制转换到time_t类型

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-06
printf("pi=%f\n",4*d/N);
改成printf("pi=%f\n",4.0*d/N);
就可以了,因为输出的表达式类型为整数
第2个回答  2012-02-06
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define N 30000
void main()
{

float x,y;
int c=0,d=0;
srand(unsigned(time(0)));
while(c++<=N)
{x=rand()/(double)RAND_MAX;
y=rand()/(double)RAND_MAX;
if(x*x+y*y<=1)
d++;
}
printf("pi=%f\n",4*d*1.0/N);
}
4*d/N这里的除法是整数相除的,除出来的结果是整数的,应该用浮点数相除
第3个回答  2020-02-08
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define
N
30000
int
main()
//标准C++写法
{
double
x,y;
//不提倡用float,因为你已经显式转换成了double,会丢失数据.
int
c=0,d=0;
srand((time_t)time(0));
//强制类型转换
while(c++<=N)
{x=rand()/(double)RAND_MAX;
y=rand()/(double)RAND_MAX;
if(x*x+y*y<=1)
d++;
}
printf("pi=%lf\n",4.000000*d/N);
return
0;
//返回值
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网