題目:求解一元二次方程: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.編譯並運行程序。
運行結果:
結果和計算的結果一樣,有了這樣的一個程序,我們以後解數學的一元二次方程就不愁了,只要把方程化成一般式,然後在程序中輸入相應參數就可快速得到答案了,雖然可以快速得到答案,但是還是不鼓勵一直用程序解方程,因為學習貴在理解解題的思路和解題過程,只有這樣才能有所感所悟,也會有所提高。
當然這個程序設計的不是特別的好,但是為了具體設計項目的思路,所以做的復雜一點,貴在理解,謝謝,希望可以幫到你。順便祝你有個好心情。