第五周任务2

 

* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
 * All rights reserved.
* 作 者: 于晓峰
* 完成日期: 2012年 3月19日
* 版 本 号: v1.2

#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(int n);            //化简(使分子分母没有公因子)

    void amplify(int n);            //放大n倍,如2/3放大5倍为10/3

    void output(int style=0);        //输出:以8/6为例,style为0时,输出8/6;CFraction(int nu=0,int de=1); //构造函数,初始化用

};

int main ()

{

    CFraction t1;

    t1.Set(0,1); //置值,改变值时用

    t1.input();                //按照"nu/de"的格式,如"5/2"的形式输入

    t1.Simplify(1);            //化简(使分子分母没有公因子)

    t1.amplify(2);            //放大n倍,如2/3放大5倍为10/3

    t1.output(2);

    cout<<endl;

    system("PAUSE");

    return 0; //输出:以8/6为例,style为0时,输出8/6;CFraction(int nu=0,int de=1); //构造函数,初始化用

}

CFraction::CFraction(int nu,int de)

{

    nume = nu;

    deno = de;

}

void CFraction::Set(int nu,int de) //置值,改变值时用

{

    nume = nu;

    deno = de;

}

void CFraction::input()                //按照"nu/de"的格式,如"5/2"的形式输入

{

    char h;

    cout<<"请按照“nu/de”的格式输入一个分数:";

    while(1) 

    { 

        cin>>nume>>h>>deno; 

        

        if(h!='/')  
		{

            cout<<"格式不正确,请重新输入"<<endl; 
		}

        else
		{

            break;
		}

    }

    

    

}

void CFraction::Simplify(int n)        //化简(使分子分母没有公因子)

{

    int a,b,min;

    if(nume>deno)

    {

        min=deno;

    }

    else

    {

        min=nume;

    }

    for (int i=1;i<=min;++i)

    {

        b=nume%i;

        a=deno%i;

        if(a==0 && b==0)

        {

            nume=nume/i;

            deno=deno/i;

            if(nume>deno)

                min=deno;

            else

                min=nume;

        }

        

    }

    if(n==1)

    {

    cout<<"化简后的结果为:"<<nume<<'/'<<deno<<endl;

    }

}

void CFraction::amplify(int n)        //放大n倍,如2/3放大5倍为10/3

{

    //int a,b;

    cout<<"请输入您想放大的倍数n:";

        cin>>n;

    nume=nume*n;

    //b=nume;

    //a=deno;

    Simplify(0);

    cout<<"放大"<<n<<"倍的结果为"<<nume<<'/'<<deno<<endl;

    //nume=b;

    //deno=a;

}

void CFraction::output(int style)        //输出:以8/6为例,style为0时,输出8/6;CFraction(int nu=0,int de=1); //构造函数,初始化用

{

    int a,b;

    if (style==0)

    {

        cout<<"您想求的值为:"<<nume<<'/'<<deno;

    }

    else if(style==1)

    {

        Simplify(0);

        cout<<"您想求的值为:"<<nume<<'/'<<deno;

    }

    else if (style==2)

    {

        Simplify(0);

        if(nume>deno)

        {

            a=nume/deno;

            b=nume%deno;

        }

        cout<<"您想求的值为:"<<a<<'('<<b<<'/'<<deno<<')';

    }

    

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值