例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+jdelta/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;
}
总结:
- 本例中的程序和算法有很强的对应关系。
- 由于c++中没有复数类型,所以程序中先计算复数的实部和虚部,在输出时构造复数形式。
- 程序中使用了if语句的嵌套。