`
txf2004
  • 浏览: 6853375 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《C++第九周实验报告3-1》----接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出

 
阅读更多
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* 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");
}
/*
程序就是一点一点写出来的,你写的越多你就会越熟练。
*/

分享到:
评论

相关推荐

    c++笔试题汇总 ①链表反转 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:

    比如一个链表是这样的: 1-&gt;2-&gt;3-&gt;4-&gt;5 通过反转后成为5-&gt;4-&gt;3-&gt;2-&gt;1。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储...

    C /C++库函数及文件大全 经典 chm

    Character &lt;br&gt;Standard C Math &lt;br&gt;Standard C Time & Date &lt;br&gt;Standard C Memory &lt;br&gt;Other standard C functions &lt;br&gt;All C Functions&lt;br&gt;C++&lt;br&gt;C++ I/O &lt;br&gt;C++ Strings &lt;br&gt;C++ String Streams &lt;br&gt;...

    C++ 程序设计实验报告----车辆信息管理系统.doc

    C++ 程序设计实验报告----车辆信息管理系统

    数据结构(C++)有关练习题

    &lt;br&gt;&lt;br&gt;&lt;br&gt;实验八 综合实验&lt;br&gt;内容及步骤:&lt;br&gt;1、请使用C++编写班级学生学籍管理程序&lt;br&gt;每个学生的信息包括:姓名、学号和英语、数学、程序设计及体育成绩。从键盘输入数据,建立数据文件student.dat,然后,...

    闻怡洋VC基础教程

    --- 3.4 文档,视,框架之间相互作用&lt;br&gt;|------ 3.5 利用序列化进行文件读写&lt;br&gt;|------ 3.6 MFC中所提供的各种视类介绍&lt;br&gt;+-- 第四章 窗口控件 &lt;br&gt;|------ 4.1 Button&lt;br&gt;|------ 4.2 Static Box&lt;br&gt;|------ 4.3...

    C++实现通过配置文件定义sql命令修改SQLServer数据库程序

    配置文件定义数据库连接和命令,运行即可。配置示例: &lt;system_config&gt; &lt;!-- 数据库配置 --&gt; &lt;DatabaseSqlServer server="(local)" user="sa" password="123" dbname="db" /&gt; &lt;!-- 要执行的命令 --&gt; ...

    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-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-...

    C++上机实验报告-实验六.docx

    源程序 lab8_1.cpp #include&lt;iostream&gt; C++上机实验报告-实验六全文共11页,当前为第2页。C++上机实验报告-实验六全文共11页,当前为第2页。using namespace std; C++上机实验报告-实验六全文共11页,当前为第2页。...

    飞鸽传书 IP Messenger

    使用说明&lt;br&gt;&lt;br&gt; □ 程序装载&lt;br&gt;&lt;br&gt; - 安装或卸载:执行 setup.exe&lt;br&gt;&lt;br&gt; □ 任务栏图标&lt;br&gt;&lt;br&gt; - 双击程序任务栏图标,即可打开发送窗口&lt;br&gt;&lt;br&gt; - 在任务栏图标上点右键可进入 [ 服务设置 ]、[ 离开 ]&lt;br&gt;...

    c++实验----------二叉树代码

    #include&lt;iostream&gt; using namespace std; template&lt;class Type&gt; class BinaryTree; template&lt;class Type&gt; class BinTreeNode { friend class BinaryTree&lt;Type&gt;; private: BinTreeNode&lt;Type&gt; *leftChild,*right...

    C++经典课件(PPT幻灯)汇集.rar(整理)V20080505A

    │ &lt;br&gt;│ └─13943 C++面向对象程序设计-电子教案&lt;br&gt;│ C++1.ppt&lt;br&gt;│ C++10.ppt&lt;br&gt;│ C++2.ppt&lt;br&gt;│ C++3.ppt&lt;br&gt;│ C++4.ppt&lt;br&gt;│ C++5.ppt&lt;br&gt;│ C++6.ppt&lt;br&gt;│ C++7.ppt&lt;br&gt;│ C++8.ppt&lt;br&gt;│ C++9....

    《面向对象c++》程序设计

    实验一、C++开发环境应用入门(2学时)&lt;br&gt;&lt;br&gt;1、实验目的&lt;br&gt;了解C++开发工具的特点&lt;br&gt;熟悉C++开发环境&lt;br&gt;学习用C++编写标准的C++程序&lt;br&gt; 2、实验任务&lt;br&gt; 使用C++来建立一个非图形化的标准C++程序,编译、...

    发布ezWinCE 0.2 Bate

    )&lt;br&gt;&lt;br&gt;&lt;br&gt;词汇表:&lt;br&gt;&lt;br&gt;项目属性 pproperties&lt;br&gt;&lt;br&gt;配置属性 Configuration Properties&lt;br&gt;&lt;br&gt;预处理器 Preprocessor&lt;br&gt;&lt;br&gt;预处理器定义 Preprocessor&lt;br&gt;&lt;br&gt;语言 Language&lt;br&gt;&lt;br&gt;将wchar_t视为内置...

    Visual C++/MFC入门教程

    ------ 3.3 使用菜单 &lt;br/&gt;|------ 3.4 文档,视,框架之 间相互作用 &lt;br/&gt;|------ 3.5 利用序列化进行文件读写&lt;br/&gt;|------ 3.6 MFC中所提供的各种视类介绍&lt;br/&gt;+-- 第四章 窗口控件 &lt;br/&gt;|------ 4.1 Button&lt;br/&gt;|...

    定义和使用分数类fraction

    1.自定义分数类fraction,使用该类可以完成分数的输入、分数的加、减、乘、除二目运算和一目减运算、分数的约分操作、分数的倒数运算、对两个分数进行六种比较运算、以及对分数的输出等操作。 2.将其中使用的普通...

    C++实验报告--继承和派生.pdf

    C++实验报告--继承和派生.pdf

    法雷序列链表算法

    /*file&lt;&lt;first-&gt;mole&lt;&lt;"/"&lt;&lt;first-&gt;deno&lt;&lt;" "&lt;&lt;p-&gt;link-&gt;mole&lt;&lt;"/"&lt;&lt;p-&gt;link-&gt;deno;*/ while (p-&gt;link!= NULL){ if (p-&gt;deno + p-&gt;link-&gt;deno &lt;= n) { LinkNode&lt;T&gt;*q=new LinkNode&lt;T&gt;; q-&gt;mole = p-&gt;mole + p...

    Visual C++ 编程资源大全(英文源码 其它)

    1,01.zip&lt;br&gt;Output&lt;br&gt;显示所有的调试信息(5KB)&lt;END&gt;&lt;br&gt;2,02.zip&lt;br&gt;Some general debugging tips&lt;br&gt;一般的调试技巧(11KB)&lt;END&gt;&lt;br&gt;3,03.zip&lt;br&gt;Debugging ISAPI extension&lt;br&gt;调试ISAPI扩展(4KB)&lt;END&gt;&lt;br&gt;4,04....

    C++上机实验报告-实验五.docx

    C++上机实验报告-实验五全文共7页,当前为第1页。C++上机实验报告-实验五全文共7页,当前为第1页。实验五 继承与派生 C++上机实验报告-实验五全文共7页,当前为第1页。 C++上机实验报告-实验五全文共7页,当前为第1...

Global site tag (gtag.js) - Google Analytics