3. 定义一个分数类(Fraction) 实例变量:分子,分母 方法:初始化方法(2个参数),便利构造器,约分,打印,加,减,乘,除。

39 篇文章 0 订阅
<span style="font-size:18px;">                                  <span style="color:#FF6666;">main.m</span>                             </span>
<span style="font-size:18px;">#import <Foundation/Foundation.h>
#import "Person.h"
#import "Fraction.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Fraction *num = [[Fraction alloc] init];
        [num print]; //打印初始化的值 3/5
        Fraction *num1 = [Fraction fractionWithNumerator:24 denominator:36];
        [num1 print]; //打印便利构造器值 24/36
        [num1 reductionOfFraction];
        [num1 print]; // 24/36 约分后 2/3
        
        Fraction *num2 = [Fraction fractionWithNumerator:9 denominator:12];
        Fraction *result1 = [Fraction addWitfAFraction:num1 bFraction:num2];// 加   24/36 + 2/3
        [result1 print];
        Fraction *result2 = [Fraction minusWitfAFraction:num1 bFraction:num2];// 减
        [result2 print];
        Fraction *result3 = [Fraction timeWitfAFraction:num1 bFraction:num2]; // 乘
        [result3 print];
        Fraction *result4 = [Fraction divideWitfAFraction:num1 bFraction:num2]; // 除
        [result4 print];
        
    }
    return 0;
}
</span>
<span style="color:#FF6666;">                                 Fraction.h</span>
#import <Foundation/Foundation.h>

@interface Fraction : NSObject {
    NSInteger _numerator;//分子
    NSInteger _denominator;//分母
}
//自定义初始化方法
- (id)initWithNumerator:(NSInteger)aNumerator;
- (id)initWithNumerator:(NSInteger)aNumerator denominator:(NSInteger)aDenominator;
//便利构造器
+ (Fraction *)fractionWithNumerator:(NSInteger)aNumerator denominator:(NSInteger)aDenominator;

//setter和getter
- (void)setNumerator:(NSInteger)aNumerator;
- (NSInteger)numerator;
- (void)setDenominator:(NSInteger)aDenominator;
- (NSInteger)denominator;

//最大公约数:辗转相除法
- (NSInteger)greatestCommonDivisorWithOneNumber:(NSInteger)oneNumber anotherNumber:(NSInteger)anotherNumber;
//约分
- (void)reductionOfFraction;
//打印
- (void)print;
//加
+ (Fraction *)addWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
//减
+ (Fraction *)minusWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
//乘
+ (Fraction *)timeWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
//除
+ (Fraction *)divideWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
@end

<span style="color:#FF6666;">                                  Fraction.m</span>
#import "Fraction.h"

@implementation Fraction
- (instancetype)init
{
    self = [super init];
    if (self) {
        _numerator = 3;
        _denominator = 5;
    }
    return self;
}
//自定义初始化方法
- (id)initWithNumerator:(NSInteger)aNumerator {
    self = [super init];
    if (self) {
        _numerator = aNumerator;
    }
    return self;
}
- (id)initWithNumerator:(NSInteger)aNumerator denominator:(NSInteger)aDenominator {
    self = [super init];
    if (self) {
        _numerator = aNumerator;
        _denominator = aDenominator;
    }
    return self;
}

//便利构造器
+ (Fraction *)fractionWithNumerator:(NSInteger)aNumerator denominator:(NSInteger)aDenominator {
    Fraction *fraction = [[Fraction alloc] init];
    [fraction setNumerator:aNumerator];
    [fraction setDenominator:aDenominator];
    return fraction;
}

//setter和getter
- (void)setNumerator:(NSInteger)aNumerator {
    _numerator = aNumerator;
}
- (NSInteger)numerator {
    return _numerator;
}
- (void)setDenominator:(NSInteger)aDenominator {
    _denominator = aDenominator;
}
- (NSInteger)denominator {
    return _denominator;
}

//最大公约数:辗转相除法
- (NSInteger)greatestCommonDivisorWithOneNumber:(NSInteger)oneNumber anotherNumber:(NSInteger)anotherNumber {
    while (anotherNumber != 0) {
        NSInteger temp = oneNumber % anotherNumber;
        oneNumber = anotherNumber;
        anotherNumber = temp;
    }
    return oneNumber;
}
//约分
- (void)reductionOfFraction {
    NSInteger temp = [self greatestCommonDivisorWithOneNumber:_numerator anotherNumber:_denominator];
    //self即可代指类, 也可代指对象, 谁调用就代表谁.
    _numerator /= temp;
    _denominator /= temp;
}
//打印
- (void)print {
    NSLog(@"分数: %ld/%ld",_numerator, _denominator);
}
//加
+ (Fraction *)addWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction {
    Fraction *result = [[Fraction alloc] init];
    result.denominator = aFraction.denominator * bFraction.denominator;
    result.numerator = aFraction.numerator * bFraction.denominator + bFraction.numerator * aFraction.denominator;
    [result reductionOfFraction];//加完后整体约分
    return result;
}
//减
+ (Fraction *)minusWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction {
    Fraction *result = [[Fraction alloc] init];
    result.denominator = aFraction.denominator * bFraction.denominator;
    result.numerator = aFraction.numerator * bFraction.denominator - bFraction.numerator * aFraction.denominator;
    [result reductionOfFraction];
    return result;
}
//乘
+ (Fraction *)timeWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction{
    Fraction *result  = [[Fraction alloc] init];
    result.denominator = aFraction.denominator * bFraction.denominator;
    result.numerator = aFraction.numerator * bFraction.numerator;
    [result reductionOfFraction];
    return result;
}
//除
+ (Fraction *)divideWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction {
    Fraction *result = [[Fraction alloc] init];
    result.denominator = aFraction.denominator * bFraction.numerator;
    result.numerator = aFraction.numerator * bFraction.denominator;
    [result reductionOfFraction];
    return  result;
}
@end


在C++中设计一个表示分数`Fraction`,我们需要考虑几个关键点:表示分子分母的整型变量分数初始化分数的约简、分数加减乘除运算、以及分数的输出格式等。 以下是一个简单的`Fraction`的实现示例: ```cpp #include <iostream> #include <numeric> // 用于std::gcd计算最大公约数 class Fraction { private: int numerator; // 分子 int denominator; // 分母 // 私有成员函数,用于约简分数 void reduce() { int gcd = std::gcd(numerator, denominator); // 计算最大公约数 numerator /= gcd; denominator /= gcd; if (denominator < 0) { // 确保分母为正数 numerator = -numerator; denominator = -denominator; } } public: // 构造函数 Fraction(int num = 0, int den = 1) : numerator(num), denominator(den) { if (denominator == 0) { throw std::invalid_argument("Denominator cannot be zero."); } reduce(); } // 分数法 Fraction operator+(const Fraction& other) const { return Fraction(numerator * other.denominator + other.numerator * denominator, denominator * other.denominator); } // 分数法 Fraction operator-(const Fraction& other) const { return Fraction(numerator * other.denominator - other.numerator * denominator, denominator * other.denominator); } // 分数乘法 Fraction operator*(const Fraction& other) const { return Fraction(numerator * other.numerator, denominator * other.denominator); } // 分数除法 Fraction operator/(const Fraction& other) const { if (other.numerator == 0) { throw std::invalid_argument("Cannot divide by zero fraction."); } return Fraction(numerator * other.denominator, denominator * other.numerator); } // 输出分数 friend std::ostream& operator<<(std::ostream& os, const Fraction& fraction) { os << fraction.numerator << "/" << fraction.denominator; return os; } }; ``` 在这个中,我们定义了分子分母为私有成员变量,并提供了一个私有成员函数`reduce`用于约简分数。此外,我们还定义了构造函数以及、乘、除运算符重载,并重载了输出运算符以便于打印分数对象。 这个的基本使用示例如下: ```cpp int main() { Fraction f1(1, 2); // 创建分数1/2 Fraction f2(3, 4); // 创建分数3/4 Fraction f3 = f1 + f2; // 分数 Fraction f4 = f1 * f2; // 分数相乘 std::cout << "f1 + f2 = " << f3 << std::endl; std::cout << "f1 * f2 = " << f4 << std::endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值