c语言 求定积分的通用函数

请问这里哪里错了???#include<stdio.h>#include<math.h>voidmain(){floatintegral(floata,floatb,fl... 请问这里哪里错了???
#include<stdio.h>
#include<math.h>
void main()
{
float integral(float a,float b,float(*p)(float x) );
float f1(float x);
float f2(float x);
float f3(float x);
float f4(float x);
float f5(float x);

float x;
float a=5,b=7;
float result;
printf("请输入x的值:\n");
scanf("%f",&x);

result=integral(a,b,f1);
result=integral(a,b,f2);
result=integral(a,b,f3);
result=integral(a,b,f4);
result=integral(a,b,f5);
}
float f1(float x)
{
float s;
s=1+x;
return s;
}
float f2(float x)
{
float s;
s=2*x+3;
return s;
}
float f3(float x)
{
float s;
s=(float)exp(x)+1; //e的x次方+1
return s;
}
float f4(float x)
{
float s;
s=(1+x)*(1+x);
return s;
}
float f5(float x)
{
float s;
s=x*x*x;
return s;
}
float integral(float a,float b,float(*p)(float x) )
{
float i,result,x;
for(i=a;i<=b;i++)
{
result+=(*p)(x);
}
return result;
printf("结果是: %3.3f",result);
}
展开
 我来答
freely_1985
推荐于2017-09-25 · TA获得超过1190个赞
知道小有建树答主
回答量:2807
采纳率:42%
帮助的人:441万
展开全部

对于一重定积分来说其求解可以使用梯形法进行求解,计算公式如下所示:

其中,f(x)为被积函数,为横坐标的两点间的间隔,越小,则计算出的结果越精确。

对于求解此类问题可以使用C语言中的回调函数编写通用的计算函数,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>

//功能:返回f(x)在积分区间[a,b]的值
//参数:FunCallBack 指向用于计算f(x)的函数
//      a  积分区间的起始值
//      b  积分区间的结束值
//      dx 横坐标的间隔数,越小计算结果越准确
double Calculate(double (*FunCallBack)(double x),
    double a,double b,double dx)
{
    double doui;
    double total = 0;        //保存最后的计算结果

    for (doui = a; doui <= b; doui += dx)
    {
        total += FunCallBack(doui)*dx;
    }
    return total;
}

double f2(double x)
{
    return x*x;
}

double f(double x)
{
    return x;
}

double f3(double x)
{
    return x*x*x ;
}

int main()
{
    double total;
    total = (Calculate(f, 2, 3, 0.000001));
    printf("total = %lf\n", total);

    total = (Calculate(f2, 2, 3, 0.000001));
    printf("total = %lf\n", total);

    total = (Calculate(f3, 2, 3, 0.000001));
    printf("total = %lf\n", total);

    return 0 ;
}
其中,函数f,f2,f3为自行编写的关于x的被积函数。
运行结果:
        total = 2.500000
        total = 6.333331
        total = 16.249991
544256444
推荐于2017-10-10 · TA获得超过200个赞
知道答主
回答量:202
采纳率:0%
帮助的人:123万
展开全部
float integral(float a,float b,float(*p)(float x) )
{
float i,result,x;
for(i=a;i<=b;i++)
{
result+=(*p)(x);
}
return result;
printf("结果是: %3.3f",result);
}

这里错了,return result;
printf("结果是: %3.3f",result);
换一个位置,return 就跳出函数了,不会打印出来
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9f97902
2012-12-18 · 贡献了超过118个回答
知道答主
回答量:118
采纳率:0%
帮助的人:26.7万
展开全部
哥们儿?你这代码能运行?我复制你的怎么不行呀?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hero273639463
2012-03-05
知道答主
回答量:9
采纳率:0%
帮助的人:12.2万
展开全部
我也没有试,就看了一下,上面的函数调用时,参数的定义在下面,没定义先用,不服合语法吧
更多追问追答
追问
没呢。。不过我在主函数那里声明了喔。。
追答
我的意思是,你的声明在下面,可上面调用的时候,参数还没声明啊,我是这个意思
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式