if(!a)
{
throw"boy~这个是一元一次方程,自己去解!";
}
接下来便是Δ\DeltaΔ的判断,根据高中的数学知识我们可以知道Δ=b2−4ac{\Delta}=b^2-4acΔ=b2−4ac
如果Δ{\Delta}Δ>0,那么该方程有两个实数根,我们假定这两个实数根为x1x_1x1、x2x_2x2(x1<x2{x_1}{<}{x_2}x1<x2)
则易知:x1=−b−b2−4ac2a{x_1}{=}{\frac{-b-{\sqrt{b^2-4ac}}}{2a}}x1=2a−b−b2−4acx2=−b+b2−4ac2a{x_2}{=}{\frac{-b+{\sqrt{b^2-4ac}}}{2a}}x2=2a−b+b2−4ac
如果Δ\DeltaΔ=0,那么该方程有两个相等的实数根,我们假定这两个实数根为x1x_1x1、x2x_2x2(x1=x2{x_1}{=}{x_2}x1=x2)
则易知:x1=x2=−b2a{x_1}{=}{x_2}{=}{\frac{{-}{b}}{2a}}x1=x2=2a−b
如果Δ\DeltaΔ<0,则说明该一元二次方程存在两个虚数根,我们假定它们分别是x1x_1x1和x2x_2x2
由公式可知x1=−b−(b2−4ac)i2a{x_1}{=}{\frac{{-b}{-}{(\sqrt{b^2-4ac}){\mathcal{i}}}}{2a}}x1=2a−b−(b2−4ac)ix2=−b+(b2−4ac)i2a{x_2}{=}{\frac{{-b}{+}{(\sqrt{b^2-4ac}){\mathcal{i}}}}{2a}}x2=2a−b+(b2−4ac)i
以上我们就列举处理,编写这个小程序所需要的全部的数学知识。那么接下来就是分别设计出对应的算法来解决它们。
首先来计算判别式Δ\DeltaΔ
#include
#include
double Get_Delta(double,double,double);
double Get_Delta(double a,double b,double c)
{
double Delta;
Delta=b*b-4*a*c;
return Delta;
}
case 1:(Δ>0\Delta>0Δ>0)
#include
#include
using namespace std;
double Get_Delta(double, double, double);
double Get_Delta(double a, double b, double c)
{
double Delta;
Delta = b * b - 4 * a * c;
return Delta;
}
void case_1(double,double,double,double);
void case_1(double a,double b,double c,double Delta)
{
double x_1,x_2;
x_1=((-b-sqrt(Delta))/(2*a));
x_2=((-b+sqrt(Delta))/(2*a));
cout<<"判别式大于零,包含有两个不同的实数根,这里将它们分别命名为x1、x2,(x1<x2)";
cout<<endl;
cout<<"它们的值分别是"<<x_1<<" "<<x_2<<endl;
cout<<"计算完成"<<endl;
}
case 2:(Δ=0\Delta=0Δ=0)
#include
#include
using namespace std;
void case_2(double,double,double,double);
double Get_Delta(double,double,double);
double Get_Delta(double a,double b,double c)
{
double Delta;
Delta=b*b-4*a*c;
return Delta;
}
void case_2(double a,double b,double c,double Delta)
{
double x_1,x_2;
x_1=((-b-sqrt(Delta))/(2*a));
x_2=x_1;
cout<<"判别式等于零,包含有两个相同的实数根,这里将它们分别命名为x1、x2,(x1=x2)"<<endl;
cout<<"它们分别是"<<x_1<<" "<<x_2<<endl;
cout<<"计算完成"<<endl;
}
case 3:(Δ<0\Delta<0Δ<0)
由于这里用到了虚数我们需要定义一下虚数类随后直接在主函数内调用。
// 建立在Δ<0的前提下
#include
#include
using namespace std;
class Imaginary_number
{
private:
double real,imaginary;
public:
Imaginary_number(double,double);
void Display();
};
Imaginary_number::Imaginary_number(double real,double imaginary)
{
this->real=real;
this->imaginary=imaginary;
}
void Imaginary_number::Display()
{
if(imaginary==0)
cout<<real<0)
cout<<real<<"+"<<imaginary<<" ";
else
cout<<real<<imaginary<>a>>b>>c)
{
//这里假定已经知道了是第三种情况
double Delta=Get_Delta(a, b, c);
double real=Get_real(a,b);
double imag_1=Get_imaginary_1(a,b,c,Delta);
double imag_2=Get_imaginary_2(a,b,c,Delta);
Imaginary_number x1(real,imag_1);
Imaginary_number x2(real,imag_2);
x1.Display();
x2.Display();
}
return 0;
}
综上,我们已经完成了建立该程序,现在将他们综合到一起
#include
#include
using namespace std;
//以下列举出了所有的自定义函数
double Get_Delta(double, double, double);
void case_1(double, double, double, double);
void case_2(double, double, double, double);
double Get_real(double, double);
double Get_imaginary_1(double, double, double, double);
double Get_imaginary_2(double, double, double, double);
//一下是它们的定义和虚数类的定义
double Get_Delta(double a, double b, double c)
{
double Delta;
Delta = b * b - 4 * a * c;
return Delta;
}
void case_1(double a, double b, double c, double Delta)
{
double x_1, x_2;
x_1 = ((-b - sqrt(Delta)) / (2 * a));
x_2 = ((-b + sqrt(Delta)) / (2 * a));
cout << "判别式大于零,包含有两个不同的实数根,这里将它们分别命名为x1、x2,(x1<x2)";
cout << endl;
cout << "它们的值分别是" << x_1 << " " << x_2 << endl;
cout << "计算完成" << endl;
}
void case_2(double a, double b, double c, double Delta)
{
double x_1, x_2;
x_1 = ((-b - sqrt(Delta)) / (2 * a));
x_2 = x_1;
cout << "判别式等于零,包含有两个相同的实数根,这里将它们分别命名为x1、x2,(x1=x2)" << endl;
cout << "它们分别是" << x_1 << " " << x_2 << endl;
cout << "计算完成" <real = real;
this->imaginary = imaginary;
}
void Imaginary_number::Display()
{
if (imaginary == 0)
cout << real < 0)
cout << real << "+" << imaginary <<"i"<< " ";
else
cout << real << imaginary <<"i"<> a >> b >> c)
{
Delta = Get_Delta(a, b, c);
try
{
if (a == 0) throw "请输入一元二次方程";
else
if (Delta > 0)
{
case_1(a, b, c, Delta);
}
else
if (Delta == 0)
{
case_2(a, b, c, Delta);
}
else
if (Delta < 0)
{
double real;
double imag_1, imag_2;
real = Get_real(a, b);
imag_1 = Get_imaginary_1(a, b, c, Delta);
imag_2 = Get_imaginary_2(a, b, c, Delta);
Imaginary_number x_1(real, imag_1);
Imaginary_number x_2(real, imag_2);
x_1.Display();
x_2.Display();
}
}
catch (char* Debug) { cout << Debug << endl; }
}
return 0;
}
虚数较大时有几率出现bug,本人有时间会修改的,请等待~