
C语言编程:求cosx sinx 2x+1 在(a,b)的定积分 ab的值从键盘输入。(1)编写求
C语言编程:求cosxsinx2x+1在(a,b)的定积分ab的值从键盘输入。(1)编写求定积分通用函数doubleintegral(doublea,doubleb,lo...
C语言编程:求cosx sinx 2x+1 在(a,b)的定积分 ab的值从键盘输入。(1)编写求定积分通用函数double integral(double a,double b,long n,double(*p),(double)),形参ab为积分区间,n为区间ab的等分数,p指向被积函数。用梯形法计算p指向的函数在(a,b)的定积分近似值,返回计算结果。(2)编写main函数,从键盘输入积分区间及等分数目,调用f函数求三个函数定积分的近似值。
展开
展开全部
楼上那个不是函数指针的啦,看这个
#include<stdio.h>
#include<math.h>
double cosx(double x);
double sinx(double x);
double line(double x);
double integral(double a, double b, double (*p)(double), double n);
int main()
{
printf("%lf\n",integral(1,2,&cosx,100));
printf("%lf\n",integral(2,3,&sinx,100));
printf("%lf\n",integral(3,4,&line,100));
return 0;
}
double integral(double a, double b, double (*p)(double), double n)
{
double step=(b-a)/n;
double sum=0;
for(double i=a;i<=b-step;i+=step)
{
sum+=0.5*step*(p(i+step)+p(i));
}
return sum;
}
double cosx(double x)
{
return cos(x);
}
double sinx(double x)
{
return sin(x);
}
double line(double x)
{
return (double)2*x+1;
}
#include<stdio.h>
#include<math.h>
double cosx(double x);
double sinx(double x);
double line(double x);
double integral(double a, double b, double (*p)(double), double n);
int main()
{
printf("%lf\n",integral(1,2,&cosx,100));
printf("%lf\n",integral(2,3,&sinx,100));
printf("%lf\n",integral(3,4,&line,100));
return 0;
}
double integral(double a, double b, double (*p)(double), double n)
{
double step=(b-a)/n;
double sum=0;
for(double i=a;i<=b-step;i+=step)
{
sum+=0.5*step*(p(i+step)+p(i));
}
return sum;
}
double cosx(double x)
{
return cos(x);
}
double sinx(double x)
{
return sin(x);
}
double line(double x)
{
return (double)2*x+1;
}
展开全部
#include
#include
void main()
{
int i,n=1000;
float a,b,h,t1,t2,s1,s2,x;
printf("请输入积分限a,b:");
scanf("%f,%f",&a,&b);
h=(b-a)/n;
for(s1=0,s2=0,i=1;i<=n;i++)
{
x=a+(i-1)*h;
t1=(float)exp(-x*x/2);t2(float)=exp(-(x+h)*(x+h)/2);
s1=s1+t1*h; /*矩形面积累加*/
s2=s2+(t1+t2)*h/2; /*梯形面积累加*/
}
printf("矩形法算得积分值:%f.\n",s1);
printf("梯形法算得积分值:%f.\n",s2);
}
程序运行结果如下:
矩形法算得积分值:0.855821
梯形法算得积分值:0.855624
由上面的比较可知,梯形法的精度要高于矩形法。
例二 求函数f(x)=x*x+2*x+1在【0,2】上的定积分。
#include<stdio.h>
main()
{ double s=0,h,a,b,f0,f1,n;
int i;
printf("Enter n,a,b:");
scanf("%lf,%lf,%lf",&n,&a,&b);
h=(b-a)/n;
f0=a*a+2*a+1;
for(i=1;i<=n;i++)
{ a=a+h;
f1=a*a+2*a+1;
s+=(f0+f1)*h/2;
f0=f1;
}
printf("sum is %f",s);
}
你参考下这个程序
#include
void main()
{
int i,n=1000;
float a,b,h,t1,t2,s1,s2,x;
printf("请输入积分限a,b:");
scanf("%f,%f",&a,&b);
h=(b-a)/n;
for(s1=0,s2=0,i=1;i<=n;i++)
{
x=a+(i-1)*h;
t1=(float)exp(-x*x/2);t2(float)=exp(-(x+h)*(x+h)/2);
s1=s1+t1*h; /*矩形面积累加*/
s2=s2+(t1+t2)*h/2; /*梯形面积累加*/
}
printf("矩形法算得积分值:%f.\n",s1);
printf("梯形法算得积分值:%f.\n",s2);
}
程序运行结果如下:
矩形法算得积分值:0.855821
梯形法算得积分值:0.855624
由上面的比较可知,梯形法的精度要高于矩形法。
例二 求函数f(x)=x*x+2*x+1在【0,2】上的定积分。
#include<stdio.h>
main()
{ double s=0,h,a,b,f0,f1,n;
int i;
printf("Enter n,a,b:");
scanf("%lf,%lf,%lf",&n,&a,&b);
h=(b-a)/n;
f0=a*a+2*a+1;
for(i=1;i<=n;i++)
{ a=a+h;
f1=a*a+2*a+1;
s+=(f0+f1)*h/2;
f0=f1;
}
printf("sum is %f",s);
}
你参考下这个程序
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询