第十章课后习题(10,11)

您所在的位置:网站首页 分母不可以为负数 第十章课后习题(10,11)

第十章课后习题(10,11)

2024-07-12 17:14:58| 来源: 网络整理| 查看: 265

10.10( RationalNumber 类)

创建类RationalNumber ( 分数) , 使其具备下列能力: a ) 创建一个构造函数, 它可以防止分数的分母为0 。如果分数不是化简形式, 它可以进行化简。而且, 它还可以避免分母为负数 b) 针对该类, 重载加法、减法、乘法和除法运算符。 c) 针对该类, 重载关系和相等运算符。

实现代码

RationalNumber.h

#pragma once #include using namespace std; int small(int m, int n) { if (m >= n) return n; return m; } int factor(int m, int n) { for (int i = small(m, n); i >= 2; i--) { if (m % i == 0 && n % i == 0) return i; } return 1; } int multiple(int m, int n) { return m * n / factor(m, n); } class RationalNumber { public: int Denominator; int Numerator; double num; int x; RationalNumber() {}; RationalNumber(int Numerator ,int Denominator) { //防止分母为0 if(Denominator x = factor(Denominator, Numerator); this->Denominator = Denominator / x; this->Numerator = Numerator / x; this->num = (double)Numerator / Denominator; } } //分数加法 RationalNumber operator+(RationalNumber rn1) { RationalNumber temp; //分母相等时 if (this->Denominator == rn1.Denominator) { temp.Numerator = this->Numerator + rn1.Numerator; temp.Denominator = this->Denominator; //分母与分子最大公因子为1 if(factor(temp.Denominator,temp.Numerator)==1) return temp; //非最简模式时 int commonfactor = factor(temp.Denominator, temp.Numerator); temp.Denominator = temp.Denominator / commonfactor; temp.Numerator = temp.Numerator / commonfactor; return temp; } //分母不相等时 else { temp.Denominator = this->Denominator * rn1.Denominator; temp.Numerator = this->Numerator * rn1.Denominator + this->Denominator * rn1.Numerator; if (factor(temp.Denominator, temp.Numerator) == 1) return temp; //非最简模式时 int commonfactor = factor(temp.Denominator, temp.Numerator); temp.Denominator = temp.Denominator / commonfactor; temp.Numerator = temp.Numerator / commonfactor; return temp; } } //分数减法 RationalNumber operator-(RationalNumber rn1) { RationalNumber temp; //分母相等时 if (this->Denominator == rn1.Denominator) { temp.Numerator = this->Numerator - rn1.Numerator; temp.Denominator = this->Denominator; //分母与分子最大公因子为1 if (factor(this->Denominator, temp.Numerator) == 1) return temp; //非最简模式时 int commonfactor = factor(temp.Denominator, temp.Numerator); temp.Denominator = temp.Denominator / commonfactor; temp.Numerator = temp.Numerator / commonfactor; return temp; } //分母不相等时 else { temp.Denominator = this->Denominator * rn1.Denominator; temp.Numerator = this->Numerator * rn1.Denominator - this->Denominator * rn1.Numerator; if (factor(temp.Denominator, temp.Numerator) == 1) return temp; //非最简模式时 int commonfactor = factor(temp.Denominator, temp.Numerator); temp.Denominator = temp.Denominator / commonfactor; temp.Numerator = temp.Numerator / commonfactor; return temp; } } //乘法 RationalNumber operator*(RationalNumber rn1) { RationalNumber temp; temp.Denominator = this->Denominator * rn1.Denominator; temp.Numerator = this->Numerator * rn1.Numerator; if (factor(temp.Denominator, temp.Numerator) == 1) return temp; int commonfactor = factor(temp.Denominator, temp.Numerator); temp.Denominator = temp.Denominator / commonfactor; temp.Numerator = temp.Numerator / commonfactor; return temp; } //除法 RationalNumber operator/(RationalNumber rn1) { RationalNumber temp; temp.Denominator = this->Denominator * rn1.Numerator; temp.Numerator = this->Numerator * rn1.Denominator; if (factor(temp.Denominator, temp.Numerator) == 1) return temp; int commonfactor = factor(temp.Denominator, temp.Numerator); temp.Denominator = temp.Denominator / commonfactor; temp.Numerator = temp.Numerator / commonfactor; return temp; } //关系运算符 bool operator>(RationalNumber rn1) { return num > rn1.num; } bool operator return num == rn1.num; } };

RationalNumber.cpp

#include #include "RationalNumber.h" using namespace std; int main() { cout Polynomial temp; for (int i = 0; i posture.size(); i++) temp.posture.push_back({ this->posture[i].a, this->posture[i].e}); for (int j = 0; j if (i != j && temp.posture[i].e == temp.posture[j].e) { vector::iterator it = temp.posture.begin() + j; temp.posture[i] = { temp.posture[i].a + temp.posture[j].a,temp.posture[i].e }; temp.posture.erase(it); } } return temp; } //重载减法 Polynomial operator-(Polynomial p1) { Polynomial temp; for (int i = 0; i posture.size(); i++) temp.posture.push_back({ this->posture[i].a, this->posture[i].e }); for (int j = 0; j if (i != j && temp.posture[i].e == temp.posture[j].e) { vector::iterator it = temp.posture.begin() + j; temp.posture[i] = { temp.posture[i].a + temp.posture[j].a,temp.posture[i].e }; temp.posture.erase(it); } } return temp; } //重载赋值 void operator=(Polynomial p1) { p1.posture.clear(); for (int i = 0; i posture.size(); i++) p1.posture.push_back(this->posture[i]); } //重载乘法 Polynomial operator*(Polynomial p) { Polynomial temp; for(int i=0;iposture.size();i++) for (int j = 0; j this->posture[i].a * p.posture[j].a,this->posture[i].e * p.posture[j].e }); } return temp; } //重载+= Polynomial operator+=(Polynomial p1) { return this->operator+(p1); } Polynomial operator-=(Polynomial p1) { return this->operator-(p1); } Polynomial operator-=(Polynomial p1) { return this->operator*(p1); } };


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭