你好,能帮我看道程序题吗?谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/13 07:32:11
采用弦截法求一元n次方程发f(x)=0在区间[a,b](f(a)与f(b)异号)中的一个实根的算法如下:
(1)取两个不同的点x1和x2,若发f(x1)与f(x2)异号,则区间(x1,x2)必有一个实根。
(2)连接(x1,f(x1))和(x2,f(x2))的弦交于x轴的坐标点可用下式求出x=(x1f(x2)-x2f(x1))/(f(x2)-f(x1))
(3)若f(x)与f(x1)同号,则根必在区间(x,x2),将x作为新的x1;若f(x)与f(x2)同号,则根必在(x1,x),将x作为新的x2.
(4)重复步骤(2)-(3),直到|f(x)|<1.0E-6为止。此时x即为所求实根。
根据上述算法,定义求任意给定方程f(x)=0在区间【a,b】(f(a)与f(b)异号)的实根的抽象类。并由此抽象类派生出一个求解方程x*x*x-5*x*x+16*x-80=0实根的新类,最终求解方程x*x*x-5*x*x+16*x-80=0在【4.5,5.5】间的实根。
#include <iostream>
#include <cmath>
using namespace std;

class chord{
protected:
float a,b;
public:
chord(float a,float b)
{this->a=a;this->b=b;}
virtual float f(float x)=0;
float key(void);
void Show(char* str)
{cout<<"函数f(x)="<<str<<"在["<<a<<','<<b<<"]上的解为:"<<key()<<endl;
}
};

float chord::key(void)
{float x1=a,x2=b,

继承类中的构造函数貌似要重写。定义虚函数就好了。

class chordf1:public chord{
public:
chordf1(float a,float b)
{
this->a=a;
this->b=b;
}
float f(float x)
{
return (x*x*x-5*x*x+16*x-80);
}
};

int main(void)
{chord* p=new chordf1(4.5,5.5); //指针类型不匹配 chordf1 *p=....
p->Show("x*x*x-5*x*x+16*x-80");
delete p;
return 0;
}

来自:求助得到的回答