C++第八周【任务四】分数类中的对象可以和整型数进行四则运算,且运算符合交换律。
2012-04-18 11:09
393 查看
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称 :C++第八周【任务四】分数类中的对象可以和整型数进行四则运算,且运算符合交换律。 * 作 者: 李洪悬 * 完成日期: 2012 年 4 月 16 日 * 版 本 号: * 对任务及求解方法的描述部分 * 输入描述: * 问题描述:分数类中的对象可以和整型数进行四则运算,且运算符合交换律
* 程序输出: * 程序头部的注释结束 */
【任务4】在任务3的基础上拓展。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。
#include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 int gcd(int nu, int de); public: //构造函数及运算符重载的函数声明 CFraction(int nu = 0, int de = 1):nume(nu), deno(de){}; //构造函数,初始化用 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); friend CFraction operator + (CFraction &c, int s); friend CFraction operator - (CFraction &c, int s); friend CFraction operator * (CFraction &c, int s); friend CFraction operator / (CFraction &c, int s); friend CFraction operator + (int s, CFraction &c); friend CFraction operator - (int s, CFraction &c); friend CFraction operator * (int s, CFraction &c); friend CFraction operator / (int s, CFraction &c); bool operator > (CFraction &t); bool operator < (CFraction &t); bool operator >= (CFraction &t); bool operator <= (CFraction &t); bool operator == (CFraction &t); bool operator != (CFraction &t); void Simplify(); //化简(使分子分母没有公因子) void display(); }; //重载函数的实现及用于测试的main()函数 void CFraction::Simplify() { int n ; if(nume < 0 && deno > 0) { n = gcd(-nume, deno); } else if(nume > 0 && deno > 0) { n = gcd(nume, deno); } else if(nume > 0 && deno < 0) { n = gcd(nume, -deno); } else if(nume < 0 && deno < 0) { n = -gcd(-nume, -deno); } nume = nume / n; deno = deno / n; } int CFraction::gcd(int nu, int de) { int t, r, a, b; a = nu; b = de; if (a < b) { t = a; a = b; b = t; } while (b != 0) { r = a % b; a = b; b = r; } return a; } void CFraction::display() { cout << nume << "/" << deno << endl; } CFraction operator + (CFraction &c1,CFraction &c2) { CFraction c; c.nume = c1.nume * c2.deno + c2.nume * c1.deno; c.deno = c1.deno * c2.deno; return c; } CFraction operator - (CFraction &c1,CFraction &c2) { CFraction c; c.nume = c1.nume * c2.deno - c2.nume * c1.deno; c.deno = c1.deno * c2.deno; return c; } CFraction operator * (CFraction &c1,CFraction &c2) { CFraction c; c.nume = c1.nume * c2.nume; c.deno = c1.deno * c2.deno; return c; } CFraction operator / (CFraction &c1,CFraction &c2) { CFraction c; c.nume = c1.nume * c2.deno; c.deno = c1.deno * c2.nume; return c; } CFraction operator - (CFraction &c) { c.nume = 0 - c.nume; return c; } bool CFraction::operator > (CFraction &t) { if(nume * t.deno > t.nume * deno) { return true; } else { return false; } } bool CFraction::operator < (CFraction &t) { if(nume * t.deno < t.nume * deno) { return true; } else { return false; } } bool CFraction::operator >= (CFraction &t) { if(nume * t.deno >= t.nume * deno) { return true; } else { return false; } } bool CFraction::operator <= (CFraction &t) { if(nume * t.deno <= t.nume * deno) { return true; } else { return false; } } bool CFraction::operator == (CFraction &t) { if(nume * t.deno == t.nume * deno) { return true; } else { return false; } } bool CFraction::operator != (CFraction &t) { if(nume * t.deno != t.nume * deno) { return true; } else { return false; } } CFraction operator + (CFraction &c, int s) { CFraction c2 = c; c2.nume = c.nume + s * c.deno; return c2; } CFraction operator - (CFraction &c, int s) { CFraction c2 = c; c2.nume = c.nume - s * c.deno; return c2; } CFraction operator * (CFraction &c, int s) { CFraction c2 = c; c2.nume = c.nume * s; return c2; } CFraction operator / (CFraction &c, int s) { CFraction c2 = c; c2.deno = c.deno * s; return c2; } CFraction operator + (int s, CFraction &c) { CFraction c2 = c; c2.nume = c.nume + s * c.deno; return c2; } CFraction operator - (int s, CFraction &c) { CFraction c2 = c; c2.nume = s * c.deno - c.nume; return c2; } CFraction operator * (int s, CFraction &c) { CFraction c2 = c; c2.nume = s * c.nume; return c2; } CFraction operator / (int s, CFraction &c) { CFraction c2 = c; c2.nume = s * c.deno; c2.deno = c.nume; return c2; } void main() { CFraction c1(-3, -6), c2(2, 7), c; cout << "c1 =" ; c1.Simplify(); c1.display(); cout << "c2 =" ; c2.Simplify(); c2.display(); c = c1 + c2; c.Simplify(); cout << "c1 + c2 ="; c.display(); c = c1 - c2; c.Simplify(); cout << "c1 - c2 ="; c.display(); c = c1 * c2; c.Simplify(); cout << "c1 * c2 ="; c.display(); c = c1 / c2; c.Simplify(); cout << "c1 / c2 ="; c.display(); c = c1 + 2; cout << "c1 + 2 ="; c.Simplify(); c.display(); c = 2 - c2; cout << "2 - c2 ="; c.Simplify(); c.display(); c = c1 * 2; cout << "c1 * 2 ="; c.Simplify(); c.display(); c = 2 / c2; cout << "2 / c2 ="; c.Simplify(); c.display(); c = - c1; cout << "-c1 ="; c.display(); if(c1 > c2) { cout << "c1 > c2" << endl; } if(c1 < c2) { cout << "c1 < c2" << endl; } if(c1 >= c2) { cout << "c1 ≥ c2" << endl; } if(c1 <= c2) { cout << "c1 ≤ c2" << endl; } if(c1 == c2) { cout << "c1 = c2" << endl; } if(c1 != c2) { cout << "c1 ≠ c2" << endl; } system("pause"); }
相关文章推荐
- 第八周上机任务四--实现分数类中的运算符重载,分数类中的对象可以和整型数进行四则运算,且运算符合交换律
- 第八周实验报告任务4 实现分数类中的运算符重载,分数类中的对象可以和整数型进行四则运算,且运算符合交换律。
- 实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+
- 在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。
- 第八周任务四(分数类中的对象可以和整型数进行四则运算)
- 第8周任务4(分数类中的对象可以和整型数进行四则运算,且满足交换律)
- c++第八周【任务3】实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 第八周任务三实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 《C++第八周实验报告3-1》---实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算
- 第八周实验任务三--实现分数类中的运算符重载并可以完成分数的加减乘除、求反、比较的运算
- 第十五周C++【任务二】设计分数类,开发一个窗口式程序,可以完成分数的四则运算
- 第八周实验报告任务3 实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除,求反,比较6种关系的运算。
- C++第5周任务【任务2】本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- 第八周实验任务三--实现分数类中的运算符重载并可以完成分数的加减乘除、求反、比较的运算
- 第八周项目一の任务三----扩展功能,使之能与double型数据进行运算
- C++中的初始化列表中可以对那些变量或对象进行初始化
- C++中的初始化列表中可以对那些变量或对象进行初始化
- 第十五周实验--任务2--设计分数类,开发一个窗口式程序,可以完成分数的四则运算。
- 《C++第八周实验报告1-1(3)》---在方案二的基础上,扩展+、-、*、/运算符的功能,使之能与double型数据进行运算