第九周任務5

/* (程序頭部註釋開始) 
* 程序的版權和版本聲明部分 
* Copyright (c) 2011, 煙臺大學計算機學院學生  
* All rights reserved. 
* 文件名稱:                               
* 作    者:  王明星               
* 完成日期:   2012   年  4 月  17   日 
* 版 本 號:           
 
* 對任務及求解方法的描述部分 
* 輸入描述:  
* 問題描述:設計一個一元一次方程類,求形如ax+b=0的方程的解 
* 程序輸出:  
* 程序頭部的註釋結束 
*/  
  
#include "iostream"     
using namespace std;    
class CEquation    
{    
private:    
    double a;     // 未知數係數     
    double b;     // 常數項     
    char unknown; // 未知數的符號     
public:    
    CEquation(double aa=0,double bb=0);    
    friend istream &operator >> (istream &in,CEquation &e);    
    friend ostream &operator << (ostream &out,CEquation &e);    
    double Solve();    
    char getUnknown();    
};    
  
CEquation::CEquation(double aa,double bb):a(aa),b(bb){}    
  
// 輸入方程     
istream &operator >> (istream &in,CEquation &e)    
{    
    char ch1,ch2,ch3,ch4;    
    while(1)    
    {    
        cin>>e.a>>ch1>>ch2>>e.b>>ch3>>ch4;    
        if (ch1>='a' && ch1<='z')  
        {  
            if ((ch2=='+' || ch2=='-') && ch3=='=' && ch4=='0')  
            {  
                break;  
            }  
            cout<<"輸入的方程格式不符合規範,請重新輸入\n";   
        }  
    }    
    if (ch2=='-') e.b=-e.b;    
    e.unknown=ch1;    
    return in;    
}    
  
// 輸出方程     
ostream &operator << (ostream &out,CEquation &e)    
{    
    cout<<e.a<<e.unknown;    
    if (e.b>=0) cout<<"+";    
    cout<<e.b<<"=0"<<endl;    
    return out;    
}    
  
// 求解     
double CEquation::Solve()    
{    
    double x;    
    if (a==0)    
    {    
        if (b==0) cout<<"任意一個實數均爲方程的解。"<<endl;    
        else cout<<"方程無解。"<<endl;    
        return 0;    
    }    
    x=-b/a;    
    return x;    
}    
  
char CEquation::getUnknown()    
{    
    return unknown;    
}    
  
int main()    
{    
    CEquation e1,e2;    
    cout<<"請輸入一元一次方程(輸入格式:3x-8=0):";    
    cin>>e1;   //在兩次測試中,分別輸入3x-8=0和5s+18=0     
    cout<<"方程爲:"<<e1;    
    cout<<"方程的解爲:"<<e1.getUnknown()<<"="<<e1.Solve()<<endl; //對兩次測試,分別輸出x=...和s=...     
    e1.Solve();  
    cout<<"請輸入一元一次方程(輸入格式:3x-8=0):";    
    cin>>e2;   //在兩次測試中,分別輸入3x-8=0和5s+18=0     
    cout<<"方程爲:"<<e2;    
    cout<<"方程的解爲:"<<e2.getUnknown()<<"="<<e2.Solve()<<endl; //對兩次測試,分別輸出x=...和s=...     
    e2.Solve();    
    system("pause");    
    return 0;    
}    

上機感言:以後我不用爲不會解方程而發愁了!

發佈了59 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章