/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: CFraction.cpp
* 作 者: 计114-3 王兴锋
* 完成日期: 2012 年 4 月 16 日
* 版 本 号: V 2.0
* 对任务及求解方法的描述部分
* 输入描述:实现分数类中的运算符重载
* 问题描述:在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算
定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对
运算结果显示方式,使程序读起来更自然。
* 程序输出:运算后的结果
* 程序头部的注释结束
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
int gcd(int m, int n);
public:
//构造函数及运算符重载的函数声明
CFraction(int n = 1, int d = 1){if (d == 0) return;nume = n, deno = d;}
friend CFraction operator + (CFraction &c1, CFraction &c2);
friend CFraction operator - (CFraction &c1, CFraction &c2);
friend CFraction operator * (CFraction &c1, CFraction &c2);
friend CFraction operator / (CFraction &c1, CFraction &c2);
friend CFraction operator - (CFraction &c);
bool operator > (CFraction &c);
bool operator < (CFraction &c);
bool operator >= (CFraction &c);
bool operator <= (CFraction &c);
bool operator == (CFraction &c);
bool operator != (CFraction &c);
void simplify();
friend istream& operator >> (istream&, CFraction&);
friend ostream& operator << (ostream&, CFraction&);
};
void CFraction::simplify()
{
int n = gcd(deno, nume);
deno /= n; // 化简
nume /= n;
}
int CFraction::gcd(int m, int n)
{
int r;
if (m < n){r = m; m = n; n = r;}
while(r = m % n) // 求m,n的最大公约数
{
m = n;
n = r;
}
return n;
}
CFraction operator + (CFraction &c1, CFraction &c2)
{
CFraction c;
c.deno = c1.deno * c2.deno;
c.nume = c1.nume*c2.deno + c2.nume*c1.deno;
c.simplify();
return c;
}
CFraction operator - (CFraction &c1, CFraction &c2)
{
CFraction c;
c.deno = c1.deno * c2.deno;
c.nume = c1.nume*c2.deno - c2.nume*c1.deno;
c.simplify();
return c;
}
CFraction operator * (CFraction &c1, CFraction &c2)
{
CFraction c;
c.deno = c1.deno * c2.deno;
c.nume = c1.nume * c2.nume;
c.simplify();
return c;
}
CFraction operator / (CFraction &c1, CFraction &c2)
{
CFraction c;
c.deno = c1.deno * c2.nume;
c.nume = c1.nume * c2.deno;
c.simplify();
return c;
}
CFraction operator - (CFraction &c)
{
return CFraction(-c.nume, c.deno);
}
bool CFraction::operator > (CFraction &c)
{
CFraction cf(*this / c);
if (cf.nume/cf.deno > 1)
return true;
else
return false;
}
bool CFraction::operator < (CFraction &c)
{
CFraction cf(*this / c);
if (cf.nume/cf.deno < 1)
return true;
else
return false;
}
bool CFraction::operator >= (CFraction &c)
{
CFraction cf(*this / c);
if (cf.nume/cf.deno >= 1)
return true;
else
return false;
}
bool CFraction::operator <= (CFraction &c)
{
CFraction cf(*this / c);
if (cf.nume/cf.deno <= 1)
return true;
else
return false;
}
bool CFraction::operator == (CFraction &c)
{
CFraction cf(*this / c);
if (cf.nume/cf.deno == 1)
return true;
else
return false;
}
bool CFraction::operator != (CFraction &c)
{
CFraction cf(*this / c);
if (cf.nume/cf.deno != 1)
return true;
else
return false;
}
istream& operator >> (istream& input, CFraction& cf)
{
cout << "请输入分子分母(nume deno):" << endl;
input >> cf.nume >> cf.deno;
return input;
}
ostream& operator << (ostream& output, CFraction& cf)
{
output << cf.nume << "/" << cf.deno;
return output;
}
//重载函数的实现及用于测试的main()函数
void main()
{
//CFraction c1(3, 8), c2(1, 8), c3(1, 8);
CFraction c1, c2, c3;
cin >> c1 >> c2 >> c3;
cout << "c1=" << c1 << endl;
cout << "c2=" << c2 << endl;
cout << "c3=" << c3 << endl;
if (c1 > c2) cout << "c1 > c2" << endl;
if (c2 < c1) cout << "c2 < c1" << endl;
if (c2 >= c3) cout << "c2 >= c3" << endl;
if (c2 <= c3) cout << "c2 <= c3" << endl;
if (c2 == c3) cout << "c2 == c3" << endl;
if (c1 != c2) cout << "c1 != c2" << endl;
cout << "c1+c2=" << (c1 + c2) << endl;
cout << "c1-c2=" << (c1 - c2) << endl;
cout << "c1*c2=" << (c1 * c2) << endl;
cout << "c1/c2=" << (c1 / c2) << endl;
system("PAUSE");
}
/*
程序就是一点一点写出来的,你写的越多你就会越熟练。
*/
分享到:
相关推荐
比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储...
Character <br>Standard C Math <br>Standard C Time & Date <br>Standard C Memory <br>Other standard C functions <br>All C Functions<br>C++<br>C++ I/O <br>C++ Strings <br>C++ String Streams <br>...
C++ 程序设计实验报告----车辆信息管理系统
<br><br><br>实验八 综合实验<br>内容及步骤:<br>1、请使用C++编写班级学生学籍管理程序<br>每个学生的信息包括:姓名、学号和英语、数学、程序设计及体育成绩。从键盘输入数据,建立数据文件student.dat,然后,...
--- 3.4 文档,视,框架之间相互作用<br>|------ 3.5 利用序列化进行文件读写<br>|------ 3.6 MFC中所提供的各种视类介绍<br>+-- 第四章 窗口控件 <br>|------ 4.1 Button<br>|------ 4.2 Static Box<br>|------ 4.3...
配置文件定义数据库连接和命令,运行即可。配置示例: <system_config> <!-- 数据库配置 --> <DatabaseSqlServer server="(local)" user="sa" password="123" dbname="db" /> <!-- 要执行的命令 --> ...
Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-...
源程序 lab8_1.cpp #include<iostream> C++上机实验报告-实验六全文共11页,当前为第2页。C++上机实验报告-实验六全文共11页,当前为第2页。using namespace std; C++上机实验报告-实验六全文共11页,当前为第2页。...
使用说明<br><br> □ 程序装载<br><br> - 安装或卸载:执行 setup.exe<br><br> □ 任务栏图标<br><br> - 双击程序任务栏图标,即可打开发送窗口<br><br> - 在任务栏图标上点右键可进入 [ 服务设置 ]、[ 离开 ]<br>...
#include<iostream> using namespace std; template<class Type> class BinaryTree; template<class Type> class BinTreeNode { friend class BinaryTree<Type>; private: BinTreeNode<Type> *leftChild,*right...
│ <br>│ └─13943 C++面向对象程序设计-电子教案<br>│ C++1.ppt<br>│ C++10.ppt<br>│ C++2.ppt<br>│ C++3.ppt<br>│ C++4.ppt<br>│ C++5.ppt<br>│ C++6.ppt<br>│ C++7.ppt<br>│ C++8.ppt<br>│ C++9....
实验一、C++开发环境应用入门(2学时)<br><br>1、实验目的<br>了解C++开发工具的特点<br>熟悉C++开发环境<br>学习用C++编写标准的C++程序<br> 2、实验任务<br> 使用C++来建立一个非图形化的标准C++程序,编译、...
)<br><br><br>词汇表:<br><br>项目属性 pproperties<br><br>配置属性 Configuration Properties<br><br>预处理器 Preprocessor<br><br>预处理器定义 Preprocessor<br><br>语言 Language<br><br>将wchar_t视为内置...
------ 3.3 使用菜单 <br/>|------ 3.4 文档,视,框架之 间相互作用 <br/>|------ 3.5 利用序列化进行文件读写<br/>|------ 3.6 MFC中所提供的各种视类介绍<br/>+-- 第四章 窗口控件 <br/>|------ 4.1 Button<br/>|...
1.自定义分数类fraction,使用该类可以完成分数的输入、分数的加、减、乘、除二目运算和一目减运算、分数的约分操作、分数的倒数运算、对两个分数进行六种比较运算、以及对分数的输出等操作。 2.将其中使用的普通...
C++实验报告--继承和派生.pdf
/*file<<first->mole<<"/"<<first->deno<<" "<<p->link->mole<<"/"<<p->link->deno;*/ while (p->link!= NULL){ if (p->deno + p->link->deno <= n) { LinkNode<T>*q=new LinkNode<T>; q->mole = p->mole + p...
1,01.zip<br>Output<br>显示所有的调试信息(5KB)<END><br>2,02.zip<br>Some general debugging tips<br>一般的调试技巧(11KB)<END><br>3,03.zip<br>Debugging ISAPI extension<br>调试ISAPI扩展(4KB)<END><br>4,04....
C++上机实验报告-实验五全文共7页,当前为第1页。C++上机实验报告-实验五全文共7页,当前为第1页。实验五 继承与派生 C++上机实验报告-实验五全文共7页,当前为第1页。 C++上机实验报告-实验五全文共7页,当前为第1...