class Fraction { public: Fraction(); //缺省构造函数设置分子为0,分母为1 Fraction(int n); //只有1 个参数,设置分子为n,分母为1 Fraction(int n, int d); //设置分子为n,分母为d void setValue(int n, int d); //设置分子和分母 int getNum(); //获取分子值 int getDen(); //获取分母值 double getDoubleValue(); //获取分数对应的小数值 Fraction add(const Fraction & f2); //分数相加 Fraction operator*(const Fraction &f2); //分数相加 void output(); //按分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格 friend ostream &operator<<(ostream &out, Fraction &f);//重载输出,分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格 friend istream &operator>>(istream &in, Fraction &f); //输入重载 private: int num; //分子 int den; //分母 void normalize();//规范化 int gcd(); //求最大公约数 }; 补充wanzheng
时间: 2024-01-08 07:04:44 浏览: 83
设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。
5星 · 资源好评率100%
以下是补充完整的代码:
#include <iostream>
#include <cmath>
using namespace std;
class Fraction {
public:
Fraction(); //缺省构造函数设置分子为0,分母为1
Fraction(int n); //只有1 个参数,设置分子为n,分母为1
Fraction(int n, int d); //设置分子为n,分母为d
void setValue(int n, int d); //设置分子和分母
int getNum(); //获取分子值
int getDen(); //获取分母值
double getDoubleValue(); //获取分数对应的小数值
Fraction add(const Fraction & f2); //分数相加
Fraction operator*(const Fraction &f2); //分数相乘
void output(); //按分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格
friend ostream &operator<<(ostream &out, Fraction &f);//重载输出,分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格
friend istream &operator>>(istream &in, Fraction &f); //输入重载
private:
int num; //分子
int den; //分母
void normalize();//规范化
int gcd(); //求最大公约数
};
Fraction::Fraction() {
num = 0;
den = 1;
}
Fraction::Fraction(int n) {
num = n;
den = 1;
}
Fraction::Fraction(int n, int d) {
num = n;
den = d;
normalize();
}
void Fraction::setValue(int n, int d) {
num = n;
den = d;
normalize();
}
int Fraction::getNum() {
return num;
}
int Fraction::getDen() {
return den;
}
double Fraction::getDoubleValue() {
return (double)num / den;
}
Fraction Fraction::add(const Fraction & f2) {
Fraction result;
result.num = num * f2.den + den * f2.num;
result.den = den * f2.den;
result.normalize();
return result;
}
Fraction Fraction::operator*(const Fraction &f2) {
Fraction result;
result.num = num * f2.num;
result.den = den * f2.den;
result.normalize();
return result;
}
void Fraction::output() {
int integer = num / den;
int remainder = abs(num) % den;
if (integer != 0) {
cout << integer;
if (remainder != 0) {
cout << " ";
}
}
if (remainder != 0) {
cout << remainder << "/" << den;
}
if (integer == 0 && remainder == 0) {
cout << "0";
}
}
ostream &operator<<(ostream &out, Fraction &f) {
f.output();
return out;
}
istream &operator>>(istream &in, Fraction &f) {
char slash;
in >> f.num;
in >> slash;
in >> f.den;
f.normalize();
return in;
}
void Fraction::normalize() {
if (den < 0) {
num *= -1;
den *= -1;
}
int divisor = gcd();
num /= divisor;
den /= divisor;
}
int Fraction::gcd() {
int a = abs(num);
int b = abs(den);
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
Fraction f1(1, 2);
Fraction f2(3, 4);
Fraction f3 = f1.add(f2);
Fraction f4 = f1 * f2;
cout << f1 << " + " << f2 << " = " << f3 << endl;
cout << f1 << " * " << f2 << " = " << f4 << endl;
cout << "Enter a fraction: ";
cin >> f1;
cout << "The fraction you entered is: " << f1 << endl;
return 0;
}
阅读全文