第十章课后习题(10,11) |
您所在的位置:网站首页 › 分母不可以为负数 › 第十章课后习题(10,11) |
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); } }; |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |