c语言用矩形法和梯形法求定积分

方法一:

#include<stdio.h>

#include<math.h>

 void jifen(float a,float b,double (*fun)(double))

{

    int i;

    double n=0.001,s=0.0,s1=0.0;

    double l=(b-a)/n;

    for(i=0;i<l;i++)

    {

        s=n*(*fun)(a+n*i)+s;

        s1=((*fun)(a+n*i)+(*fun)(a+n*(i+1)))*n/2+s1;

    }

   printf("用矩形法求得该函数在(%2.0f,%2.0f)上的积分为%f\n",a,b,fabs(s));

   printf("用梯形法求得该函数在(%2.0f,%2.0f)上的积分为%f\n\n",a,b,fabs(s1));

}

 

 void main()

{

 float m,n;

 double f1(double x);

 double f2(double x);

 double f3(double x);

 printf("请输入积分下限和上限:\n(注:此题目为下限小于上限,下限可以为负数!)\n");

 scanf("%f,%f",&m,&n);

 printf("1.sin函数:\n");

 jifen(m,n,f1);

 printf("2.cos函数:\n");

 jifen(m,n,f2);

 printf("3.exp函数:\n");

 jifen(m,n,f3);

 }

 double f1(double x)

 {

    return sin(x);

 }

 double f2(double x)

 {

    return cos(x);

 }

  double f3(double x)

 {

    return exp(x);

 }

 

方法二:

#include<stdio.h>

#include<math.h>

int main()

{

void integral(double a,double b,double (*fun)(double));

double f1(double x);

double f2(double x);

double f3(double x);

double f4(double x);

double f5(double x);

double f6(double x);

double f7(double x);

double f8(double x);

printf("please input 2 numbers:\n");

double a,b;

int n;

scanf("%lf,%lf",&a,&b);

printf("please choose 1,2,3,4,5,6,7or8:");

scanf("%d",&n);

if(n==1)       integral(a,b,f1);

else if(n==2)  integral(a,b,f2);

else if(n==3)  integral(a,b,f3);

else if(n==4)  integral(a,b,f4);

else if(n==5)  integral(a,b,f5);

else if(n==6)  integral(a,b,f6);

else if(n==7)  integral(a,b,f7);

else if(n==8)  integral(a,b,f8);

return 0;

}

void integral(double a,double b,double (*fun)(double))

{

    double m=(b-a)/100;

    double area=0;

    for(int i=0;i<100;i++)

    {

      area=m*(*fun)(a+m*i)+area;    

    }

    printf("%f\n",area);

}

 double f1( double x)

{

    return(x+1);

}

double f2(double x)

{

   return(2*x+3);

}

double f3(double x)

{

    return(1+exp(x));

}

double f4(double x)

{

    return((1+x)*(1+x));

}

double f5(double x)

{

    return(x*x*x);

}

double f6(double x)

{

    return(sin(x));

}

double f7(double x)

{

    return(cos(x));;

}

double f8(double x)

{

    return (exp(x));

}

方法三:

#include<stdio.h>

#include<math.h>

int main()

{

void integral(double a,double b,double(*fun)(double));

double f1(double );

double f2(double );

double f3(double );

double f4(double );

double f5(double );

double f6(double );

double f7(double );

double f8(double );

double a,b;

printf("Please enter a and b:");

scanf("%lf,%lf",&a,&b);

integral(a,b,f1);

integral(a,b,f2);

integral(a,b,f3);

integral(a,b,f4);

integral(a,b,f5);

integral(a,b,f6);

integral(a,b,f7);

integral(a,b,f8);

return 0;

}

void integral(double a,double b,double(*fun)(double))

{

double m,n=a;

double p[200];

for(int i=0;i<=100;i++,n=n+(b-a)/100)

p[i]=(*fun)(n);

m=0;

for(i=1;i<=100;i++)

m=m+(p[i-1]+p[i])*(b-a)/200;

printf("The integral is:%f\n",m);

}

double f1(double n)

{

    double e;

    e=n+1;

    return(e);

}

double f2(double n)

{

   double e;

   e=2*n+3;

   return(e);

}

double f3(double n)

{

   double e;

   e=exp(n)+1;

   return(e);

}

 

double f4(double n)

{

   double e;

   e=(1+n)*(1+n);

   return(e);

}

double f5(double n)

{

   double e;

   e=n*n*n;

   return(e);

}

double f6(double n)

{

  return sin(n);

}

double f7(double n)

{

  return cos(n);

}

double f8(double n)

{

  return exp(n);

}

转载于:https://www.cnblogs.com/Latent-Truth/p/3471868.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值