C++解一元次方程

来源:百度知道 编辑:UC知道 时间:2024/09/12 20:44:10
这个可以解出来
#include<iostream.h>
#include<math.h>
#include<windows.h>
void main()
{
double i,a,b,c,real,image,x1,x2,test;
char con;
do
{
cout<<"请输入二次项系数a:"<<endl;
cin>>a;
cout<<"请输入一次项系数b:"<<endl;
cin>>b;
cout<<"请输入常数项c:"<<endl;
cin>>c;
test=b*b-4*a*c;
if(test>=0)
{
x1=(-b+sqrt(test))/(2*a);
x2=(-b-sqrt(test))/(2*a);
if(x1==x2)
{
cout<<"此方程的根为重根:"<<"x="<<x1<<endl;system("pause");}
else
{
cout<<"方程的第一个根为:"<<"x1="<<x1<<endl<<"方程的第二个根为:"<<"x2="<<x2<<endl;system("pause");}
}
else
{
real=-b/(2*a);
image=sqrt(-test)/(2*a);
c

在定义类的时候,它会先调用构造函数,因为在C++里规定,创建一个类对象的时候就必须要初始化,然而你写的构造函数第一句就是d = b*b-4*a*c, a,b,c三个数还并没有赋值,所以结果是错的
把构造函数里的内容和input里的内容换一下就对了

#include"iostream.h"
#include"math.h"

class FindRoot
{
public:
float a,b,c,d;
double x1,x2;
FindRoot();
void disp();
void input();
};
void FindRoot::input()
{
d=b*b-4*a*c;
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;
}
}

FindRoot::FindRoot()
{
cout<<"请输入二次项系数a:"<<endl;
cin>>a;
cout<<"请输入一次项系数b:"<<endl;
cin>>b;
cout<<"请输入常数项c:"<<endl;
cin>>