| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1463 人关注过本帖
标题:计算积分
取消只看楼主 加入收藏
夜泊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-20
结帖率:100%
收藏
 问题点数:0 回复次数:1 
计算积分
高等数学中的微积分实际为函数在区间[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位。
2016-12-21 17:56
夜泊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-20
收藏
得分:0 
#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编辑过]

2016-12-21 18:31
快速回复:计算积分
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051854 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved