21xrx.com
2024-12-22 20:56:21 Sunday
登录
文章检索 我的文章 写文章
在C++中如何求解一元二次方程的虚数根?
2023-07-09 20:10:34 深夜i     --     --
C++ 一元二次方程 虚数根 求解 程序实现

一元二次方程是数学中常见且重要的一个分支。在C++编程中,求解一元二次方程的实数根是一个非常简单的任务,只需要将公式实现即可。但是,当一元二次方程没有实数根时,需要求解虚数根,这就需要我们深入思考和了解一些复数的概念和运算法则。

如果一元二次方程ax^2+bx+c=0没有实数根,则它的解为:

x1= (-b + sqrt(b^2-4ac) * i) / 2a

x2= (-b - sqrt(b^2-4ac) * i) / 2a

其中i是虚数单位,i^2=-1。可以看出,求解虚数根需要利用到sqrt()函数,由于虚数具有实部和虚部两个部分,因此需要创建一个复数类来表示虚数,并且在实现这个类时需要对加减乘除等运算符进行重载。

下面是一个示例代码,该代码实现了一个复数类,并使用该类进行求解一元二次方程的虚数根:

 c++

#include <iostream>

#include <cmath>

using namespace std;

class Complex{

  double real; //实部

  double imag; //虚部

public:

  Complex(double r=0,double i=0)

    real=r;

    imag=i;

  

  //重载加法运算符

  Complex operator +(Complex c2){

    return Complex(real+c2.real,imag+c2.imag);

  }

  //重载减法运算符

  Complex operator -(Complex c2){

    return Complex(real-c2.real,imag-c2.imag);

  }

  //重载乘法运算符

  Complex operator *(Complex c2){

    return Complex(real*c2.real-imag*c2.imag,real*c2.imag+imag*c2.real);

  }

  //重载除法运算符

  Complex operator /(Complex c2){

    double r=c2.real*c2.real+c2.imag*c2.imag;

    return Complex((real*c2.real+imag*c2.imag)/r,(imag*c2.real-real*c2.imag)/r);

  }

  //求模长

  double mod(){

    return sqrt(real*real+imag*imag);

  }

  //重载输出运算符

  friend ostream& operator <<(ostream& os,Complex& c){

    os<<c.real<<"+"<<c.imag<<"i";

    return os;

  }

};

int main(){

  double a,b,c; //方程的系数

  double delta; //判别式

  Complex x1,x2; //方程的解

  cout<<"请输入方程的系数:";

  cin>>a>>b>>c;

  delta=b*b-4*a*c;

  //没有实数根

  if(delta<0){

    x1=Complex(-b/(2*a),sqrt(-delta)/(2*a));

    x2=Complex(-b/(2*a),-sqrt(-delta)/(2*a));

    cout<<"方程的虚数根为:"<<x1<<","<<x2<<endl;

  }

  //有实数根

  else{

    x1=Complex((-b+sqrt(delta))/(2*a),0);

    x2=Complex((-b-sqrt(delta))/(2*a),0);

    cout<<"方程的实数根为:"<<x1<<","<<x2<<endl;

  }

  return 0;

}

在以上的代码中,Complex类的各个成员函数实现了复数的加减乘除等运算,这使得在求解虚数根的过程中变得尤为方便。在main函数中,通过判断判别式delta的值,来选择输出虚数根或者实数根。当delta小于0时,使用Complex类计算虚数根,并输出;当delta大于等于0时,计算实数根并输出。

综上所述,求解一元二次方程的虚数根在C++编程中并不是一个令人望而生畏的难题。我们可以利用复数类,重载运算符等技术,将它们演绎出来。在实际工作或者学习中,我们要多加训练和思考,以使我们更加熟练的掌握这一技巧。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复