5.1.2 嵌套的for循环

代码清单5-4向用户提供了以下灵活性:使程序计算出任何想要的三角数。但是假设用户要计算5个三角数的列表,该怎么办呢?这种情况下,用户可简单地将程序执行5次,每次键入要计算的列表中下一个三角数即可。

实现相同目的有另一种方式,并且就学习Objective-C而言,它更为有趣,就是让程序处理这种情况。通过向程序插入循环,将整个计算过程重复执行5次,可最好地完成这一任务。可以使用for语句来建立这样的循环。代码清单5-5及其输出说明了这一技术。

代码清单5-5


import<Foundation/Foundation.h>

int main(int argc, char*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];

int n, number, triangularNumber, counter;

for(counter=1;counter<=5;++counter){

NSLog(@“What triangular number do you want?”);

scanf(“i”,&number);

triangularNumber=0;

for(n=1;n<=number;++n)

triangularNumber+=n;

NSLog(@“Triangular number%i is%i”,number, triangularNumber);

}

[pool drain];

return 0;


}

代码清单5-5输出


What triangular number do you want?

12

Triangular number 12 is 78

What triangular number do you want?

25

Triangular number 25 is 325

What triangular number do you want?

50

Triangular number 50 is 1275

What triangular number do you want?

75

Triangular number 75 is 2850

What triangular number do you want?

83

Triangular number 83 is 3486


该程序包含两层for循环语句。最外层的for循环语句如下:


for(counter=1;counter<=5;++counter)


这条语句指定该程序循环正好执行5次。因为counter的值最初设为1,并且依次加1,直到它的值不再小于或等于5(换句话说,直到它到达6)为止,所以可以看出执行5次。

与上一个程序例子不同,程序的其他位置都没有使用变量counter。它的作用仅仅是充当for语句中的循环计数器。然而,因为它是一个变量,所以必须在程序中声明。

该程序循环实际上由其余所有的程序语句组成,如花括号所示。如果有以下概念,也许能更容易地理解该程序的工作方式:


For 5 times

{

Get the number from the user.

Calculate the requested triangular number.

Display the results.

}


前面的循环部分指的是Calculate the requested triangular number,它实际上包括:将变量triangularNumber的值设为0,以及计算三角数的for循环。这样,这个for语句实际上包含另一个for语句。这在Objective-C中是相当合法的,而且可以继续嵌套,甚至可嵌套任何想要的层。

处理比较复杂的程序结构(如嵌套的for语句)时,适当地使用缩进变得尤为重要。扫视一下,就能轻易地确定每个for语句中包含哪些语句。