12.3.1 基本Fraction分数类 (20分)

编写Fraction 类,封装分数的基本功能。 (1)实现构造函数重载。 (2)实现各个成员函数。

类的定义:

#include <iostream>
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(); //获取分数对应的小数值
void output(); //按分数形式显式分数, 按真分数或假分数形式输出
private:
int num; //分子
int den; //分母
};

裁判测试程序样例:

#include <iostream>
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(); //获取分数对应的小数值
void output(); //按分数形式显式分数, 按真分数或假分数形式输出
private:
int num; //分子
int den; //分母
};
int main()
{
Fraction f1, f2(2), f3(-3,4);
int num,den;
cin>>num>>den;
f1.setValue(num,den);
cout<<"Fraction f1 is ";
f1.output();
cout<<", its double value is: "<<f1.getDoubleValue()<<endl;
cout<<"Fraction f2 is ";
cout<<f2.getNum()<<'/'<<f2.getDen();
cout<<"\nFraction f3 is ";
f3.output();
return 0;
}

/* 请在这里填写答案 */

输入样例:

6 4

输出样例:

Fraction f1 is 6/4, its double value is: 1.5

Fraction f2 is 2/1

Fraction f3 is -3/4

Fraction::Fraction()
{
    num=0;den=1;
}
Fraction::Fraction(int n)
{
    num=n;den=1;
}
Fraction::Fraction(int n, int d)
{
    num=n;den=d;
}
void Fraction::setValue(int n, int d)
{
    num=n;den=d;
}
int Fraction::getNum()
{
    return num;
}
int Fraction::getDen()
{
    return den;
}
double Fraction::getDoubleValue()
{
    double i=num/(den*1.0);
    return i;
}
void Fraction::output()
{
    if((num>0&&den>0)||(num<0&&den>0))
    cout<<num<<'/'<<den;
    if((num<0&&den<0)||(num>0&&den<0))
    cout<<-num<<'/'<<-den;
   
}   
  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基本Fraction分数的代码实现: ```c++ #include <iostream> #include <cstdlib> using namespace std; class Fraction { private: int numerator; // 子 int denominator; // 母 public: // 构造函数 Fraction(int num, int den) { if (den == 0) { cerr << "Error: Denominator cannot be zero." << endl; exit(EXIT_FAILURE); } numerator = num; denominator = den; simplify(); } // 重载默认构造函数 Fraction() { numerator = 0; denominator = 1; } // 获取子 int getNumerator() const { return numerator; } // 获取母 int getDenominator() const { return denominator; } // 设置子 void setNumerator(int num) { numerator = num; simplify(); } // 设置母 void setDenominator(int den) { if (den == 0) { cerr << "Error: Denominator cannot be zero." << endl; exit(EXIT_FAILURE); } denominator = den; simplify(); } // 将分数 void simplify() { int gcd = findGCD(abs(numerator), abs(denominator)); numerator /= gcd; denominator /= gcd; // 如果母为负数,则调整子、母的符号 if (denominator < 0) { numerator = -numerator; denominator = -denominator; } } // 找到最大公约数 int findGCD(int a, int b) { if (b == 0) { return a; } else { return findGCD(b, a % b); } } // 重载加法运算符 Fraction operator+(const Fraction& other) const { int newNum = numerator * other.denominator + other.numerator * denominator; int newDen = denominator * other.denominator; return Fraction(newNum, newDen); } // 重载减法运算符 Fraction operator-(const Fraction& other) const { int newNum = numerator * other.denominator - other.numerator * denominator; int newDen = denominator * other.denominator; return Fraction(newNum, newDen); } // 重载乘法运算符 Fraction operator*(const Fraction& other) const { int newNum = numerator * other.numerator; int newDen = denominator * other.denominator; return Fraction(newNum, newDen); } // 重载除法运算符 Fraction operator/(const Fraction& other) const { int newNum = numerator * other.denominator; int newDen = denominator * other.numerator; return Fraction(newNum, newDen); } // 重载比较运算符 bool operator==(const Fraction& other) const { return (numerator == other.numerator && denominator == other.denominator); } bool operator!=(const Fraction& other) const { return !(*this == other); } bool operator<(const Fraction& other) const { int num1 = numerator * other.denominator; int num2 = other.numerator * denominator; return num1 < num2; } bool operator<=(const Fraction& other) const { return (*this < other) || (*this == other); } bool operator>(const Fraction& other) const { return !(*this <= other); } bool operator>=(const Fraction& other) const { return !(*this < other); } // 重载输出运算符 friend ostream& operator<<(ostream& os, const Fraction& f) { os << f.numerator << "/" << f.denominator; return os; } }; ``` 在该Fraction中,我们实现了以下功能: 1. 构造函数重载,可用于初始化分数。 2. 成员函数包括获取子、母、设置子、母、约、重载加减乘除运算符、重载比较运算符、重载输出运算符等。 3. 在构造函数和设置母函数中,我们保证了母不为0,并在母为0的情况下报错并退出程序。 4. 在约函数中,我们使用了辗转相除法(欧几里得算法)来找到最大公约数,并将分数至最简形式。 5. 重载加减乘除运算符时,我们按照分数基本运算规则进行计算,并返回一个新的Fraction对象。 6. 重载比较运算符时,我们先将两个分数,然后比较子大小。同时,我们还重载了输出运算符,方便输出分数。 以上就是基本Fraction分数的实现,可以用于处理分数相关问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值