*/
* Copyright (c) 2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名:text.cpp
* 作者:常轩
* 微信公众号:Worldhello
* 完成日期:2016年5月25日
* 版本号:V1.0
* 问题描述:分数类的重载取倒数+输入输出重载
* 程序输入:无
* 程序输出:见运行结果
*/
#include<iostream>
#include<Cmath>
using namespace std; class CFraction{
private:
int nume; //分子
int deno; //分母
public:
CFraction(int nu=0,int de=0);
//输入输出的重载
friend istream &operator>>(istream &in,CFraction &x);
friend ostream &operator<<(ostream &out,CFraction x);
CFraction operator+(const CFraction &n); //分数相加
CFraction operator-(const CFraction &n); //分数相减
CFraction operator*(const CFraction &n); //分数相乘
CFraction operator/(const CFraction &n); //分数相除
void display(); //输出分数
void simplify(); //分数化简
bool operator>(const CFraction &c);
bool operator<(const CFraction &c);
bool operator==(const CFraction &c);
bool operator!=(const CFraction &c);
bool operator>=(const CFraction &c);
bool operator<=(const CFraction &c);
CFraction operator+(); //取正一目运算
CFraction operator-(); //取反一目运算
CFraction operator~(); //分数取倒数
}; CFraction::CFraction(int nu,int de) //构造函数
{
nume=nu;
deno=de;
}
void CFraction::display() //输出函数
{
cout<<nume<<"/"<<deno<<endl;
}
void CFraction::simplify() //分数化简
{
int m,n,r;
n=fabs(deno);
m=fabs(nume);
if(nume==0)
deno=0;
else{
while(r=m%n) // 求m,n的最大公约数
{
m=n;
n=r;
}
deno/=n; // 化简
nume/=n;
if (deno<0) // 将分母转化为正数
{
deno=-deno;
nume=-nume;
}
}
}
istream &operator>>(istream &in,CFraction &x)
{
char ch;
while(1)
{
cin>>x.nume>>ch>>x.deno;
if (x.deno==0)
cerr<<"分母为0, 请重新输入\n";
else if(ch!='/')
cerr<<"格式错误(形如m/n)! 请重新输入\n";
else
break;
}
return cin;
}
// 重载输出运算符<<
ostream &operator<<(ostream &out,CFraction x)
{
cout<<x.nume<<'/'<<x.deno;
return cout;
} CFraction CFraction::operator +(const CFraction &n) //定义分数相加
{
CFraction t;
t.deno=this->deno*n.deno;
t.nume=this->nume*n.deno+n.nume*this->deno;
t.simplify();//化简
return t;
}
CFraction CFraction::operator -(const CFraction &n) //定义分数相减
{
CFraction t;
t.deno=this->deno*n.deno;
t.nume=this->nume*n.deno-n.nume*this->deno;
t.simplify();//化简
return t;
}
CFraction CFraction::operator *(const CFraction &n) //定义分数相乘
{
CFraction t;
t.deno=n.deno*this->deno;
t.nume=n.nume*this->nume;
t.simplify();//化简
return t;
}
CFraction CFraction::operator /(const CFraction &n) //定义分数相除
{
CFraction t;
t.deno=n.nume*this->deno;
t.nume=n.deno*this->nume;
t.simplify();//化简
return t;
} //比较运算符重载
bool CFraction::operator >(const CFraction &c) // >重载
{
int this_nume,c_nume,common_deno;
this_nume=nume*c.deno; // 计算分数通分后的分子,同分母为deno*c.deno
c_nume=c.nume*deno;
common_deno=deno*c.deno;
if ((this_nume-c_nume)*common_deno>0) return true;
return false;
}
bool CFraction::operator<(const CFraction &c)
{
int this_nume,c_nume,common_deno;
this_nume=nume*c.deno;
c_nume=c.nume*deno;
common_deno=deno*c.deno;
if ((this_nume-c_nume)*common_deno<0) return true;
return false;
} // 分数比较大小
bool CFraction::operator==(const CFraction &c)
{
if (*this!=c) return false;
return true;
} // 分数比较大小
bool CFraction::operator!=(const CFraction &c)
{
if (*this>c || *this<c) return true;
return false;
} // 分数比较大小
bool CFraction::operator>=(const CFraction &c)
{
if (*this<c) return false;
return true;
} // 分数比较大小
bool CFraction::operator<=(const CFraction &c)
{
if (*this>c) return false;
return true;
}
// 分数取正号
CFraction CFraction:: operator+()
{
return *this;
} // 分数取负号
CFraction CFraction:: operator-()
{
CFraction x;
x.nume=-this->nume;
x.deno=this->deno;
return x;
}
CFraction CFraction::operator ~()
{
CFraction t;
t.deno=this->nume;
t.nume=this->deno;
return t;
}
int main()
{
CFraction a,b;
CFraction c;
cin>>a>>b;
c=a+b;
cout<<"c=";
c.display();
cout<<" "<<c<<"重载<<后输出"<<endl;
c=a*b;
cout<<"c=";
c.display();
cout<<" "<<c<<endl;
c=a-b;
cout<<"c=";
c.display();
cout<<" "<<c<<endl;
c=a/b;
cout<<"c=";
c.display();
cout<<" "<<c<<endl;
if(a>b)
cout<<"a>b"<<endl;
c=~a;
c.display();
cout<<" "<<c<<endl;
return 0;
}

C++走向远洋——55(项目一3、分数类的重载、>>的更多相关文章

  1. C++走向远洋——54(项目一2、分数类的重载、取倒数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  2. C++走向远洋——53(项目一1、分数类的重载、加减乘除、比较)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  3. C++走向远洋——(项目二、存储班长信息的学生类、派生)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  4. 连分数(分数类模板) uva6875

    //连分数(分数类模板) uva6875 // 题意:告诉你连分数的定义.求连分数,并逆向表示出来 // 思路:直接上分数类模板.要注意ai可以小于0 #include <iostream> ...

  5. OC2_分数类

    // // Fraction.h // OC2_分数类 // // Created by zhangxueming on 15/6/10. // Copyright (c) 2015年 zhangxu ...

  6. 第十七周oj刷题——Problem B: 分数类的四则运算【C++】

    Description 编写分数类Fraction,实现两个分数的加.减.乘和除四则运算.主函数已给定. Input 每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束. Outpu ...

  7. Problem F: 分数类的类型转换

    Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作:   1. 构造:传入两个参数n和m,表示n/m:分数在构造时立即转化成最简分数. 2. show()函数:分数 ...

  8. Problem E: 分数类的输出

    Problem E: 分数类的输出 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2699  Solved: 1227[Submit][Status][ ...

  9. java的分数类

    概述 分数类在算法中非常重要, 而在java中不那么重要,java基础类库提供 了biginteger了,提供类似方式, package 组合数学; public class Fraction { p ...

随机推荐

  1. c++ string 的注意事项

    string 的reserve 和 resize 区别 reserve 与capacity相关,如果reserve一个比当前capacity大的 reserve 只会找到一块合适大小的内存,并将原始内 ...

  2. Opencv笔记(十九)——直方图(一)

    直方图概念 图像的构成是有像素点构成的,每个像素点的值代表着该点的颜色(灰度图或者彩色图).所谓直方图就是对图像的中的这些像素点的值进行统计,得到一个统一的整体的灰度概念.一般情况下直方图都是灰度图像 ...

  3. js获取当前页面名称

    // 取当前页面名称(不带后缀名) function pageName() { var a = location.href; var b = a.split("/"); var c ...

  4. USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)

    https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上 ...

  5. idea生成serialVersionUID

    默认情况下Intellij IDEA不会提示继承了Serializable接口的类生成serialVersionUID的警告.如果需要生成serialVersionUID,就要在Preferences ...

  6. EXAM-2018-8-9

    EXAM-2018-8-9 B 水题 注意理解题意 有坑 G 博弈 观察发现 总是会进行到最后两个,或者先手取完全部,再特判一下只有一张牌的情况 H 九连环 通过找规律 我们可以得出递推式: F[n] ...

  7. 分辨率与px的关系

    此篇文章的目的用于打印套打的位置计算,顺便科普下知识: 1寸=2.54厘米 14寸=355.6毫米 15.6寸=39.624厘米=396.24毫米: 21寸=533.4毫米 21.7寸=551.18毫 ...

  8. labview学习——用户界面模式

    根据事件的发出源,事件可以抽象地分为用户界面事件和用户自定义事件.相关的基本知识可以参考有关的书籍,这里不再阐述事件结构的使用方法. 下图所示的结构称为用户界面事件模式,它能够很便捷地响应各种事件并且 ...

  9. OpenCV 离散傅立叶变换

    #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" #include ...

  10. jtemplates使用+同内容列合并

    function ImportStatistics(val, pros) { top.$.jBox.tip("导入已完成,正在统计整理导入的数据...", 'loading'); ...