C++第二次实验1.5

这个博客展示了如何使用C++定义一个分数类(CFraction),包括构造函数、置值、输入、化简、放大和输出等方法。通过实例演示了分数类的各种操作,如设置分数、输入分数、化简分数、输出不同形式的分数(原样、化简、带分数、小数形式)以及放大分数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>  
using namespace std;  
class CFraction  
{    
private:    
    int nume;  // 分子     
    int deno;  // 分母     
public:    
    CFraction(int nu,int de);   //构造函数,初始化用     
    void set(int nu,int de);    //置值,改变值时用     
    void input();               //按照"nu/de"的格式,如"5/2"的形式输入     
    void simplify();            //化简(使分子分母没有公因子)     
    void amplify(int n);        //放大n倍,如2/3放大5倍为10/3     
    void output(int style);   //输出:以8/6为例,style为0时,原样输出8/6;     
                            //style为1时,输出化简后形式4/3;     
                        //style为2时,输出1(1/3)形式,表示一又三分之一;     
                            //style为3时,用小数形式输出,如1.3333;     
                            //默认方式0     
};    
  
CFraction::CFraction(int nu,int de)  
{  
    nume=nu;deno=de;  
}  
void CFraction::set(int nu,int de)  
{  
    nume=nu;  
    deno=de;  
    cout<<nume<<"/"<<deno<<endl;  
}  
  
void CFraction::input()  
{  
    char c;  
    cin>>nume>>c>>deno;  
}  
  
void CFraction::simplify()  
{  
    int i,max;  
    max=nume>deno?(nume/2+1):(deno/2+1);  
    for(i=2;i<max;i++)  
        if(nume%i==0&&deno%i==0)  
        {   nume/=i;deno/=i;  }               
}  
  
void CFraction::amplify(int n)  
{  
    nume*=n;  
    simplify();  
}  
  
void CFraction::output(int style)  
{  
    double t;  
    if(style==0)cout<<nume<<"/"<<deno<<endl;  
    else if(style==1)  
    {  
         simplify();  
         cout<<nume<<"/"<<deno<<endl;  
    }  
    else if(style==2)  
    {  
         simplify();  
         t=nume/deno;  
         cout<<t<<"("<<nume-deno*t<<"/"<<deno<<")"<<endl;  
    }  
    else if(style==3)  
    {  
        cout<<nume*1.0/deno<<endl;  
    }  
}  
  
int main()  
{  
    CFraction c1(0,1);  
    cout<<"关于c1:"<<endl<<"原样:";  
    c1.output(0);   
      
    cout<<"改变c1:"<<endl<<"原样:";  
    c1.set(2,7);  
  
    cout<<"输入c1:"<<endl<<"输入分数(m/n):";  
    c1.input();  
    cout<<"原样:";  
    c1.output(0);  
  
    CFraction c2(8,6);  
    cout<<"关于c2:"<<endl<<"原样:";  
    c2.output(0);  
    cout<<"化简形式:";  
    c2.output(1);  
    cout<<"带分数形式:";  
    c2.output(2);  
    cout<<"近似值:";  
    c2.output(3);  
  
    cout<<"原样:";  
    c2.set(8,6);  
    cout<<"将c2化简:"<<endl<<"原样:";  
    c2.output(1);  
      
    cout<<"将c2放大倍:"<<endl<<"原样:";  
    c2.amplify(5);  
    c2.output(0);  
    cout<<"化简形式:";  
    c2.output(1);  
    return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值