C++实现有理数类加减乘除
C++上机题,题目如下:
设计一个有理数类,要求如下:
有理数有整数类型的分子、分母组成,通过运算符重载,完成有理数的加、减、乘、除运算,运算结果要求为最简分数,即分子分母没有公约数。在主程序中测试类与方法。
不多废话,完整代码我已经贴出来了,注释也很详细,唯一要注意的就是分母不能为0和第二个有理数的分子也不能为0(因为除数不能为0)。希望对初学C++,碰巧有类似练习的童鞋有帮助@_@
#include <iostream>
#include <cmath>
//numerator分子 denominator分母
using namespace std;
class Rational {
public:Rational(int n=0,int d=1):num(n),den(d) {} //有参构造函数friend Rational operator+(const Rational &r1,const Rational &r2);//相加friend Rational operator-(const Rational &r1,const Rational &r2);//相减friend Rational operator/(const Rational &r1,const Rational &r2);//相除friend Rational operator*(const Rational &r1,const Rational &r2);//相乘void simplify();//对有理数进行化简void display(); //显示结果
private :double num;double den;};
Rational operator+(const Rational &r1,const Rational &r2) {Rational r;r.num = r1.den*r2.num+r1.num*r2.den;//相加的分子等于r1分母和r2分子相乘,r1分子和r2分母相乘之和r.den = r1.den*r2.den;//分母等于两个有理数分母的相乘r.simplify();//调用simplify对结果进行化简return r;//将结果返回
}
Rational operator-(const Rational &r1,const Rational &r2) {Rational r;r.num = r1.num*r2.den-r1.den*r2.num;//相加的分子等于r1分母和r2分子相乘,r1分子和r2分母相乘之差r.den = r1.den*r2.den;//分母等于两个有理数分母的相乘r.simplify();return r;
}
Rational operator/(const Rational &r1,const Rational &r2) {Rational r;if(r1.den==0||r2.den==0||r2.num==0) {cout<<"分母或者除数不能为0"<<endl;} else if(r1.num==0) {cout<<"0/0"<<endl;} else {r.num = r1.num*r2.den;//相除的分子等于r1分子和r2分母相乘r.den = r1.den*r2.num;//分母等于两个r1分母和r2分子相乘r.simplify();return r;}
}
Rational operator*(const Rational &r1,const Rational &r2) {Rational r;if(r1.den==0||r2.den==0) {cout<<"分母不能为0"<<endl;} else if(r1.num==0||r2.num==0) {cout<<"0/0"<<endl;} else {r.num = r1.num*r2.den;//分子等于r1分子和r2分母相乘r.den = r1.den*r2.num;//分母等于两个r1分母和r2分子相乘r.simplify();return r;}
}
void Rational::simplify() {int i,j,temp;i=abs(den);j=abs(num);//如果i对j取余不为0,辗转相除法求最大公约数while(temp=i%j) {i=j;j=temp;}den/=j;num/=j;if(den<0) {den=-den;num=-num;}
}
void Rational::display() {if(num==0||den==0) {} else {cout<<num<<"/"<<den<<endl;}
}
int main() {Rational r;Rational r1(1,3),r2(0,5);r=r1+r2;r.display();r=r1-r2;r.display();r=r1*r2;r.display();r=r1/r2;r.display();return 0;
}
C++实现有理数类加减乘除相关推荐
- C++实现一个有理数类,包括大小比较,有理数的加减乘除。测试你的类。
//实现一个有理数类,包括大小比较,有理数的加减乘除.测试你的类. #include <iostream> #include <stdlib.h>class Rational ...
- 有理数类的定义与实现
一个有理数是由一个分子和分母组成的a/b形式的数.我们知道一般程序语言里已经定义了整形类,浮点型,字符型,但并不支持有理数型.这对于分数的精确计算如1/3=0.33333....不能用double 或 ...
- 蓝桥杯乘法运算java,第四届蓝桥杯Java B——有理数类
有理数就是可以表示为两个整数的比值的数字.一般情况下,我们用近似的小数表示.但有些时候,不允许出现误差,必须用两个整数来表示一个有理数. 这时,我们可以建立一个"有理数类",下面的 ...
- 蓝桥杯JAVA省赛2013-----B------5(有理数类)
五.有理数类 [答案]:Rational(this.rax.rb + this.rbx.ra, this.rb*x.rb) public class Test01 {static class Rati ...
- java有理数类的封装_java实验报告有理数的类封装.doc
java实验报告有理数的类封装 华中科技大学文华学院 <Java程序设计>实验报告 实验三:有理数的类封装 专业班级: 通信工程2008级1班 姓名: 学号: 时间: 实验三:有理数的类封 ...
- (有理数类 )创建一个名为Rational的类,进行分数运算。
原题目是 (有理数类 )创建一个名为Rational的类,进行分数运算.编写一个程序测试这个类. 用整数变量表示类的private数据:numerator( 分子)和denominator(分母).提 ...
- 【每日蓝桥】5、一三年省赛Java组真题“有理数类”
你好呀,我是灰小猿,一个超会写bug的程序猿! 欢迎大家关注我的专栏"每日蓝桥",该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想.数据结构等内容, ...
- C++面向对象程序设计实验题:有理数类(分数类)设计
C++实验题:有理数类(分数类)设计 问题描述: 根据main测试函数设计有理数类CRational,数据成员由分子.分母组成(都是整型,应表示成最简形式),完成分数显示(如用户输入的分子是4,分母是 ...
- 以下为一个有理数类,一个有理数由分子和分母组成,目前定义了一个输出函数 十七、编写一个加法函数,可以接收另一个有理数,与自身的值相加 十八、编写一个乘法函数,同理接收另一个有理数,与自身的值相乘
以下为一个有理数类,一个有理数由分子和分母组成,目前定义了一个输出函数 十七.编写一个加法函数,可以接收另一个有理数,与自身的值相加 十八.编写一个乘法函数,同理接收另一个有理数,与自身的值相乘 十九 ...
最新文章
- Google和网易有道合作开课了
- 详细介绍Vue的数据响应式
- linux环境对apk文件写入数据,Linux下7zip命令apk中插入文件标识渠道批量打包
- 从《芈月传》看热门IP在互联网视频行业的“前世今生”
- 【简便解法】1068 万绿丛中一点红 (20分)
- php拼接xml特殊字符不显示,使用PHP的XML特殊字符
- 34营销的三要素:真实诚信、诱饵引入、合理宣传
- 最安全的浏览器?黑客大赛微软Edge被破解5次夺下“冠军”
- 数据分析报告应该包含的内容
- android shell强制删除文件夹_【代码合集】VBA操作文件夹代码合集
- 【超图+CESIUM】【基础API使用示例】48、超图|CESIUM - 漫游飞行效果
- 奥城大学计算机专业,美国研究生双录取的大学及可提供学位详情
- MarkDown 编辑器字体改颜色大小等常用操作
- HTML+CSS+JAVASCRIPT 高仿低配网页版网易云音乐播放器 1
- 自制拖把机器人_懒出新境界:可以自己洗拖布的机器人
- 要不要启用苹果wapi_苹果“史上最强”系统ios13来了,要不要升级?
- poi 替换word里的\n 变成 换行
- “第二期政府CIO论坛”顺利举行
- android+饭否+开源,fanfou(饭否) android客户端 代码学习一
- OSChina 周四乱弹 ——心有鱼,而力不足