您的位置:首页 > 移动开发 > Objective-C

Objective-C练习_分数类实现

2015-08-02 15:45 477 查看

要求

定义一个分数类(Fraction)

实例变量:分子,分母

⽅法:初始化方法(2个参数),便利构造器,约分,打印,加,减,乘,除。

提示:加法运算 - (Fraction )addFraction:(Fraction )anotherFraction

本博文只是用最基本的方式完成了题目的相关功能,仅供初学者参考。请爱挑剔的技术大牛对于本代码的拙见,见谅,谢谢!

代码实现

分数类有两个实例变量:分子和分母。分数类的对象要实现分数的四则运算,方法的参数必须是另一个对象。这样就可以按照数学中分数运算的规律进行加、减、乘、除运算。其中,注意除法和约分有隐含的数学陷阱,如约分时分子或分母为0,0不能做除数等。

按照要求,创建Fraction类,定义实例变量、方法

Fraction.h 接口文件代码如下:

#import <Foundation/Foundation.h>

@interface Fraction : NSObject
{
@protected
    NSInteger _numerator; /* 分子 */
    NSInteger _denominator; /* 分母 */
}

/* 实例变量setter, getter方法 */
- (void)setNumerator:(NSInteger)numerator;
- (NSInteger)numerator;

- (void)setDenominator:(NSInteger)denominator;
- (NSInteger)denominator;

/* 自定义初始化方法 */
- (id)initWithNumerator:(NSInteger)numerator
            denominator:(NSInteger)denominator;

/* 便利构造器 */
+ (id)fractionWithNumerator:(NSInteger)numerator
                denominator:(NSInteger)denominator;

/* 约分 */
- (id)reductionOfAFraction;

/* 打印 */
- (void)printFraction;

/* 加 */
- (Fraction *)addFraction:(Fraction *)anotherFraction;

/* 减 */
- (Fraction *)subFraction:(Fraction *)anotherFraction;

/* 乘 */
- (Fraction *)mulFraction:(Fraction *)anotherFraction;

/* 除 */
- (Fraction *)divFraction:(Fraction *)anotherFraction;
@end


Fraction.m 实现文件代码如下:

#import "Fraction.h"

@implementation Fraction
- (void)setNumerator:(NSInteger)numerator
{
    _numerator = numerator;
}

- (NSInteger)numerator
{
    return _numerator;
}

- (void)setDenominator:(NSInteger)denominator
{
    _denominator = denominator;
}

- (NSInteger)denominator
{
    return _denominator;
}

- (id)initWithNumerator:(NSInteger)numerator
            denominator:(NSInteger)denominator
{
    self = [super init];
    if (self) {
        _numerator = numerator;
        _denominator = denominator;
    }
    return self;
}

+ (id)fractionWithNumerator:(NSInteger)numerator
                denominator:(NSInteger)denominator
{
    Fraction *fra = [[Fraction alloc] initWithNumerator:numerator denominator:denominator];
    return fra;
}

- (id)reductionOfAFraction
{
    NSInteger m = [self numerator];
    NSInteger n = [self denominator];
    /* 如果分子或分母为负数, 则忽略符号 */
    if (m < 0) {
        m = -m;
    }
    if (n < 0) {
        n = -n;
    }
    /* 欧几里得算法求最大公约数 */
    NSInteger r = m % n;
    while (r > 0) {
        m = n;
        n = r;
        r = m % n;
    }
    [self setNumerator:([self numerator] / n)];
    [self setDenominator:([self denominator] / n)];
    return self;
}

- (void)printFraction
{
    NSLog(@"%ld / %ld", [self numerator], [self denominator]);
}

- (Fraction *)addFraction:(Fraction *)anotherFraction
{
    NSInteger num = [self numerator] * [anotherFraction denominator] + [self denominator] * [anotherFraction numerator];
    NSInteger den = [self denominator] * [anotherFraction denominator];
    Fraction *fra = [Fraction fractionWithNumerator:num denominator:den];
    return fra;
}

- (Fraction *)subFraction:(Fraction *)anotherFraction
{
    NSInteger num = [self numerator] * [anotherFraction denominator] - [self denominator] * [anotherFraction numerator];
    NSInteger den = [self denominator] * [anotherFraction denominator];
    Fraction *fra = [Fraction fractionWithNumerator:num denominator:den];
    return fra;
}

- (Fraction *)mulFraction:(Fraction *)anotherFraction
{
    NSInteger num = [self numerator] * [anotherFraction numerator];
    NSInteger den = [self denominator] * [anotherFraction denominator];
    Fraction *fra = [Fraction fractionWithNumerator:num denominator:den];
    return fra;
}

- (Fraction *)divFraction:(Fraction *)anotherFraction
{
    NSInteger num = [self numerator] * [anotherFraction denominator];
    NSInteger den = [self denominator] * [anotherFraction numerator];
    Fraction *fra = [Fraction fractionWithNumerator:num denominator:den];
    return fra;
}
@end


main.m 文件代码如下:

#import <Foundation/Foundation.h>
#import "Fraction.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
     Fraction *fraA = [Fraction fractionWithNumerator:2 denominator:4];
        [fraA reductionOfAFraction];
        [fraA printFraction];

        Fraction *fraB = [Fraction fractionWithNumerator:2 denominator:3];

        Fraction *fraction = [[Fraction alloc] init];
        /* 分数加法 */
        fraction = [fraA addFraction:fraB];
        [fraction printFraction];

        /* 分数减法 */
        fraction = [fraA subFraction:fraB];
        [fraction printFraction];

        /* 分数乘法*/
        fraction = [fraA mulFraction:fraB];
        [fraction printFraction];

        /* 分数除法 */
        fraction = [fraA divFraction:fraB];
        [fraction printFraction];
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: