分析
假设有这样一个函数,我们要求它的面积(梯形法),我们把它分成n个小梯形 公式是:(上底+下底)*h/2 ; a0和a1组成一个梯形先一个一个的求出面积,最后在相加起来。 先根据x=(an-a0)/n 求出平均分了以后每一小块的梯形的高,再利用a0+x 求出每一小块的位置,根据位置可以利用函数公式y=x+b 求出底是多少,然后再与相邻一块的y结合求出面积,最后在全部面积一起相加。 好了,有理论我们开始实践。
题目是
编写一个函数fun,功能是用梯形法计算一元多项式 f(x) = x2 + 4 在区间 (a, b) 上的定积分 (0 < a < b) ,区间端点a和b作为fun的形参。主函数可以多次调用函数fun计算定积分,每次调用时从键盘输入区间端点a和b,将其作为实参。
#include <stdio.h>
#include <math.h>
int y(float x)
{
return pow(x, 2) + 4;
}
int fun(int a, int b)
{
float sd, xd;
float x;
int n = 4;
float sum = 0,sum1 = 0;
x = (b - a) / n;
for (int i = 0, j = 1; i < n; i++, j++)
{
sd = y(a + x * i);
xd = y(a + x * j);
sum1 = (sd + xd) * x / 2;
sum += sum1;
}
return sum;
}
int main()
{
int a, b;
float sum;
while (1)
{
printf("请输入一元多项式f(x) = x^2 + 4 在区间(a b)上的定积分(0 < a < b)(输入(0,0)结束)(请注意输入时用空格隔开):\n");
scanf("%d %d", &a, &b);
if (a == 0 && b == 0)
{
break;
}
sum = fun(a, b);
printf("一元多项式f(x) = x^2 + 4 在区间(%3d %3d)上的定积分为:%0.1f.\n", a, b, sum);
if (a == 0 && b == 0)
{
break;
}
}
return 0;
}
#if 0
b的上限是1844
#endif
虽然梯形分的越越准确,但是你输入的两对数相差太小的话,运算结果会一样。
|