例1018 通用定积分函数 我们的思路是写出一个通用的定积分函数,要求解某个函数的定积分时,只要把上下限和函数地址传递给通用定积分函数就可以计算。
通用定积分思路:
1、用定积分定义的方式进行积分,即求曲边梯形的面积
2、将区间[a,b]进行n等均分,每一段的宽度为dx=(b - a)/n,高度为该点的函数值(*f)(x)
3、每一小段的面积为(*f)(x) * dx
4、进行求和
#include<stdio.h>
#include<math.h>
#define PI 3.1415926565897932384626
double Integral(double a, double b, double(*f)(double), int n = 10000)
{
//用定积分定义的方式进行积分,即求曲边梯形的面积
//将区间[a,b]进行n等均分,每一段的宽度为dx=(b - a)/n,高度为该点的函数值(*f)(x)
//每一小段的面积为(*f)(x) * dx
//进行求和
double x, dx = (b - a) / n, s = 0;
for (x = a; x < b; x = x + dx)
s = s + (*f)(x) * dx;
return s;
}
double f1(double x) //f1函数
{
return x + 2 - x * x;
}
double f2(double x) //f2函数
{
return sqrt(1 - x * x) + x;
}
double f3(double x) //f3函数
{
return sqrt(pow(4 - x * x, 3));
}
int main()
{
double a, b; //a,b分别为定积分的上限和下限
//Integral(-1, 2, f1),将上限-1,下限2,f1函数传递给Integral()函数
printf("∫f1(x)dx=%.2lf\n", Integral(-1, 2, f1)); //保留两位小数输出结果
printf("∫f2(x)dx=%.2lf\n", Integral(-1, 1, f2));
printf("∫f3(x)dx=%.2lf\n", Integral(-2, 2, f3));
printf("∫sin(x)dx=%.2lf\n", Integral(0, PI, sin));
return 0;
}