/*题 目:编写利用矩形法计算定积分的通用函数。然后利用它分
别计算以下3个数学函数的定积分:
(1)f(x)=x*x-5*x+1
(2)f(x)=x*x*x+2*x*x-2*x+3
(3)f(x)=x/(2+x*x)
*/
//**********************************************************
#include < stdio.h >
//******求第一个公式的积分值******
double funtion1( double x )
{
double fx ;
fx = x * x - 5 * x + 1;
return fx ;
}
//******求第二个公式的积分值******
double funtion2( double x )
{
double fx ;
fx = x * x * x + 2 * x * x - 2 * x + 3 ;
return fx ;
}
//******求第三个公式的积分值******
double funtion3( double x )
{
double fx ;
fx = x / ( 2 + x * x ) ;
return fx ;
}
// 调用函数求通用积分公式
void def_integral( double x1,double x2,int n , double (*p)( double x ))
{
double y1,y2 ; //积分区间X1、X2对应的函数值
double per_len ,height ;
double area , fx = 0.0 ;
int i ;
per_len = ( x2 - x1 ) / n ; //等分成n分
y1 = (*p)( x1 ) ;
for( i = 1 ; i <= n ; i++ )
{
x2 = x1 + per_len ; //单位区间长度
y2 = (*p)(x2) ;
height = (y1 + y2 ) / 2.0 ; //高
area = per_len * height ; //每一等份长度对应的面积
x1 = x2 ; //下限右移
y1 = y2 ; //右移
fx = fx + area ; //面积之和为积分的值
}
printf("所求积分的值为:/n");
printf("%.3f/n" , fx ) ;
}
//*****主函数**************
void main()
{
double a,b; //a、b分别为积分区间的上下限
int n ; //n为要输入的等份 即 区间分成的份数
int selection ;
printf("请输入区间的等分数:/n");
scanf("%d" , &n );
printf("请输入积分区间的上下限(中间用空格隔开):/n");
scanf("%lf%lf", &a, &b );
printf("请输入你的选择(1、2、3):/n");
scanf("%d" , &selection );
if ( selection == 1 )
def_integral( a,b, n , funtion1 );
else if( selection == 2 )
def_integral( a,b, n , funtion2 );
else
def_integral( a,b, n , funtion3 );
}