C++有理数运算.doc_第1页
C++有理数运算.doc_第2页
C++有理数运算.doc_第3页
C++有理数运算.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 有理数运算有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C+中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符=实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。#include using namespace std; /numerator 分子 /denominator分母 int gcd(int m,int n) /求最大公约数函数,用于约分 if(n=0)return m; return gcd(n,m%n); class fraction private: int numer; int denom; public: fraction(int n=0,int d=1)/带默认参数的构造函数,整数与分数的运算迎刃而解 numer=n; denom=d; void rev(fraction &a)numer=a.denom;denom=a.numer;/倒数friend ostream& operator(std:istream&, fraction&); /重载输入friend bool operator=(const fraction&, const fraction&); /判断有理数是否相等,以下类似friend bool operator(const fraction&, const fraction&);friend bool operator=(const fraction&, const fraction&);friend bool operator=(const fraction&, const fraction&);friend fraction operator +(const fraction&,const fraction&);/重载运算符friend fraction operator -(const fraction&,const fraction&);friend fraction operator *(const fraction&,const fraction&);friend fraction operator /(const fraction&,const fraction&);friend bool operator!=(const fraction&, const fraction&); fraction operator +(const fraction &a,const fraction &b) fraction p; p.numer=a.numer*b.denom+b.numer*a.denom; p.denom=a.denom*b.denom; return p;fraction operator -(const fraction &a,const fraction &b) fraction p; p.numer=a.numer*b.denom-b.numer*a.denom; p.denom=a.denom*b.denom; return p;fraction operator *(const fraction &a,const fraction &b) fraction p; p.numer=a.numer*b.numer; p.denom=a.denom*b.denom; return p;fraction operator /(const fraction &a,const fraction &b) fraction p; p.numer=a.numer*b.denom; p.denom=a.denom*b.numer; return p;ostream& operator(ostream& output,const fraction &num) int a=gcd(num.numer,num.denom);if(num.denom/a)=1)outputnum.numer/a;else if(num.denom/a0) output-num.numer/a/-num.denom/a; else outputnum.numer/a/(istream&input, fraction& num) inputnum.numernum.denom; return input; bool operator=(const fraction&num1, const fraction&num2) return (num1.numer*num2.denom)=(num2.numer*num1.denom); bool operator!=(const fraction &num1, const fraction &num2) return (num1.numer*num2.denom)!=(num2.numer*num1.denom);bool operator(const fraction&a, const fraction&b) return (a.numer*b.denom)(const fraction&a, const fraction&b) return (a.numer*b.denom)(b.numer*a.denom); bool operator=(const fraction&a, const fraction&b) return (a.numer*b.denom)=(const fraction&a, const fraction&b) return (a.numer*b.denom)=(b.numer*a.denom); int main() fraction zrf(1,7),ssh(26,65);fraction p;p.rev(ssh);coutssh=sshn1/ssh=pendl;coutzrf=zrfnssh=sshn ; cout(zrf=ssh)=(zrf=ssh)n(zrfssh)=(zrf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论