现在的位置: 首页 > 综合 > 正文

第八周实验报告3

2014年02月21日 ⁄ 综合 ⁄ 共 3410字 ⁄ 字号 评论关闭
#include<iostream>  
using namespace std;  
  
class CFraction  
{private:  
int nume;  // 分子  
int deno;  // 分母  
public:  
    CFraction(int nu=0,int de=1);   //构造函数,初始化用  
    void Set(int nu=0,int de=1);    //置值,改变值时用  
    void input();               //按照"nu/de"的格式,如"5/2"的形式输入  
    void Simplify();            //化简(使分子分母没有公因子)  
    CFraction operator + (CFraction &f);  
    CFraction operator - (CFraction &f);  
    CFraction operator * (CFraction &f);              
    CFraction operator / (CFraction &f);  
    CFraction operator - ();  
    bool operator > (CFraction &f);  
    bool operator < (CFraction &f);  
    bool operator >= (CFraction &f);  
    bool operator <= (CFraction &f);  
    bool operator == (CFraction &f);  
    bool operator != (CFraction &f);  
    void output(int style=0);       //输出:以8/6为例,style为0时,输出8/6;  
    //style为1时,输出4/3;  
    //style为2时,输出1(1/3),表示一又三分之一;  
    //不给出参数和非1、2,认为是方式0  
};  
  
CFraction:: CFraction(int nu,int de): nume(nu), deno(de){}  
  
void CFraction:: Set(int nu,int de)  
{  
    nume = nu;  
    deno = de;  
}  
  
void CFraction:: input()  
{  
    char ch = '/';  
  
    cout << "请输入分数值(nu/de):";  
  
    cin >> nume >> ch >> deno;  
  
    while(1)  
    {  
        if (ch != '/')  
        {  
            cout << "格式错误,请重新输入:";  
            cin >> nume >> ch >> deno;  
        }  
        else   
        {  
            break;  
        }  
    }  
}  
  
void CFraction:: Simplify()  
{  
    int i, j;  
  
    for (i = 2; i <= nume; ++i)  
    {  
        for(j = 2; j <= deno; ++j)  
        {  
            if (nume % j == 0 && deno % j == 0)  
            {  
                nume = nume / j;  
  
                deno = deno / j;  
            }  
        }  
    }  
}  
  
CFraction CFraction:: operator + (CFraction &f)  
{  
    CFraction f1;  
    f1.deno = f.deno * deno;  
    f1.nume = f.deno * nume + f.nume * deno;  
  
    return f1;  
}  
  
CFraction CFraction::  operator - (CFraction &f)  
{  
    CFraction f1;  
    f1.deno = f.deno * deno;  
    f1.nume = f.deno * nume - f.nume * deno;  
  
    return f1;  
}  
  
CFraction CFraction:: operator * (CFraction &f)  
{  
    CFraction f1;  
    f1.deno = f.deno * deno;  
    f1.nume = f.nume * nume;  
  
    return f1;  
}  
  
CFraction CFraction:: operator / (CFraction &f)  
{  
    CFraction f1;  
    f1.nume = f.deno * nume;  
    f1.deno = f.nume * deno;  
  
    return f1;  
}  
  
CFraction CFraction:: operator - ()  
{  
    CFraction f1;  
    f1.deno = deno;  
    f1.nume = -nume;  
  
    return f1;  
}  
  
bool CFraction:: operator > (CFraction &f)  
{  
    nume = nume * f.deno;  
    f.nume = f.nume * deno;  
    if(nume > f.nume)  
        return true;  
    else  
        return false;  
}  
  
bool CFraction:: operator < (CFraction &f)  
{  
    nume = nume * f.deno;  
    f.nume = f.nume * deno;  
    if(nume < f.nume)  
        return true;  
    else  
        return false;  
}  
  
bool CFraction:: operator >= (CFraction &f)  
{  
    nume = nume * f.deno;  
    f.nume = f.nume * deno;  
    if(nume > f.nume || nume == f.nume)  
        return true;  
    else  
        return false;  
}  
  
bool CFraction:: operator <= (CFraction &f)  
{  
    nume = nume * f.deno;  
    f.nume = f.nume * deno;  
    if(nume < f.nume || nume == f.nume)  
        return true;  
    else  
        return false;  
}  
  
bool CFraction:: operator == (CFraction &f)  
{  
    nume = nume * f.deno;  
    f.nume = f.nume * deno;  
    if(nume == f.nume)  
        return true;  
    else  
        return false;  
}  
  
bool CFraction:: operator != (CFraction &f)  
{  
    nume = nume * f.deno;  
    f.nume = f.nume * deno;  
    if(nume != f.nume)  
        return true;  
    else  
        return false;  
}  
  
void CFraction:: output(int style)    
{  
    int i;  
  
    if (style == 0)  
    {  
        cout << nume << "/" << deno << endl;  
    }  
    else if (style == 1)  
    {  
        Simplify();  
        if(nume % deno == 0)  
        {  
            cout << nume;  
            cout << endl;  
        }  
        else  
        {  
            cout << nume << "/" << deno << endl;  
        }  
    }  
    else   
    {  
        if (nume > deno)  
        {                 
            while(nume > deno)  
            {     
                if(nume % deno == 0)  
                {  
                    cout << nume;  
                    cout << endl;  
                    break;  
                }  
                else  
                {  
                    i = nume % deno;  
                    nume = nume /deno;  
  
                    ++i;  
                    cout << i - 1 << "(" <<nume << "/" << deno << ")" << endl;  
                }  
            }                 
        }  
        else  
        {  
            cout << nume << "/" << deno << endl;  
        }  
    }  
}  
  
void main()  
{  
    CFraction cf1;  
  
    CFraction cf2;  
    cf2.Set(8, 6);  
    cout << "cf2=";  
    cf2.output(1);  
  
    CFraction cf3;  
    cf3.Set(2,3);  
    cout << "cf3=";  
    cf3.output(1);  
  
    cf1 = cf2 + cf3;  
    cout << "cf2+cf3=";  
    cf1.output(1);  
  
    cf1 = cf2 - cf3;  
    cout << "cf2-cf3=";  
    cf1.output(1);  
  
    cf1 = cf2 * cf3;  
    cout << "cf2*cf3=";  
    cf1.output(1);  
  
    cf1 = cf2 / cf3;  
    cout << "cf2/cf3=";  
    cf1.output(1);  
  
    cf1 = cf2;  
    cf1 = -cf1;  
    cout << "-cf2=";  
    cf1.output(1);  
  
    if (cf2>cf3) cout<<"cf2>cf3"<<endl;  
    if (cf2<cf3) cout<<"cf2<cf3"<<endl;  
    if (cf2==cf3) cout<<"cf2=cf3"<<endl;   
    if (cf2!=cf3) cout<<"cf2≠cf3"<<endl;  
    if (cf2>=cf3) cout<<"cf2≥cf3"<<endl;  
    if (cf2<=cf3) cout<<"cf2≤cf3"<<endl;  
  
    system("PAUSE");  
}  

* 程序的版权和版本声明部分
* Copyright (c) 2012, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称: class time
* 作 者: 于昊
* 完成日期: 2012 年 04 月 11 日
* 版 本 号: 1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 问题分析:
* 算法设计:……

抱歉!评论已关闭.