九周任务5

/* (程序头部注释开始)  
* 程序的版权和版本声明部分  
* Copyright (c) 2011, 烟台大学计算机学院学生   
* All rights reserved.  
* 文件名称:                                
* 作    者: 白传雷               
* 完成日期:   2012   年  4 月  18   日  
* 版 本 号:   v1.0         
  
* 对任务及求解方法的描述部分  
* 输入描述:   
* 问题描述:设计一个一元一次方程类,求形如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):"<<endl;      
    cin>>e1;   //在两次测试中,分别输入3x-8=0和5s+18=0        
    cout<<"方程为:"<<e1;      
    cout<<"方程的解为:"<<e1.getUnknown()<<"="<<e1.Solve()<<endl; //对两次测试,分别输出x=...和s=...        
    e1.Solve();    
    cout<<"请输入一元一次方程(输入格式:3x-8=0):"<<endl;      
    cin>>e2;   //在两次测试中,分别输入3x-8=0和5s+18=0        
    cout<<"方程为:"<<e2;      
    cout<<"方程的解为:"<<e2.getUnknown()<<"="<<e2.Solve()<<endl; //对两次测试,分别输出x=...和s=...        
    e2.Solve();      
    system("pause");      
    return 0;      
}      


 

运行结果:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值