我用C++编了一个求一元二次方程的根的程序.但有错误,不会修改

#include"iostream.h"#include"math.h"classFindRoot{private:floata,b,c,d;doublex1,x2;pu... #include"iostream.h"
#include"math.h"

class FindRoot
{
private:
float a,b,c,d;
double x1,x2;
public
FindRoot(float x,float y,float z);
void Find();
void Display();
};

FindRoot::FindRoot(float x,float y,float z)
{
a=x;
b=y;
c=z;
d=b*b-4*a*c;
}

void FindRoot::Find()
{
if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(a*a);
return;
}
else if(d==0)
{
x1=x2=(-b)/(2*a);
return;
}
else
{
x1=(-b)/(2*a);
x2=sqrt(-d)/(2*a);
}
}

void FindRoot::Display()
{
if(d>0)
{
cout<<"x1="<<x1<<"\nx2="<<x2<<endl;
return;
}
else if(d==0)
{
cout<<"x1=x2="<<x1<<endl;
return;
}
else
{
cout<<"x1="<<x1<<'+'<<x2<<'i'<<endl;
cout<<"x2="<<x1<<'-'<<x2<<'i'<<endl;
}
}

void main()
{
float a,b,c;
cout<<"这是一个求方程ax2+bx+c=0的根的程序。"<<endl;
for(;;)
{
cout<<"输入方程系数a:";
cin>>a;
if(a==0)
{
getchar();
return;
}
cout<<"输入方程系数b:";
cin>>b;
cout<<"输入方程系数c:";
cin>>c;
FindRoot sbj(a,b,c);
obj.Find();
sbj.Display();
}
}
展开
 我来答
Bluegift
推荐于2016-07-19
知道答主
回答量:26
采纳率:0%
帮助的人:22.4万
展开全部
结构化编程方法:
//for two roots
#include <iostream.h>
#include <math.h>
int main()
{
double a,b,c,rp,ip;//方程系数
double x1,x2;//方程的根
double d;//根的判别式

cout<<"input a,b,c(方程系数):";
cin>>a>>b>>c;

if(a==0)
cout<<"这不是二元一次方程";
else
{
d = b * b - 4 * a * c;
if(d >= 0)
{
if (d==0)
{
x1 = -b / (2*a);

cout<<"只有一个实根:"<<x1<<endl;
}

else
{
x1 = ( -b + sqrt ( d ) ) / ( 2 * a );
x2 = ( -b - sqrt ( d ) ) / ( 2 * a );
cout<<"有二个实根:"<<x1<<"and"<<x2<<endl;
}
}
else
{rp = -d/(2*a);
ip = sqrt ( -d ) /(2*a);
x1 = rp + ip ;
x2 = rp - ip ;
cout<<"有二个虚根:"<<x1<<"i"<<"and"<<x2<<"i"<<endl;

}
}

return 0;

}

简单的类对象:
#include"iostream.h"
#include"math.h"

class FindRoot
{
private:
float a,b,c,d;
double x1,x2;
public:
FindRoot(float x,float y,float z);
void Find();
void Display();
};

FindRoot::FindRoot(float x,float y,float z)
{
a=x;
b=y;
c=z;
d=b*b-4*a*c;
}

void FindRoot::Find()
{
if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(a*a);
}
else if(d==0)
{
x1=x2=(-b)/(2*a);
}
else
{
double rp = -d/(2*a);
double ip = sqrt ( -d ) /(2*a);
x1=rp + ip;
x2=rp - ip;
}
}

void FindRoot::Display()
{
if(d>0)
{
cout<<"x1="<<x1<<"\nx2="<<x2<<endl;
}
else if(d==0)
{
cout<<"x1=x2="<<x1<<endl;
}
else
{
cout<<"x1="<<x1<<'i'<<endl;
cout<<"x2="<<x2<<'i'<<endl;
}
}

void main()
{
FindRoot obj(1,2,3);
obj.Find();
obj.Display();

}
百度网友3b56203
2007-10-31 · TA获得超过683个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:0
展开全部
我简单改了一小下,很多都是粗心的错误。你运行一下,应该好用了。
#include <iostream>
#include "math.h"
using namespace std;

class FindRoot
{
private:
float a,b,c,d;
double x1,x2;
public :
FindRoot(float x,float y,float z);
void Find();
void Display();
};

FindRoot::FindRoot(float x,float y,float z)
{
a=x;
b=y;
c=z;
d=b*b-4*a*c;
}

void FindRoot::Find()
{
if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(a*a);
return;
}
else if(d==0)
{
x1=x2=(-b)/(2*a);
return;
}
else
{
x1=(-b)/(2*a);
x2=sqrt(-d)/(2*a);
}
}

void FindRoot::Display()
{
if(d>0)
{
cout<<"x1="<<x1<<"\nx2="<<x2<<endl;
return;
}
else if(d==0)
{
cout<<"x1=x2="<<x1<<endl;
return;
}
else
{
cout<<"x1="<<x1<<'+'<<x2<<'i'<<endl;
cout<<"x2="<<x1<<'-'<<x2<<'i'<<endl;
}
}

int main()
{
float a,b,c;
cout<<"这是一个求方程ax2+bx+c=0的根的程序。"<<endl;
for(;;)
{
cout<<"输入方程系数a:";
cin>>a;
if(a==0)
{
getchar();
return 0;
}
cout<<"输入方程系数b:";
cin>>b;
cout<<"输入方程系数c:";
cin>>c;
FindRoot sbj(a,b,c);
sbj.Find();
sbj.Display();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ivaniren
2007-10-31 · TA获得超过1472个赞
知道小有建树答主
回答量:1088
采纳率:0%
帮助的人:0
展开全部
语法上的错误我就不说了 重要的是你定义的类的结构 和具体实现都有缺陷 数据成员的初始化用构造函数就可以了 建议你以后写程序把类的声明和实现分开 形成一个良好的风格
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yt...0@163.com
2007-10-31 · TA获得超过447个赞
知道小有建树答主
回答量:706
采纳率:0%
帮助的人:708万
展开全部
3个错误 :
1.要用getchar(),就要#include "stdio.h"
2.class FindRoot 里面的public后少了冒号
3.倒数第4行 obj.find(); 应该是sbj.find();

已在VC下测试通过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式