复化梯形公式重在理解梯形公式的概念,计算f(X)=
#include<stdio.h> //梯形公式
#include<math.h>
//#define f(x) (sin(x)/x)
double f(double x)
{
return x>0? (sin(x)/x):1;
}
int paw(int x,int y)
{
int i,a=1;
if(y==0)
return 1;
for(i=0;i<y;i++)
a=a*2;
return a;
}
int main()
{
int i,j,k,n;
double a,b,h,sum,x,tn[100],s[100];
printf("a=");scanf("%lf",&a);
printf("b=");scanf("%lf",&b);
printf("k=");scanf("%d",&k);
for(j=0;j<=k;j++)
{ n=paw(2,j);
h=(b-a)/n;x=a;sum=0;
for(i=1;i<n;i++)
{
x=x+h;
sum=sum+f(x);
}
tn[j]=(h/2)*(f(a)+f(b)+2*sum);
}
for(i=0;i<=k;i++)
printf("%d tn(%d)=%f\n",i,paw(2,i),tn[i]);
return 0;
}
这里有几点需要注意的地方,第一个就是公式里的x若为0,则需要返回1,还有就是math.h中的pow(,)里面的参数须为double,因此只能自己写一个pow函数
梯形图