| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:C问题:积分问题
只看楼主 加入收藏
cuit
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-6-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
C问题:积分问题
谭的书上有这么一个题:用指针计算定积分(1+x),(2x+3),(e^x+1),(1+x)^2和x^3的定积分,积分限为(a,b)。小弟编程之后,发现结果总是不对,请大神帮助。程序如下:
/**********************************************************************
                                求函数定积分
**********************************************************************/
# include <stdio.h>
# include <math.h>
void main()
{
    float f1(float);  /*对5个定积分函数的申明*/
    float f2(float);
    float f3(float);
    float f4(float);
    float f5(float);
    float integral(float,float,int,float(*fun)(float));
    float a,b;
    int n;
    printf("积分下限 a为:\n");
    scanf("%f",&a);
    printf("积分上限b为:\n");
    scanf("%f",&b);
    printf("取间等分隔符n(尽可能的大):\n");
    scanf("%d",&n);
    printf("\n");

    printf("f1的");
    integral(a,b,n,f1);
    printf("\n");

    printf("f2的");
    integral(a,b,n,f2);
    printf("\n");

    printf("f3的");
    integral(a,b,n,f3);
    printf("\n");

    printf("f4的");
    integral(a,b,n,f4);
    printf("\n");

    printf("f5的");
    integral(a,b,n,f5);
    printf("\n");
}
float integral(float a,float b,int n,float (*fun)(float))  /*梯形法计算积分公式*/
{
    float h,result;
    float t;
//    const int n;
    int i;
    h=(b-a)/n;  /*步长计算*/
    t=(* fun)(a)/2+(* fun)(b)/2;
    for(i=1;i<=n;i++)
        result=(* fun)(a+i*h);
    result=h*(t+result);   /*梯形法*/
    printf("The result=%f\n",result);
}
float f1(float x)   /*积分函数为1+x*/
{
    float z;
    z=1+x;
    return(z);
}
float f2(float x)  /*积分函数为2x+2*/
{
    float z;
    z=(2*x+3);
    return(z);
}
float f3(float x)  /*积分函数为e^x+1*/
{
    float z;
    z=(float) exp(x)+1;
    return(z);
}
float f4(float x) /*积分函数为(1+x)^2*/
{
    float z;
    z=(1+x)*(1+x);
    return(z);
}
float f5(float x)  /*积分函数为x^3*/
{
    float z;
    z=x*x*x;
    return(z);
}
图片附件: 游客没有浏览图片的权限,请 登录注册

这结果也太水了3,
都不知道哪里出错了,谢谢指正。

[ 本帖最后由 cuit 于 2012-7-3 19:49 编辑 ]
搜索更多相关主题的帖子: void include 
2012-07-03 14:22
ly2222
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:217
专家分:618
注 册:2012-6-15
收藏
得分:10 
指针不太熟悉,帮你顶。
2012-07-03 21:19
q7408695
Rank: 2
等 级:论坛游民
帖 子:22
专家分:50
注 册:2011-8-2
收藏
得分:10 
程序代码:
# include <stdio.h>
# include <math.h>
void main()
{
    float f1(float);  /*对5个定积分函数的申明*/
    float f2(float);
    float f3(float);
    float f4(float);
    float f5(float);
    void integral(float,float,int,float(*fun)(float));
    float a,b;
    int n;
    printf("积分下限 a为:\n");
    scanf("%f",&a);
    printf("积分上限b为:\n");
    scanf("%f",&b);
    printf("取间等分隔符n(尽可能的大):\n");
    scanf("%d",&n);
    printf("\n");
    
    printf("f1的");
    integral(a,b,n,f1);
    printf("\n");
    
    printf("f2的");
    integral(a,b,n,f2);
    printf("\n");
    
    printf("f3的");
    integral(a,b,n,f3);
    printf("\n");
    
    printf("f4的");
    integral(a,b,n,f4);
    printf("\n");
    
    printf("f5的");
    integral(a,b,n,f5);
    printf("\n");
}
void integral(float a,float b,int n,float (*fun)(float))  /*梯形法计算积分公式*/
{
    float h;
    float result = 0.0;
    //    const int n;
    int i;
    h=(b-a)/n;  /*步长计算*/
    for(i=1;i<=n;i++)
        result+=(* fun)(a+i*h);
    result*=h;   /*梯形法*/
    printf("The result=%f\n",result);
}
float f1(float x)   /*积分函数为1+x*/
{
    float z;
    z=1+x;
    return(z);
}
float f2(float x)  /*积分函数为2x+2*/
{
    float z;
    z=(2*x+3);
    return(z);
}
float f3(float x)  /*积分函数为e^x+1*/
{
    float z;
    z=(float) exp(x)+1;
    return(z);
}
float f4(float x) /*积分函数为(1+x)^2*/
{
    float z;
    z=(1+x)*(1+x);
    return(z);
}
float f5(float x)  /*积分函数为x^3*/
{
    float z;
    z=x*x*x;
    return(z);
}
2012-07-04 09:28
cuit
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-6-30
收藏
得分:0 
回复 3楼 q7408695
呵呵,还是谢谢了,是我算法出问题了,找到了。
2012-07-04 21:00
快速回复:C问题:积分问题
数据加载中...
 
   



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

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