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 编辑 ]