程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 利用C++求解一元二次方程

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

編輯:C++入門知識

題目:求解一元二次方程: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.編譯並運行程序。

 

運行結果:

 

         結果和計算的結果一樣,有了這樣的一個程序,我們以後解數學的一元二次方程就不愁了,只要把方程化成一般式,然後在程序中輸入相應參數就可快速得到答案了,雖然可以快速得到答案,但是還是不鼓勵一直用程序解方程,因為學習貴在理解解題的思路和解題過程,只有這樣才能有所感所悟,也會有所提高。

          當然這個程序設計的不是特別的好,但是為了具體設計項目的思路,所以做的復雜一點,貴在理解,謝謝,希望可以幫到你。順便祝你有個好心情。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved