您的位置:首页 > 编程语言 > C语言/C++

利用C++求解一元二次方程

2012-10-06 00:07 260 查看
题目:求解一元二次方程:ax²+bx+c=0 的解,其中a=1,b=-3,c=2.
分析:大家都知道一元二次方程的解有三种情况,即考虑Δ=(b²-4ac)的算术平方根,当Δ>0时,方程有两个不相等的实根x1=(-b+sqrt(d))/(2a);x2=(-b-sqrt(d))/(2a);当Δ=0时,方程有两个相等的实根x1=x2=(-b)/(2a);当Δ<0时,方程有两个不相等的虚根x1=(-b)/(2a),x2=sqrt(-d)/(2a)。

以上是我们解数学题的思路,可是如果我们用C++来解决一元二次方程组求解的问题该怎么处理呢?首先先要建立一个FindRoot类,并声明a,b,c,d四个float类型的数据成员,d代表Δ,方程的根x1,x2均声明成double类型,为了简单方便同时声明构造函数,程序的主函数进行参数准备并且进行求解和输出,下面是我做的FindRoot类UML图和obj对象UML图:



下面就介绍一下此程序在Visual C++ 6.0中的实现步骤和结果:

步骤:

1.建立一个名为equation的工程,即在project菜单栏中选择“Win32 Console Application“选项。

2.为工程添加一个头文件equation.h,声明FindRoot类并包含需要的头文件。

具体代码:

#if !defined(EQUATION_H)

#define EQUATION_H

#include<iostream>

#include<cmath>

using namespace std;

//声明FindRoot类

class FindRoot

{

private:

float a,b,c,d;

double x1,x2;

public:

FindRoot(float x,float y, float z);

void Find();

void Display();

};

#endif

3.为工程添加equation.cpp文件,在这个文件中实现FindRoot。



具体代码:



#include "equation.h"

//实现FindRoot类
FindRoot::FindRoot(float x,float y,float z) //构造函数

{

a=x;

b=y;

c=z;

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

}

void FindRoot::Find() //实现成员函数Find

{

if(d>0)

{

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

return;

}

else if(d==0)

{

x1=x2=(-b)/(2*a);

return;

}

else

{

x1=(-b)/(2*a);

x2=sqrt(-d)/(2*a);

}

}

void FindRoot::Display() //实现成员函数Display

{

if(d>0)

{

cout<<"x1="<<x1<<"\nx2="<<x2<<endl;

return;

}

else if(d==0)

{

cout<<"x1=x2="<<x1<<endl;

return;

}

else

{

cout<<"x1="<<x1<<"+"<<x2<<"i"<<endl;

cout<<"x2="<<x1<<"-"<<x2<<"i"<<endl;

}

}

4.为工程添加Find.cpp文件,并在文件中设计主函数对方程求解。



具体代码:



#include "equation.h"

void Read(float&,float&,float&); //参数使用对象引用方式

void main()

{

float a,b,c;

cout<<"这是一个求方程ax2+bx+c=0的根的程序。"<<endl;

for(;;) //循环求解

{

Read(a,b,c); //准备系数

if(a==0) return; //根据输入系数a决定是否结束for循环

FindRoot obj(a,b,c); //建立对象obj

obj.Find(); //求解

obj.Display(); //输出计算结果

}

}

void Read(float& a,float& b,float& c) //准备系数

{

cout<<"输入方程系数a:";

cin>>a;

if(a==0) //系数为零则退出Read函数

{

getchar(); //消除回车影响

return;

};

cout<<"输入方程系数b:";

cin>>b;

cout<<"输入方程系数c:";

cin>>c;

}

5.编译并运行程序。



运行结果:



结果和计算的结果一样,有了这样的一个程序,我们以后解数学的一元二次方程就不愁了,只要把方程化成一般式,然后在程序中输入相应参数就可快速得到答案了,虽然可以快速得到答案,但是还是不鼓励一直用程序解方程,因为学习贵在理解解题的思路和解题过程,只有这样才能有所感所悟,也会有所提高。

当然这个程序设计的不是特别的好,但是为了具体设计项目的思路,所以做的复杂一点,贵在理解,谢谢,希望可以帮到你。顺便祝你有个好心情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: