定义一个分数类(Fraction)
实例变量:分子,分母
方法:初始化方法(2个参数),便利构造器,约分,打印,加,减,乘,除。
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
{
int _denominator;
int _numerator;
}
-(id)initWithNumerator:(int)aNumrator;
-(id)initwWithDenominator:(int)aDenominator Numerator:(int)aNumerator;
//便利构造器
+(Fraction *)initwWithDenominator:(int)aDenominator Numerator:(int)aNumerator;
//setter,getter方法;
-(void)setDenominator:(int)aDenominator;
-(int)denominator;
-(void)setNumerator:(int)aNumerator;
-(int)numerator;
//最大公约数,辗转相除法;
-(int)greatestCommonDivisorWithOtherNumber:(int)oneNumber another:(int)anotherNumber;
//约分
-(void)reductionOfFraction;
//打印
-(void)print;
//加
+(Fraction *)addWithfaFraction:(Fraction *)aFraction bFaction:(Fraction *)bFaction;
//减
+(Fraction *)minusWithfaFaction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
//乘
+(Fraction *)timeWithfaFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
//除
+(Fraction *)divideWithfaFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
#import "Fraction.h"
@implementation Fraction
-(id)init{
self = [super init];
if (self) {
_numerator= 12;
_denominator = 16;
}
return self;
}
//自定义初始化方法;
-(id)initWithNumerator:(int)aNumrator{
_numerator = aNumrator;
return self;
}
-(id)initwWithDenominator:(int)aDenominator Numerator:(int)aNumerator{
_numerator = aNumerator;
_denominator = aDenominator;
return self;
}
+(Fraction *)initwWithDenominator:(int)aDenominator Numerator:(int)aNumerator{
Fraction *fraction = [[Fraction alloc] init];
[fraction setNumerator:aNumerator];
[fraction setDenominator:aDenominator];
return fraction;
}
//setter和getter方法;
-(void)setDenominator:(int)aDenominator{
_denominator = aDenominator;
}
-(int)denominator{
return _denominator;
}
-(void)setNumerator:(int)aNumerator{
_numerator = aNumerator;
}
-(int)numerator{
return _numerator;
}
//最大公约数,辗转相除法;
-(int)greatestCommonDivisorWithOtherNumber:(int)oneNumber another:(int)anotherNumber{
while (anotherNumber != 0) {
int temp = oneNumber % anotherNumber;
oneNumber = anotherNumber;
anotherNumber = temp;
}
return oneNumber;
}
//约分
-(void)reductionOfFraction{
NSInteger temp = [self greatestCommonDivisorWithOtherNumber:_numerator another:_denominator];
_numerator /= temp;
_denominator /= temp;
}
//打印
-(void)print{
NSLog(@" 分数:%d/%d",_numerator,_denominator);
}
//加
+(Fraction *)addWithfaFraction:(Fraction *)aFraction bFaction:(Fraction *)bFaction{
Fraction *result = [[Fraction alloc] init];
result.denominator = aFraction.denominator*bFaction.denominator;
result.numerator = aFraction.numerator*bFaction.denominator+bFaction.numerator*aFraction.denominator;
[result reductionOfFraction];
return result;
}
//减
+(Fraction *)minusWithfaFaction:(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 *)timeWithfaFraction:(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 *)divideWithfaFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction{
Fraction *result = [[Fraction alloc] init];
result.denominator = aFraction.denominator * aFraction.numerator;
result.numerator = aFraction.numerator * bFraction.denominator;
[result reductionOfFraction];
return result;
}
@end
在主函数中使用类,以及类中的方法:
Fraction *num1 = [[Fraction alloc] init];
[num1 reductionOfFraction];
[num1 print];
Fraction *num2 = [[Fraction alloc]initwWithDenominator:12 Numerator:6];
[num2 reductionOfFraction];
[num2 print];
Fraction *result1 = [Fraction addWithfaFraction:num1 bFaction:num2];
[result1 print];
Fraction *result2 = [Fraction minusWithfaFaction:num1 bFraction:num2];
[result2 print];
Fraction *result3 = [Fraction timeWithfaFraction:num1 bFraction:num2];
[result3 print];
Fraction *result4 = [Fraction divideWithfaFraction:num1 bFraction:num2];
[result4 print];