欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言上机题 梯形法求积分

程序员文章站 2024-02-02 22:06:28
...

题目描述
求cosx,sinx,2x+1在[a,b]区间内的定积分,a、b的值从键盘输入。

① 编写求定积分通用函数double integral(double a,double b,long n,double (*p)(double)),形参a、b为积分区间,n为区间[a,b]等分数,p指向被积函数。用梯形法计算p指向的函数在[a,b]的定积分近似值,返回计算结果。
② 编写main函数,从键盘输入积分区间及等分数目,调用f函数求3个函数定积分的近似值。

提示,函数调用形式为integral(a,b,n,cos)
输入
a=XXX,b=XXX,n=XXX
输出
integral cos: XXX
integral sin: XXX
integral 2x+1: XXX
保留6位小数

#include <stdio.h>
#include <math.h>
double  integral(double a,double b,long n,double (*p)(double));
double th(double x);
int main(void)
{
	double a,b,y;
	long n;
	double (*p)(double);
	scanf("a=%lf,b=%lf,n=%ld",&a,&b,&n);
	p=cos;
	y=integral(a,b,n,*p);
	printf("integral cos:%.6lf\n",y);
	p=sin;
	y=integral(a,b,n,*p);
	printf("integral sin:%.6lf\n",y);
	p=th;
	y=integral(a,b,n,*p);
	printf("integral 2x+1:%.6lf",y);
}
double  integral(double a,double b,long n,double (*p)(double))
{
	double h,s,x;
	int i;
	h=(b-a)/n;
	s=(p(a)+p(b))/2;
	x=a;
	for(i=1;i<n;i++)
	{
		x+=h;
		s+=p(x);
	}
	return s*h;
}
double th(double x)
{return 2*x+1;}