#include<stdio.h>
#include<math.h>
#define PI acos(-1)
int n;
double h;
double f(double x)
{
return sin(x);
}
double FT(double a,double b)
{
double ans,x;
int i;
for(ans=0,i=1;i<=n-1;i++)
{
x=a+i*h;
ans+=f(x);
}
ans=(ans*2+f(a)+f(b))*h/2.0;
return ans;
}
double FS(double a,double b)
{
double ans,x,xk;
int i;
x=a;xk=x+h/2;
ans=4*f(xk);
for(i=1;i<=n-1;i++)
{
x=x+h;
ans+=2*f(x);
xk=x+h/2.0;
ans+=4*f(xk);
}
ans+=f(a)+f(b);
ans=ans*h/6;
return ans;
}
double FC(double a,double b)
{
double ans,x,x1,x2,x3;
int i;
x=a;
x1=x+h/4;
x2=x+h/2;
x3=x+3*h/4;
ans=32*f(x1)+12*f(x2)+32*f(x3);
for(i=1;i<=n-1;i++)
{
x=x+h; ans+=14*f(x);
x1=x+h/4;
x2=x+h/2;
x3=x+3*h/4;
ans+=32*f(x1)+12*f(x2)+32*f(x3);
}
ans+=7*f(a)+7*f(b);
ans=ans*h/90.0;
return ans;
}
int main()
{
double a=0,b=PI/2.0;
double ft,fs,fc;
printf("输入区间划分数n:");
scanf("%d",&n);
h=(b-a)/n;
ft=FT(a,b);fs=FS(a,b);fc=FC(a,b);
printf("复化梯形求积=%lf:\n",ft);
printf("复化辛普森求积=%lf:\n",fs);
printf("复化科特斯求积=%lf:\n",fc);
return 0;
}