梯形法求函数积分

题目:

1
2
3
4
5
6
7
8

按如下函数原型,采用梯形法编程实现(分成100个小梯形,再求这100个梯形面积的和),在积分区间[a,b]内计算函数y1=∫(1+x*x)dx (从0积到1)和y2=∫x/(1+x*x)dx (从0积到3)的定积分。其中,指向函数的指针变量f用于接收被积函数的入口地址。

Integral(float (*f)(float), float a, float b);

**输出格式要求:"y1=%f\ny2=%f\n"


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<stdio.h>
//将两个积分函数运算写出
float func1(float x)
{
return 1+x*x;
}
float func2(float x)
{
return x/(1+x*x);
}
//运用梯形法求积分
float Integral(float (*f)(float), float a, float b)
{
float sum=0,h;
int i;
h=(a+b)/100;
for(i=0;i<100;i++)
{
sum+=(f(a+i*h)+f(a+(i+1)*h))*h/2;//上底加下底乘以高除以2
}
return sum;
}

int main()
{
float y1,y2;
y1=Integral(func1,0.0,1.0);
y2=Integral(func2,0.0,3.0);
printf("y1=%f\ny2=%f\n",y1,y2);
return 0;
}