13.9 练习

1.编写一个函数,计算包含10个浮点数的数组的平均值并返回结果。

2.Fraction类中的方法reduce用来找出分子和分母的最大公约数来简约分数。修改这个方法,使其使用代码清单13-5中的函数gcd。你认为应该在什么地方定义该函数呢?将函数定为static有什么好处?你认为哪种方式更好,使用函数gcd还是像以前一样将代码直接合并到方法中呢?为什么?

3.可以使用一种名为Sieve of Erastosthenes的算法产生素数。这个过程算法如下所示。编

写一个程序来实现这个算法。假设程序找出150之前的所有质数,比较本文中其他计算质数的算法,如何评价这个算法?

步骤1:定义整型数组P。将所有元素Pi置为0、2<=i<=n。

步骤2:将i设为2。

步骤3:如果i>n,算法终止。

步骤4:如果Pi等于0,则i是质数。

步骤5:对于所有满足i・j<n的正整数j,将Pixj设为1。

步骤6:i加1并且回到步骤3。

4.编写一个函数,将所有传递给它的数组中的Fractions相加,并以Fraction类型返回结果。

5.为名为Date的struct date编写定义typedef,它允许在程序中进行如下声明


Date todaysDate;


6.在文中提到过,定义Date类而不是date结构更符合面向对象的编程思想。定义这样的类,并定义适当的setter和getter方法。同时,添加一个名为dateUpdate的方法来返回参数之后的日期。

能看出将Date定义为类而不是结构的好处吗?

能看出这样做的缺点吗?

7.给出下列定义:


char*message=“Programming in Objective-C is fun”;

char message2[]=“You said it”;

int x=100;


确定下面语句集中的NSLog语句是否都合法,产生的输出是否和其他语句一样。


/set 1/

NSLog(@“Programming in Objective-C is fun”);

NSLog(@“s”,“Programming in Objective C is fun”);

NSLog(@“s”,message);

/set 2/

NSLog(@“You said it”);

NSLog(@“s”,message2);

NSLog(@“s”,&message2[0];

/set 3/

NSLog(@“said it”);

NSLog(@“s”,message2+4);

NSLog(@“s”,&message2[4]);


8.编写程序,它在终端输出所有命令行参数,每行一个。注意引号中包含空格字符的封装参数有什么作用。

9.下面哪组语句会生成输出This is a test?并说明原因。


NSLog(@“This is a test”);

NSLog(“This is a test”);

NSLog(@“s”,“This is a test”);

NSLog(@“s”,@“This is a test”);

NSLog(“s”,“This is a test”);

NSLog(“s”,@“This is a test”);

NSLog(@,@“This is a test”);

NSLog(@,“This is a test”);