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);
}
要求的运算结果是这样的 但我一运行我这个就是整数 怎么回事
展开
 我来答
串串的软软
2019-02-08 · TA获得超过2923个赞
知道大有可为答主
回答量:1366
采纳率:85%
帮助的人:520万
展开全部
#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
555蛋疼亲
2019-02-13
知道答主
回答量:14
采纳率:0%
帮助的人:9933
展开全部
你是黑大的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式