头文件
equation.h
#if ! defined(EQUATION_H)
#define EQUATION_H
#include <iostream>
#include <cmath>
using namespace std;
class FindRoot{
private :
float a,b,c,d;
double x1,x2;
public:
FindRoot(float x,float y,float z);
void Find();
void Display();
};
#endif
源文件
equation.cpp
#include "equation.h"
FindRoot :: FindRoot(float x ,float y , float z){
a=x;
b=y;
c=z;
d =b*b -4 * a * c;
}
void FindRoot :: 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(-b) / (2 * a);
}
}
void FindRoot :: Display() {
if(d > 0){
cout<<"X1="<<x1<<endl;
cout<<"X2="<<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;
return;
}
}
主函数
#include "equation.h"
void Read(float &, float & ,float &);
void main(){
cout<<"*==============================================================*"<<endl;
cout<<"**求解方程式ax2+bx+c =0 的根"<<endl;
cout<<"*==============================================================*"<<endl;
float a , b , c ;
for(;;){
Read(a , b, c);
if( a == 0){
return ;
}
FindRoot obj(a , b , c);
obj.Find();
obj.Display();
}
}
void Read(float &a ,float & b ,float & c){
cout<<"输入方程式系数a:";
cin>> a;
if(a == 0){
getchar();//消除回车影响
return;
}
cout<<"输入方程式系数b:";
cin>> b;
cout<<"输入方程式系数c:";
cin>> c;
}
测试
D:\C++WorkSpace\equation\Debug>equation.exe
*==============================================================*
**求解方程式ax2+bx+c =0 的根
*==============================================================*
输入方程式系数a:1
输入方程式系数b:-2
输入方程式系数c:1
X1=X2=1
输入方程式系数a:1
输入方程式系数b:-3
输入方程式系数c:2
X1=2
X2=1
输入方程式系数a:1
输入方程式系数b:3
输入方程式系数c:5
X1=-1.5+-1.#INDi
X2=-1.5--1.#INDi
输入方程式系数a:0