您的位置:首页 > 编程语言 > PHP开发

第九周实验报告3

2012-04-16 19:14 260 查看
/* (程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2011, 烟台大学计算机学院学生 

* All rights reserved.

* 文件名称: 分数类中的运算符重载 

* 作 者: 于宸

* 完成日期: 2012 年 04 月 16 日

* 版 本 号: V.1.0

* 对任务及求解方法的描述部分

* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的
* 加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
* 程序头部的注释结束

#include<iostream>      
using namespace std;    
    
class CFraction    
{    
private:    
    int nume;  // 分子   
  
    int deno;  // 分母   
  
public:    
    CFraction(int nu = 1,int de = 2);   //构造函数,初始化用   
  
  
    friend istream& operator >> (istream&,CFraction&);//声明重载运算符“>>”函数   
  
    friend ostream& operator << (ostream&,CFraction&);//声明重载运算符“<<”函数
  
  
    void Simplify();                //化简(使分子分母没有公因子)   
  
    void S_Simplify();              //化简(以4/3为例,输出1(1/3),表示一又三分之一)   
  
    void output(int style);         //输出:以8/6为例,style为0时,输出8/6;   
  
                                    //style为1时,输出4/3;   
  
                                    //style为2时,输出1(1/3),表示一又三分之一;   
  
                                    //不给出参数和非1、2,认为是方式0   
  
    
    CFraction operator+(CFraction &CF2); //定义分数加法   
  
    CFraction operator-(CFraction &CF2); //定义分数减法   
  
    CFraction operator*(CFraction &CF2); //定义分数乘法   
  
    CFraction operator/(CFraction &CF2); //定义分数除法   
  
    
    CFraction operator-();//取反   
  
    
    //比较大小      
    bool operator > (CFraction &CF2);    
    bool operator < (CFraction &CF2);    
    bool operator >= (CFraction &CF2);    
    bool operator <= (CFraction &CF2);    
    bool operator == (CFraction &CF2);    
    bool operator != (CFraction &CF2);    
};    
    
//构造函数,初始化用      
CFraction::CFraction(int nu,int de)    
{    
    nume = nu;    
    deno = de;    
}    
    
//输出分数      
ostream& operator << (ostream& output,CFraction& CF)  
{    
    cout << CF.nume << "/" << CF.deno;  
    return output;  
}    
    
//按照"nu/de"的格式,如"5/2"的形式输入      
istream& operator >> (istream& input,CFraction& CF)  
{    
    char b;    
    cout << "请输入分数(按照“a/b”形式输入):" << endl;    
    input >> CF.nume >> b >> CF.deno;    
    return input;  
}    
    
//化简(使分子分母没有公因子)      
void CFraction::Simplify()    
{    
    for(int i = 2;i <= nume && i <= deno;i++)    
    {    
        if(nume % i == 0 && deno % i == 0)    
        {    
            nume = nume/i;    
            deno = deno/i;    
            i--;    
        }    
    }    
    
    cout << (*this) << endl;    
}    
    
//化简(以4/3为例,输出1(1/3),表示一又三分之一)   
  
void CFraction::S_Simplify()    
{    
    for(int i = 2;i <= nume && i <= deno;i++)    
    {    
        if(nume % i == 0 && deno % i == 0)    
        {    
            nume = nume/i;    
            deno = deno/i;    
            i--;    
        }    
    }    
    
    if(nume >= deno)    
    {    
        int n;    
    
        n = nume / deno;    
        nume = nume % deno;    
        cout << n << "(" << (*this) << ")" << endl;    
    }    
    else    
    {    
        cout << (*this);    
    }    
    
}    
//输出:以8/6为例,style为0时,输出8/6;      
//style为1时,输出4/3;      
//style为2时,输出1(1/3),表示一又三分之一;      
//不给出参数和非1、2,认为是方式0   
  
void CFraction::output(int style)    
{    
    if(style == 1)    
    {    
        CFraction::Simplify();    
    }    
    else if(style == 2)    
    {    
        CFraction::S_Simplify();    
    }    
    else    
    {    
        cout << (*this) << endl;    
    }    
}    
    
//定义分数加法      
CFraction CFraction::operator+(CFraction &CF2)    
{    
    nume = nume * CF2.deno + CF2.nume * deno;    
    deno = deno * CF2.deno;    
    return (*this);    
}    
    
//定义分数减法      
CFraction CFraction::operator-(CFraction &CF2)    
{    
    nume = nume * CF2.deno - CF2.nume * deno;    
    deno = deno * CF2.deno;    
    return (*this);    
}    
    
//定义分数乘法      
CFraction CFraction::operator*(CFraction &CF2)    
{    
    nume = nume * CF2.nume;    
    deno = deno * CF2.deno;    
    return (*this);    
}    
    
//定义分数除法      
CFraction CFraction::operator/(CFraction &CF2)    
{    
    nume = nume * CF2.deno;    
    deno = deno * CF2.nume;    
    return (*this);    
}    
//取反      
CFraction CFraction::operator-()    
{    
    nume = - nume;    
    deno = deno;    
    return (*this);    
}    
    
//比较大小      
bool CFraction::operator > (CFraction &CF2)       
{      
    nume = nume * CF2.deno;    
    CF2.nume = CF2.nume * deno;    
    
    if( nume  > CF2.nume )      
    {      
        return true;      
    }      
    else      
    {      
        return false;      
    }      
}     
     
bool CFraction::operator < (CFraction &CF2)       
{      
    nume = nume * CF2.deno;    
    CF2.nume = CF2.nume * deno;    
    
    if( nume  < CF2.nume )      
    {      
        return true;      
    }      
    else      
    {      
        return false;      
    }      
}      
    
bool CFraction::operator >= (CFraction &CF2)       
{      
    nume = nume * CF2.deno;    
    CF2.nume = CF2.nume * deno;    
    
    if( nume  >= CF2.nume )     
    {      
        return true;      
    }       
    else      
    {      
        return false;      
    }      
}     
     
bool CFraction::operator <= (CFraction &CF2)       
{      
    nume = nume * CF2.deno;    
    CF2.nume = CF2.nume * deno;    
    
    if( nume  <= CF2.nume )     
    {      
        return true;      
    }      
    else      
    {      
        return false;      
    }      
}      
    
bool CFraction::operator == (CFraction &CF2)       
{      
    nume = nume * CF2.deno;    
    CF2.nume = CF2.nume * deno;    
    
    if( nume  == CF2.nume )     
    {      
        return true;      
    }        
    else      
    {      
        return false;      
    }      
}    
      
bool CFraction::operator != (CFraction &CF2)       
{      
    nume = nume * CF2.deno;    
    CF2.nume = CF2.nume * deno;    
    
    if( nume  != CF2.nume )     
    {      
        return true;      
    }       
    else      
    {      
        return false;      
    }      
}     
     
void main()    
{    
    CFraction CF1, CF2;    
    
    cin >> CF1;             
    CF1.output(1);    
    cin >> CF2;     
    CF2.output(2);   
    cout << endl;    
    
    CFraction CF3(3,4), CF4(1,4),CF5;    
    
    cout << "CF3为:" ;     
    cout << CF3 << endl;    
    cout << "CF4为:" ;     
    cout << CF4 << endl;    
    
    CF5 = CF3;    
    CF5 = CF5 + CF4;    
    cout << "CF3 + CF4 = ";    
    cout << CF5 << endl;    
    cout << "化简后得:";    
    CF5.Simplify();    
    
    CF5 = CF3;    
    CF5 = CF5 - CF4;    
    cout << "CF3 - CF4 = ";    
    cout << CF5 << endl;    
    cout << "化简后得:";    
    CF5.Simplify();    
    
    CF5 = CF3;    
    CF5 = CF5 * CF4;    
    cout << "CF3 * CF4 = ";    
    cout << CF5 << endl;    
    cout << "化简后得:";    
    CF5.Simplify();    
    
    CF5 = CF3;    
    CF5 = CF5 / CF4;    
    cout << "CF3 / CF4 = ";    
    cout << CF5 << endl;    
    cout << "化简后得:";    
    CF5.Simplify();   
    
    CF5 = CF3;    
    CF5 = - CF5;    
    cout << "-CF3 = ";    
    cout << CF5 << endl;    
    
    cout << "比较两个分数大小:" << endl;          
    if (CF3 > CF4) cout << "CF3 > CF4" << endl;    
    if (CF3 < CF4) cout << "CF3 < CF4" << endl;    
    if (CF3 >= CF4) cout << "CF3 >= CF4" << endl;    
    if (CF3 <= CF4) cout << "CF3 <= CF4" << endl;    
    if (CF3 == CF4) cout << "CF3 == CF4" << endl;    
    if (CF3 != CF4) cout << "CF3 != CF4" << endl;    
        
    system("pause");    
}    

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  output 任务 c