第八周任务(三)

本文介绍了一个简单的分数类(CFraction)的设计与实现,该类支持基本的算术运算如加减乘除,并提供了比较运算符的重载。此外还实现了约分功能以保持分数的最简形式。

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

01./* (程序头部注释开始) 
02.* 程序的版权和版本声明部分 
03.* Copyright (c) 2011, 烟台大学计算机学院学生  
04.* All rights reserved. 
05.* 文件名称:renwu.cpp                               
06.* 作    者:苗向前                              
07.* 完成日期:2012 年 4 月 11 日 
08.* 版 本 号:v8.3          
09.* 对任务及求解方法的描述部分 
10.* 输入描述:略  
11.* 问题描述:略  
12.* 程序输出:略 
13.* 程序头部的注释结束 
14.*/  
15.#include <iostream>      
16.using namespace std;    
17.  
18.class CFraction    
19.    {    
20.    private:    
21.        int nume;  // 分子    
22.        int deno;  // 分母    
23.        int gcd(int m, int n);    
24.    public:    
25.        //构造函数及运算符重载的函数声明    
26.        CFraction(int n=1, int d=1){if(d==0) return;nume=n,deno=d;}    
27.        friend CFraction operator +(CFraction &c1,CFraction &c2);    
28.        friend CFraction operator -(CFraction &c1,CFraction &c2);    
29.        friend CFraction operator *(CFraction &c1,CFraction &c2);    
30.        friend CFraction operator /(CFraction &c1,CFraction &c2);    
31.        friend CFraction operator -(CFraction &c);    
32.        bool operator >(CFraction &c);    
33.        bool operator <(CFraction &c);    
34.        bool operator >=(CFraction &c);    
35.        bool operator <=(CFraction &c);    
36.        bool operator ==(CFraction &c);    
37.        bool operator !=(CFraction &c);    
38.        void simplify();    
39.        void display();    
40.    };   
41.  
42.void CFraction::simplify()      
43.    {      
44.    int n=gcd(deno,nume);      
45.    deno/=n;   
46.    nume/=n;      
47.    }    
48.  
49.int CFraction::gcd(int m,int n)    
50.    {    
51.    int r;      
52.    if(m<n)  
53.        {  
54.        r=m;   
55.        m=n;   
56.        n=r;  
57.        }      
58.    while(r=m%n)  
59.        {      
60.        m=n;      
61.        n=r;      
62.        }      
63.    return n;     
64.    }  
65.  
66.void CFraction::display()    
67.    {    
68.    cout<<nume<<"/"<<deno<<endl;    
69.    }   
70.  
71.CFraction operator +(CFraction &c1,CFraction &c2)    
72.    {    
73.    CFraction c;    
74.    c.deno=c1.deno*c2.deno;    
75.    c.nume=c1.nume*c2.deno+c2.nume*c1.deno;    
76.    c.simplify();    
77.    return c;    
78.    }   
79.  
80.CFraction operator -(CFraction &c1,CFraction &c2)    
81.    {    
82.    CFraction c;    
83.    c.deno=c1.deno*c2.deno;    
84.    c.nume=c1.nume*c2.deno-c2.nume*c1.deno;    
85.    c.simplify();    
86.    return c;    
87.    }    
88.  
89.CFraction operator *(CFraction &c1,CFraction &c2)    
90.    {    
91.    CFraction c;    
92.    c.deno=c1.deno*c2.deno;    
93.    c.nume=c1.nume*c2.nume;    
94.    c.simplify();    
95.    return c;    
96.    }    
97.  
98.CFraction operator /(CFraction &c1,CFraction &c2)    
99.    {    
100.    CFraction c;    
101.    c.deno=c1.deno*c2.nume;    
102.    c.nume=c1.nume*c2.deno;    
103.    c.simplify();    
104.    return c;    
105.    }    
106.  
107.CFraction operator -(CFraction &c)    
108.    {    
109.    return CFraction(-c.nume,c.deno);    
110.    }    
111.  
112.bool CFraction::operator >(CFraction &c)    
113.    {    
114.    CFraction cf(*this/c);    
115.    if(cf.nume/cf.deno>1)    
116.        return true;    
117.    else    
118.        return false;    
119.    }    
120.  
121.bool CFraction::operator <(CFraction &c)    
122.    {    
123.    CFraction cf(*this/c);    
124.    if(cf.nume/cf.deno<1)    
125.        return true;    
126.    else    
127.        return false;    
128.    }   
129.  
130.bool CFraction::operator >=(CFraction &c)    
131.    {    
132.    CFraction cf(*this/c);    
133.    if(cf.nume/cf.deno>=1)    
134.        return true;    
135.    else    
136.        return false;    
137.    }   
138.  
139.bool CFraction::operator <=(CFraction &c)    
140.    {    
141.    CFraction cf(*this/c);    
142.    if(cf.nume/cf.deno<=1)    
143.        return true;    
144.    else    
145.        return false;    
146.    }    
147.  
148.bool CFraction::operator ==(CFraction &c)    
149.    {    
150.    CFraction cf(*this/c);    
151.    if(cf.nume/cf.deno==1)    
152.        return true;    
153.    else    
154.        return false;    
155.    }   
156.  
157.bool CFraction::operator !=(CFraction &c)    
158.    {    
159.    CFraction cf(*this/c);    
160.    if(cf.nume/cf.deno!=1)    
161.        return true;    
162.    else    
163.        return false;    
164.    }     
165.//重载函数的实现及用于测试的main()函数    
166.int main()    
167.    {    
168.    CFraction c1(1,3),c2(3,6),c3(6,10);    
169.    cout<<"c1=";    
170.    c1.display();    
171.    cout<<"c2=";    
172.    c2.display();    
173.    cout<<"c3=";    
174.    c3.display();    
175.    if(c1>c2)   
176.        cout<<"c1>c2"<<endl;    
177.    if(c2<c1)   
178.        cout<<"c2<c1"<<endl;    
179.    if(c2>=c3)   
180.        cout<<"c2>=c3"<<endl;    
181.    if(c2<=c3)   
182.        cout<<"c2<=c3"<<endl;    
183.    if(c2==c3)   
184.        cout<<"c2==c3"<<endl;    
185.    if(c1!=c2)   
186.        cout<<"c1!=c2"<<endl;    
187.    cout<<"c1+c2=";    
188.    (c1+c2).display();    
189.    cout<<"c1-c2=";    
190.    (c1-c2).display();    
191.    cout<<"c1*c2=";    
192.    (c1*c2).display();    
193.    cout<<"c1/c2=";    
194.    (c1/c2).display();    
195.    cout<<"c3=-c3=";  
196.    c3=-c3;  
197.    c3.display();    
198.    system("pause");  
199.    return 0;    
200.    }    
 

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值