c语言中用梯形法求定积分

分析

在这里插入图片描述
假设有这样一个函数,我们要求它的面积(梯形法),我们把它分成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;//假设平均分为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

虽然梯形分的越越准确,但是你输入的两对数相差太小的话,运算结果会一样。

  • 12
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值