实例(C++解一元二次方程)

例1:解一元二次方程

算法描述
输入a,b,c;
如果a=0,
如果b=0,输出“输出的系数不构成方程”;
否则(即b≠0)
计算单根x=-c/b
输出单根x

否则(即a≠0)
计算delta=bb-4ac
如果delta>0
delta=sqrt(delta)
输出x1=(-b+delta)/2a和x2=(-b-delta)/2a

否则
**delta=sqre(-delta)
输出复根:
x1=-b/2a+j
delta/2a
x2=-b/2a-j*delta/2a(注意:j为虚数单位)**
结束

源程序

#include<iostream>  //包含需要的头文件
#include<cmath>  //求根函数sqrt需要的头文件
using namespace std;   //名字空间
int main()  //主函数
{ double a,b,c;  //定义变量保存系数
double delta;    //表示根的判别式
double x,x1,x2;  //表示根
cout<<"请输入一元二次方程的三个系数a,b,c:";
cin>>a>>b>>c;  //输入一元二次方程的系数
if(a==0)  //二次项系数等于0
{if(b==0)  //一次项系数也为0,不是方程
 cout<<"输入的系数不构成方程"<<endl;}
 else    //二次项系数等于0,一次项系数不为0
 {x=-c/b;  //计算单根
 cout<<"实际为一元一次方程,根为"<<x<<endl;
 }
}
else //二次项系数不为0
{ delta=b*b-4.0*a*c; //计算判别式的值
if(delta>=0)  //判别式大于等于0,有实根
{delta=sqrt(delta); //判别式开方
x1=(-b+delta)/2.0/a; //根1
x2=(-b-delta)/2.0/a;  //根2
cout<<"方程有实根,它们是:"<<endl;
cout<<"x1="<<x1<<",x2="<<x2<<endl;
}
else   //判别式小于0,有复根
{ delta=sqrt(-delta)  //判别式变号开方
x1=-b/2.0/a;  //实部
x2=delta/2.0/a;  //虚部
cout<<"方程有复根,它们是:"<<endl;
cout<<"x1="<<x1<<"+j"<<x2<<",x2="<<x1<<"-j"<<x2<<endl;
 }
}
return 0;
}

总结:

  1. 本例中的程序和算法有很强的对应关系。
  2. 由于c++中没有复数类型,所以程序中先计算复数的实部和虚部,在输出时构造复数形式。
  3. 程序中使用了if语句的嵌套。

猜你喜欢

转载自blog.csdn.net/Yangye_1018/article/details/106590578
今日推荐