第8周任务3(实现分数类中的运算符重载)
来源:互联网 发布:阿里云 ecs 带宽 编辑:程序博客网 时间:2024/05/22 02:07
/* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名称: * 作 者: 臧鹏 * 完成日期: 2012 年 4 月 9 日* 版 本 号: * 对任务及求解方法的描述部分* 输入描述:* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简),求反。比较(6中关系)的运算。* 程序输出: * 程序头部的注释结束*/#include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1); //构造函数,初始化用 void Set(int nu=0,int de=1); //置值,改变值时用CFraction operator+(CFraction &t); CFraction operator-(CFraction &t);CFraction operator*(CFraction &t);CFraction operator/(CFraction &t); friend CFraction operator-(CFraction &t);//取反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(int n); //化简(使分子分母没有公因子) int gcd(int x,int y); void output(int style=0); //输出:以8/6为例,style为0时,输出8/6;CFraction(int nu=0,int de=1); //构造函数,初始化用 }; CFraction::CFraction(int nu,int de) { nume = nu; deno = de; } void CFraction::Set(int nu,int de) //置值,改变值时用 { if(de !=0) { nume = nu; deno = de; } else { cout<<"分母不能为零"<<endl; exit(0); } nume = nu; deno = de; } void CFraction::Simplify(int n) //化简(使分子分母没有公因子) { n = gcd(nume,deno); nume = nume/n; deno = deno/n; } int CFraction::gcd(int x,int y) //求公约数的函数{ int r; while( y!= 0) { r = x%y; x = y; y = r; } return x; } void CFraction::output(int style) //输出:以8/6为例,style为0时,输出8/6;CFraction(int nu=0,int de=1); //构造函数,初始化用 { switch(style) { case 0: { cout<<nume<<'/'<<deno<<endl; break; } case 1: { int m = gcd(nume,deno); cout<<(nume/m)<<'/'<<(deno/m)<<endl; break; } case 2: { int nu,de,g; g = gcd(nume,deno); nu = nume/g; de = deno/g; cout<<(nu/de)<<"("<<(nu%de)<<'/'<<de<<")"<<endl; break; } default: { cout<<nume<<'/'<<deno<<endl; } } } CFraction CFraction:: operator+(CFraction &t){CFraction cf; if(deno==t.deno) //分母相同时比较分子{ cf.deno=deno; cf.nume=nume+t.nume; } else //否则同分比较分子{ cf.deno=deno*t.deno; cf.nume=nume*t.deno+deno*t.nume; } return cf; }CFraction CFraction:: operator-(CFraction &t){CFraction cf; if(deno==t.deno) { cf.deno=deno; cf.nume=nume-t.nume; } else { cf.deno=deno*t.deno; cf.nume=t.deno*nume-t.nume*deno; } return cf; }CFraction CFraction:: operator*(CFraction &t){CFraction cf;cf.deno = deno*t.deno;cf.nume = nume*t.nume;return cf;}CFraction CFraction:: operator/(CFraction &t){CFraction cf;cf.deno = deno*t.nume;cf.nume = nume*t.deno;return cf;}CFraction operator-(CFraction &t)//取反 {CFraction cf;cf.deno = -t.deno;cf.nume = t.nume;return(cf);}bool CFraction::operator>(CFraction &t){if(nume*t.deno>t.nume*deno)return true;elsereturn false;}bool CFraction::operator<(CFraction &t){if(nume*t.deno<t.nume*deno)return true;elsereturn false;}bool CFraction::operator>=(CFraction &t){if(nume*t.deno>t.nume*deno||nume*t.deno==t.nume*deno)return true;elsereturn false;}bool CFraction::operator<=(CFraction &t) {if(nume*t.deno<t.nume*deno||nume*t.deno==t.nume*deno)return true;elsereturn false;}bool CFraction::operator==(CFraction &t){if(nume*t.deno==t.nume*deno)return true;elsereturn false;}bool CFraction::operator!=(CFraction &t){if(!operator==(t))return true;elsereturn false;}int main () { CFraction cf1(17,5),cf2(9,6),cf3;cout<<"cf1 =";cf1.output ();cout<<"cf2 =";cf2.output ();cf3=cf1*cf2; cout<<"cf1*cf2="; cf3.output();cout<<"约分后:";cf3.output(1);cout<<"化简后的形式:"; cf3.output(2);cf3=cf1-cf2; cout<<"cf1-cf2=";cf3.output(1);cf3=cf1+cf2; cout<<"cf1+cf2="; cf3.output(1); cf3=cf1/cf2; cout<<"cf1/cf2="; cf3.output(1); cf3=-cf1; cout<<"-cf1 =";cf3.output(1);if (cf1>cf2) cout<<"cf1>cf2"<<endl; if (cf1<cf2) cout<<"cf1<cf2"<<endl; if (cf1==cf2) cout<<"cf1=cf2"<<endl; if (cf1!=cf2) cout<<"cf1≠cf2"<<endl; if (cf1>=cf2) cout<<"cf1≥cf2"<<endl;if (cf1<=cf2) cout<<"cf1≤cf2"<<endl; system("pause"); return 0; }
经验积累:
分数类的四则运算可以用我们现实求分数的方法,又复习了一下第5周任务2的那个求公约数的函数,方法很巧。
- 第8周任务3(实现分数类中的运算符重载)
- 第8周-任务3-实现分数类中的运算符重载
- 第8章-任务4-实现分数类中的运算符重载(分数与整数运算)
- 第9周任务3(实现分数类中<<和>>运算符的重载)
- 第八周任务3:实现分数类中的运算符重载
- 第八周任务三(实现分数类中的运算符重载)
- 第8周-项目3-分数类中的运算符重载(续)-++、--、>>、<<
- 第8周项目3-分数类中的运算符重载(续)
- 《C++第九周实验报告3-1》----接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出
- 第7周-项目3-分数类中的运算符重载-拓展分数的加减乘除(分数与整型 )
- C++第9周项目3 - 实现分数类中的运算符重载
- 8-3 实现分数类中的运算符重载
- 8-3 实现分数类中的运算符重载
- c++第八周【任务3】实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 第八周任务三:实现分数类中的运算符重载
- 第7周-项目3-分数类中的运算符重载-分数的加减乘除
- C++第8周项目3 - 分数类中的运算符重载
- C++第8周(春)项目3 分数类中的运算符重载
- 关于Regex例子
- android开发新浪微博客户端 完整攻略 [新手必读]
- CMake with Eclipse:UNIX Makefile Generator
- 2012年4月9日
- 呵呵,今天看了一些管理学的科普文章,感觉还不错
- 第8周任务3(实现分数类中的运算符重载)
- hdu 3976 Electric resistance 高斯消元
- SSH中.动态获取spring IoC容器中管理的bean,dao
- 图像处理技术 —— 模板匹配算法
- 《C++第八周实验报告1-1(1)》---复数类中的运算符重载用类的成员函数完成
- 第八周实验报告2
- 《C++第八周实验报告1-1(2)》----复数类中的运算符重载,用类的友元函数
- android 70个面试题
- keil :error:Flasg Download failed - ARM7TDMI