📄 sin.c
字号:
#include<stdio.h>
#include<math.h>
#define MAX 100
int examine(double a,double b,double e)//检查
{
if(a>=b)
{
printf("a应该小于b.");
return(0);
}
if(e<=0)
{
printf("精度应大于0.");
return(0);
}
return(1);
}
double calculate(double a,double b,double e)//计算积分
{
double t[MAX],T[MAX],h,hh,x,sum,e1;
int jj,m,i,j,j1,i1,q,q1;
h=b-a;
hh=h;
t[0]=0.5*h*(sin(a)+sin(b));
T[0]=t[0];
jj=1;
m=0;
for(i=2;i<=MAX;i++)
{
h=0.5*h;
x=a+h;
sum=0;
for(j=1;j<=jj;j++)
{
sum=sum+sin(x);
x=x+hh;
}
t[i-1]=0.5*t[i-2]+h*sum;//二分
q=1;
j1=i-1;
m=m+1;
for(j=1;j<=j1;j++)//加速
{
i1=i-j;
q=4*q;
q1=q-1;
t[i1-1]=(q/q1)*t[i1]-(1/q1)*t[i1-1];
}
T[m]=t[i1-1];
e1=fabs(T[m]-T[m-1]);//计算误差
if(e1<e)
return(T[m]);
jj=jj*2;
hh=h;
}
}
main()
{
double a,b,e,answer;
while(1)
{
printf("计算sinx在a,b上的积分.\n");
printf("a=?:\n");
scanf("%lf",&a);
printf("b=?:\n");
scanf("%lf",&b);
printf("精度e=?:\n");
scanf("%lf",&e);
if(examine(a,b,e))
{
answer=calculate(a,b,e);
printf("sinx在a,b上的积分:%lf\n\n",answer);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -