按如下函数原型,采用梯形法编程实现,在积分区间[a,b]内划分n个小区间,这里取n=100,计算函数y1=∫10(1+x2)dx和y2=∫30x1+x2dx的定积分。其中,指向函数的指针变量f用于接收被积函数的入口地址。
Integral( float (*f)( float ), float a, float b); #include <stdio.h>
float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);
int main()
{
float y1, y2;
y1 = Integral(Fun1, 0.0, 1.0);
y2 = Integral(Fun2, 0.0, 3.0);
printf("y1=%f\ny2=%f\n", y1, y2);
return 0;
}
/* 函数功能:计算函数1+x*x的函数值 */
float Fun1(float x)
{
return 1 + x * x;
}
/* 函数功能:计算函数x/(1+x*x)的函数值 */
float Fun2(float x)
{
return x / (1 + x * x);
}
/* 函数功能:用梯形法计算函数的定积分 */
float Integral(float (*f)(float), float a, float b)
{
float s, h;
int n = 100, i;
s = ((*f)(a) + (*f)(b)) / 2;
h = (b - a) / n;
for (i = 1; i < n; i++)
{
s += (*f)(a + i * h);
}
return s * h;
} |