c语言用蒙特卡洛方法求定积分 大佬帮忙看看哪里不对
#include<stdio.h>#include<time.h>#include<stdlib.h>intmain(){inta,b,d,n;floatc;srand(...
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int a,b,d,n;
float c;
srand((unsigned)time(NULL));
printf("请输入a b\n");
scanf("%d %d",&a,&b);
printf("请输入n\n");
scanf("%d",&n);
d=1+b*b;
c=jifen(a,b,d,n);
printf("积分为%lf\n",c);
}
float jifen(int a,int b,int d,int n)
{
int i,m=0;
float x,y;
for(i=1;i<=n;i++)
{
x=(float)rand()/(double)(RAND_MAX)*b+a;
y=(float)rand()/(double)(RAND_MAX)*d;
if(y<=1+x*x)
m++;
}
return (m*(b-a)*d/n);
}
要求的运算结果是这样的 但我一运行我这个就是整数 怎么回事 展开
#include <time.h>
#include <stdlib.h>
int main()
{
int a,b,d,n;
float c;
srand((unsigned)time(NULL));
printf("请输入a b\n");
scanf("%d %d",&a,&b);
printf("请输入n\n");
scanf("%d",&n);
d=1+b*b;
c=jifen(a,b,d,n);
printf("积分为%lf\n",c);
}
float jifen(int a,int b,int d,int n)
{
int i,m=0;
float x,y;
for(i=1;i<=n;i++)
{
x=(float)rand()/(double)(RAND_MAX)*b+a;
y=(float)rand()/(double)(RAND_MAX)*d;
if(y<=1+x*x)
m++;
}
return (m*(b-a)*d/n);
}
要求的运算结果是这样的 但我一运行我这个就是整数 怎么回事 展开
展开全部
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
double jifen(int, int, int, int);
int main()
{
int a,b,d,n;
double c;
srand((unsigned)time(NULL));
printf("请输入a b\n");
scanf("%d %d",&a,&b);
printf("请输入n\n");
scanf("%d",&n);
d=1+b*b;
c=jifen(a,b,d,n);
printf("积分为%lf\n",c);
return 0;
}
double jifen(int a,int b,int d,int n)
{
int i,m=0;
double x,y,result;
for(i=1;i<=n;i++){
x=(double)rand()/(double)(RAND_MAX)*(b-a)+a;
y=(double)rand()/(double)(RAND_MAX)*d;
if(y<=1+x*x) m++;
}
result=(double)m*(b-a)*d/n;
return result;
};
如上 使用double 在最后加入result的强制转换
另外在x定义那里,改为(rand/rand_max)*(b-a)+a
因为是a,b 之间的距离随机加a,当a不为0时原来的式子是错的。
更多追问追答
追问
woc 牛B
大佬 为什么不可以直接return呢 还要加个result
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询