注册 登录
编程论坛 C++教室

计算积分

夜泊 发布于 2016-12-21 17:56, 1610 次点击
高等数学中的微积分实际为函数在区间[x0,x1]上与坐标轴x形成的阴影面积大小,可以通过离散化为微小矩形逐渐逼近的方式去计算。试编程计算函数f(x)=ax4+bx3+cx2+dx+e 在区间[x0,x1]上的积分值。提示计算时将[x0,x1]区间等分为N个区间。从键盘输入参数a,b,c,d,e以及区间起点x0和终点x1,计算不同N=10,100,1000,10000…时的积分值,直到最后的积分值变化不超过前一个积分值的1%,输出最终积分值即可。

要求:键盘输入数据顺序依次为:a,b,c,d,e,x0,x1;   输出格式为精确到小数点后4位。
4 回复
#2
rjsp2016-12-21 18:18
哪里不会?(论坛禁止帮人做作业)
#3
夜泊2016-12-21 18:31
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
double f(double x,double a,double b,double c,double d,double e)
{
    return a*x*x*x*x+b*x*x*x+c*x*x+d*x+e;
}
double integ(long n,double x0,double x1,double a,double b,double c,double d,double e)
{
    double len=x1-x0,sum;
    long i;
    for(i=0;i<n;i++) sum=sum+f(x0+i/n*len,a,b,c,d,e);
    printf("%lf\n",sum*len/n);
    return sum*len/n;
}
main()
{
    double reslt,prev,x1,x0,a,b,c,d,e;
    long n=10;
    scanf("%lf,%lf,%lf,%lf,%lf,%lf,%lf",&a,&b,&c,&d,&e,&x0,&x1);
    reslt=(x1-x0)*f(x0,a,b,c,d,e);
    do{
        prev=reslt;
        reslt=integ(n,x0,x1,a,b,c,d,e);
        n=n*10;
    }while((fabs(reslt-prev)/prev)>0.01);
    printf("%.4lf\n",reslt);
}
输入0,0,0,1,0,10,12
标准答案是21.9800,但我的答案是22.2000

[此贴子已经被作者于2016-12-21 18:38编辑过]

#4
rjsp2016-12-21 21:51
错误太多了,sum赋初值了没?i/n是整型运算
明天再仔细看
#5
rjsp2016-12-22 08:43
改掉我在4楼说的错误就行了
其它错误,自己看着办吧
1