第九周任务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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章