objective-c第七章课后练习2

题:改变第七章例子中print方法,增加bool参数,判断如果是YES则对分数进行约简

  1 @interface Fraction : NSObject
  2 {
  3     //int num,den;
  4     
  5 }
  6 @property int num,den;//定义属性
  7 
  8 - (void) print:(BOOL) yesOrNo;//打印并判断是否约简分数
  9 //- (void) setN: (int) n;//设置n的值
 10 //- (void) setD: (int) d;//设置d的值
 11 //- (int) n;//返回n的值
 12 //- (int) d;//返回d的值
 13 - (void) setN: (int) n andSetD: (int) d;//2个参数的方法分别设置n和d的值
 14 - (double) convertToNum;
 15 - (void) add: (Fraction *) f;//分数相加方法
 16 - (void) reduce;//分数约简方法
 17 - (Fraction *) addFraction: (Fraction *) f;//
 18 - (Fraction *) subFraction: (Fraction *) f;//
 19 - (Fraction *) mulFraction: (Fraction *) f;//
 20 - (Fraction *) divFraction: (Fraction *) f;//
 21 @end
 22 
 23 #import "Fraction.h"
 24 
 25 @implementation Fraction
 26 
 27 @synthesize num,den;//属性对应@property num,den
 28 
 29 - (void) print: (BOOL) yesOrNo//打印
 30 {
 31     if (yesOrNo == YES) {
 32         [self reduce];
 33     }
 34     NSLog(@"%i/%i",num,den);
 35 }
 36 //- (void) setN: (int) n//设置n的值
 37 //{
 38 //    num = n;
 39 //}
 40 //- (void) setD: (int) d//设置d的值
 41 //{
 42 //    den = d;
 43 //}
 44 //- (int) n//返回n的值
 45 //{
 46 //    return num;
 47 //}
 48 //- (int) d//返回d的值
 49 //{
 50 //    return den;
 51 //}
 52 
 53 - (void) setN: (int) n andSetD: (int) d
 54 {
 55     num = n;
 56     den = d;
 57     
 58 }
 59 - (double) convertToNum
 60 {
 61     if (den != 0)
 62     {
 63         return (double) num/den;
 64     
 65     }
 66     else
 67     {
 68         return NAN;
 69         
 70     }
 71 }
 72 
 73 - (void) add: (Fraction *) f
 74 {
 75     //分数相加:a/b + c/d = ((a*d) + (b*c)) / (b*d)
 76     
 77     num = num * f.den + den * f.num;
 78     den = den * f.den;
 79     
 80     [self reduce];
 81 }
 82 
 83 - (void) reduce
 84 {
 85     int u = num;
 86     int v = den;
 87     int temp;
 88     
 89     while (v != 0)
 90     {
 91         temp = u % v;
 92         u = v;
 93         v = temp;
 94         
 95     }
 96     num /= u;
 97     den /= u;
 98 }
 99 
100 //加法
101 - (Fraction *) addFraction: (Fraction *) f
102 {
103     Fraction *result = [[Fraction alloc]init];
104     
105     result.num = num * f.den + den * f.num;
106     
107     result.den = den * f.den;
108 
109     [result reduce];
110     
111     return result;
112     
113 }
114 
115 //减法
116 - (Fraction *) subFraction: (Fraction *) f
117 {
118     Fraction *result = [[Fraction alloc]init];
119     
120     result.num = num * f.den - den * f.num;
121     result.den = den * f.den;
122     
123     [result reduce];
124     
125     return result;
126     
127 }
128 
129 //乘法
130 - (Fraction *) mulFraction: (Fraction *) f
131 {
132     Fraction *result = [[Fraction alloc]init];
133     
134     result.num = num * f.num;
135     result.den = den * f.den;
136     
137     [result reduce];
138     
139     return result;
140 }
141 
142 //除法
143 - (Fraction *) divFraction: (Fraction *) f
144 {
145     //计算分数除以分数,第一个分数乘以第二个分数的倒数:1/2除以3/2 = 1/2 * 2/3
146     Fraction *result = [[Fraction alloc]init];
147     
148     result.num = num * f.den;
149     result.den = den * f.num;
150     
151     //[result reduce];
152     
153     return result;
154 }
155 @end
156 
157 #import <Foundation/Foundation.h>
158 #import "Fraction.h"
159 
160 int main(int argc, const char * argv[]) {
161     @autoreleasepool {
162         Fraction *myF = [[Fraction alloc]init];
163         Fraction *myF_2 = [[Fraction alloc]init];
164         Fraction *myResult;
165         
166         
167         [myF setN:1 andSetD:2];
168         [myF_2 setN:3 andSetD:2];
169         
170         myResult = [myF subFraction:myF_2];
171         //[myResult print];
172         
173         myResult = [myF mulFraction:myF_2];
174         //[myResult print];
175         
176         myResult = [myF divFraction:myF_2];
177         
178         int i;//定义整型变量i记录输入值
179         BOOL b;//定义BOOL类型通过i值传递判断yes or no
180         NSLog(@"Need to Simple? 1 or 0");
181         //NSLog(@"ifReadOnly value: %@" ,ifReadOnly?@"YES":@"NO");
182         scanf("%i",&i);
183         b = i;//将i值赋给b
184         [myResult print:b];
185         
186         
187         
188     }
189     return 0;
190 }

 

转载于:https://www.cnblogs.com/MrHead/p/5252262.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值