第八章 例8.6

/* 用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根 */

#include <stdio.h>
#include <math.h>

float f(float x)					/* 定义f函数,实现f(x)=x^3-5x^2+16x-80 */
{
	float y;
	y = ((x - 5.0) * x + 16.0) * x -80;

	return y;
}

float xpoint(float x1, float x2)	/* 定义xpoint函数,求弦与x轴的交点 */
{
	float y;
	y = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1));

	return y;
}

float root(float x1, float x2)		/* 定义root函数,求近似根 */
{
	float x, y, y1;
	y1 = f(x1);
	do
	{
		x = xpoint(x1, x2);
		y = f(x);
		if(y * y1 > 0)
		{
			y1 = y;
			x1 = x;
		}
		else
			x2 = x;
	}
	while(fabs(y) >= 0.000001);

	return x;
}

int main()
{
	float x1, x2, f1, f2, x;
	do
	{
		printf("Please input x1, x2:\n");
		scanf_s("%f,%f", &x1, &x2);
		f1 = f(x1);
		f2 = f(x2);
	}
	while(f1 * f2 >= 0);
	x = root(x1, x2);
	printf("A root of equation is%8.4f\n\n", x);
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值