第九周实验报告3

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称: 分数类中的运算符重载 
* 作 者: 于宸
* 完成日期: 2012 年 04 月 16 日
* 版 本 号: V.1.0

* 对任务及求解方法的描述部分
* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的

* 加减乘除(运算后再化简)、求反、比较(6种关系)的运算。

* 程序头部的注释结束

 
  1. #include<iostream>      
  2. using namespace std;    
  3.     
  4. class CFraction    
  5. {    
  6. private:    
  7.     int nume;  // 分子      
  8.     int deno;  // 分母      
  9. public:    
  10.     CFraction(int nu = 1,int de = 2);   //构造函数,初始化用      
  11.   
  12.     friend istream& operator >> (istream&,CFraction&);//声明重载运算符“>>”函数      
  13.     friend ostream& operator << (ostream&,CFraction&);//声明重载运算符“<<”函数   
  14.   
  15.     void Simplify();                //化简(使分子分母没有公因子)      
  16.     void S_Simplify();              //化简(以4/3为例,输出1(1/3),表示一又三分之一)      
  17.     void output(int style);         //输出:以8/6为例,style为0时,输出8/6;      
  18.                                     //style为1时,输出4/3;      
  19.                                     //style为2时,输出1(1/3),表示一又三分之一;      
  20.                                     //不给出参数和非1、2,认为是方式0      
  21.     
  22.     CFraction operator+(CFraction &CF2); //定义分数加法      
  23.     CFraction operator-(CFraction &CF2); //定义分数减法      
  24.     CFraction operator*(CFraction &CF2); //定义分数乘法      
  25.     CFraction operator/(CFraction &CF2); //定义分数除法      
  26.     
  27.     CFraction operator-();//取反      
  28.     
  29.     //比较大小      
  30.     bool operator > (CFraction &CF2);    
  31.     bool operator < (CFraction &CF2);    
  32.     bool operator >= (CFraction &CF2);    
  33.     bool operator <= (CFraction &CF2);    
  34.     bool operator == (CFraction &CF2);    
  35.     bool operator != (CFraction &CF2);    
  36. };    
  37.     
  38. //构造函数,初始化用      
  39. CFraction::CFraction(int nu,int de)    
  40. {    
  41.     nume = nu;    
  42.     deno = de;    
  43. }    
  44.     
  45. //输出分数      
  46. ostream& operator << (ostream& output,CFraction& CF)  
  47. {    
  48.     cout << CF.nume << "/" << CF.deno;  
  49.     return output;  
  50. }    
  51.     
  52. //按照"nu/de"的格式,如"5/2"的形式输入      
  53. istream& operator >> (istream& input,CFraction& CF)  
  54. {    
  55.     char b;    
  56.     cout << "请输入分数(按照“a/b”形式输入):" << endl;    
  57.     input >> CF.nume >> b >> CF.deno;    
  58.     return input;  
  59. }    
  60.     
  61. //化简(使分子分母没有公因子)      
  62. void CFraction::Simplify()    
  63. {    
  64.     for(int i = 2;i <= nume && i <= deno;i++)    
  65.     {    
  66.         if(nume % i == 0 && deno % i == 0)    
  67.         {    
  68.             nume = nume/i;    
  69.             deno = deno/i;    
  70.             i--;    
  71.         }    
  72.     }    
  73.     
  74.     cout << (*this) << endl;    
  75. }    
  76.     
  77. //化简(以4/3为例,输出1(1/3),表示一又三分之一)      
  78. void CFraction::S_Simplify()    
  79. {    
  80.     for(int i = 2;i <= nume && i <= deno;i++)    
  81.     {    
  82.         if(nume % i == 0 && deno % i == 0)    
  83.         {    
  84.             nume = nume/i;    
  85.             deno = deno/i;    
  86.             i--;    
  87.         }    
  88.     }    
  89.     
  90.     if(nume >= deno)    
  91.     {    
  92.         int n;    
  93.     
  94.         n = nume / deno;    
  95.         nume = nume % deno;    
  96.         cout << n << "(" << (*this) << ")" << endl;    
  97.     }    
  98.     else    
  99.     {    
  100.         cout << (*this);    
  101.     }    
  102.     
  103. }    
  104. //输出:以8/6为例,style为0时,输出8/6;      
  105. //style为1时,输出4/3;      
  106. //style为2时,输出1(1/3),表示一又三分之一;      
  107. //不给出参数和非1、2,认为是方式0      
  108. void CFraction::output(int style)    
  109. {    
  110.     if(style == 1)    
  111.     {    
  112.         CFraction::Simplify();    
  113.     }    
  114.     else if(style == 2)    
  115.     {    
  116.         CFraction::S_Simplify();    
  117.     }    
  118.     else    
  119.     {    
  120.         cout << (*this) << endl;    
  121.     }    
  122. }    
  123.     
  124. //定义分数加法      
  125. CFraction CFraction::operator+(CFraction &CF2)    
  126. {    
  127.     nume = nume * CF2.deno + CF2.nume * deno;    
  128.     deno = deno * CF2.deno;    
  129.     return (*this);    
  130. }    
  131.     
  132. //定义分数减法      
  133. CFraction CFraction::operator-(CFraction &CF2)    
  134. {    
  135.     nume = nume * CF2.deno - CF2.nume * deno;    
  136.     deno = deno * CF2.deno;    
  137.     return (*this);    
  138. }    
  139.     
  140. //定义分数乘法      
  141. CFraction CFraction::operator*(CFraction &CF2)    
  142. {    
  143.     nume = nume * CF2.nume;    
  144.     deno = deno * CF2.deno;    
  145.     return (*this);    
  146. }    
  147.     
  148. //定义分数除法      
  149. CFraction CFraction::operator/(CFraction &CF2)    
  150. {    
  151.     nume = nume * CF2.deno;    
  152.     deno = deno * CF2.nume;    
  153.     return (*this);    
  154. }    
  155. //取反      
  156. CFraction CFraction::operator-()    
  157. {    
  158.     nume = - nume;    
  159.     deno = deno;    
  160.     return (*this);    
  161. }    
  162.     
  163. //比较大小      
  164. bool CFraction::operator > (CFraction &CF2)       
  165. {      
  166.     nume = nume * CF2.deno;    
  167.     CF2.nume = CF2.nume * deno;    
  168.     
  169.     if( nume  > CF2.nume )      
  170.     {      
  171.         return true;      
  172.     }      
  173.     else      
  174.     {      
  175.         return false;      
  176.     }      
  177. }     
  178.      
  179. bool CFraction::operator < (CFraction &CF2)       
  180. {      
  181.     nume = nume * CF2.deno;    
  182.     CF2.nume = CF2.nume * deno;    
  183.     
  184.     if( nume  < CF2.nume )      
  185.     {      
  186.         return true;      
  187.     }      
  188.     else      
  189.     {      
  190.         return false;      
  191.     }      
  192. }      
  193.     
  194. bool CFraction::operator >= (CFraction &CF2)       
  195. {      
  196.     nume = nume * CF2.deno;    
  197.     CF2.nume = CF2.nume * deno;    
  198.     
  199.     if( nume  >= CF2.nume )     
  200.     {      
  201.         return true;      
  202.     }       
  203.     else      
  204.     {      
  205.         return false;      
  206.     }      
  207. }     
  208.      
  209. bool CFraction::operator <= (CFraction &CF2)       
  210. {      
  211.     nume = nume * CF2.deno;    
  212.     CF2.nume = CF2.nume * deno;    
  213.     
  214.     if( nume  <= CF2.nume )     
  215.     {      
  216.         return true;      
  217.     }      
  218.     else      
  219.     {      
  220.         return false;      
  221.     }      
  222. }      
  223.     
  224. bool CFraction::operator == (CFraction &CF2)       
  225. {      
  226.     nume = nume * CF2.deno;    
  227.     CF2.nume = CF2.nume * deno;    
  228.     
  229.     if( nume  == CF2.nume )     
  230.     {      
  231.         return true;      
  232.     }        
  233.     else      
  234.     {      
  235.         return false;      
  236.     }      
  237. }    
  238.       
  239. bool CFraction::operator != (CFraction &CF2)       
  240. {      
  241.     nume = nume * CF2.deno;    
  242.     CF2.nume = CF2.nume * deno;    
  243.     
  244.     if( nume  != CF2.nume )     
  245.     {      
  246.         return true;      
  247.     }       
  248.     else      
  249.     {      
  250.         return false;      
  251.     }      
  252. }     
  253.      
  254. void main()    
  255. {    
  256.     CFraction CF1, CF2;    
  257.     
  258.     cin >> CF1;             
  259.     CF1.output(1);    
  260.     cin >> CF2;     
  261.     CF2.output(2);   
  262.     cout << endl;    
  263.     
  264.     CFraction CF3(3,4), CF4(1,4),CF5;    
  265.     
  266.     cout << "CF3为:" ;     
  267.     cout << CF3 << endl;    
  268.     cout << "CF4为:" ;     
  269.     cout << CF4 << endl;    
  270.     
  271.     CF5 = CF3;    
  272.     CF5 = CF5 + CF4;    
  273.     cout << "CF3 + CF4 = ";    
  274.     cout << CF5 << endl;    
  275.     cout << "化简后得:";    
  276.     CF5.Simplify();    
  277.     
  278.     CF5 = CF3;    
  279.     CF5 = CF5 - CF4;    
  280.     cout << "CF3 - CF4 = ";    
  281.     cout << CF5 << endl;    
  282.     cout << "化简后得:";    
  283.     CF5.Simplify();    
  284.     
  285.     CF5 = CF3;    
  286.     CF5 = CF5 * CF4;    
  287.     cout << "CF3 * CF4 = ";    
  288.     cout << CF5 << endl;    
  289.     cout << "化简后得:";    
  290.     CF5.Simplify();    
  291.     
  292.     CF5 = CF3;    
  293.     CF5 = CF5 / CF4;    
  294.     cout << "CF3 / CF4 = ";    
  295.     cout << CF5 << endl;    
  296.     cout << "化简后得:";    
  297.     CF5.Simplify();   
  298.     
  299.     CF5 = CF3;    
  300.     CF5 = - CF5;    
  301.     cout << "-CF3 = ";    
  302.     cout << CF5 << endl;    
  303.     
  304.     cout << "比较两个分数大小:" << endl;          
  305.     if (CF3 > CF4) cout << "CF3 > CF4" << endl;    
  306.     if (CF3 < CF4) cout << "CF3 < CF4" << endl;    
  307.     if (CF3 >= CF4) cout << "CF3 >= CF4" << endl;    
  308.     if (CF3 <= CF4) cout << "CF3 <= CF4" << endl;    
  309.     if (CF3 == CF4) cout << "CF3 == CF4" << endl;    
  310.     if (CF3 != CF4) cout << "CF3 != CF4" << endl;    
  311.         
  312.     system("pause");    
  313. }    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值