计算机的基本属性之一就是它能够重复执行一组语句。
循环语句的作用是反复执行一段代码, 直到满足终止循环的条件为止。
Objective-C语言中提供的循环语句有:
• while语句
• do-while语句
• for语句
while语句, 它的语法形式如下, 其中“[] ” 中的部分可以省略。
~~~
[initialization]
while (termination){
body;
[iteration;]
}
~~~
举例如下:
水仙花数是指一个 n 位数 ( n>=3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)
下面代码是计算1000以内的水仙花数。
~~~
int i = 100;
int r, s, t;
r = 0;s = 0;t = 0;
while (i < 1000) {
r = i / 100;
s = (i - r * 100) / 10;
t = i - r * 100 - s * 10;
if (i == r * r * r + s * s * s + t * t * t) {
NSLog(@" %i " , i );
}
i = i + 1;
}
~~~
三位的水仙花数共有4个,分别为:153、370、371、407。
do-while语句, 它的语法形式如下, 其中“[] ” 中的部分可以省略
~~~
[initialization]
do {
body;
[iteration;]
} while (termination);
~~~
计算1000以内的水仙花数
~~~
int i = 100;
int r, s, t;
r = 0;s = 0;t = 0;
do {
r = i / 100;
s = (i - r * 100) / 10;
t = i - r * 100 - s * 10;
if (i == r * r * r + s * s * s + t * t * t) {
NSLog(@" %i " , i );
}
i = i + 1;
} while (i < 1000);
~~~
for语句, 语法形式如下:
~~~
for (initialization; termination; iteration){
body;
}
~~~
举例如下:
下面代码是计算0~10平方、 立方数并输出:
~~~
int i = 10;
int r, s;
r = 0;
s = 0;
for (int j = 0; j <= i ; j++) {
r = j * j;
s = j * j * j;
NSLog(@"整数为: %i 对应的平方和%i :对应的立方和:%i ", j, i , s);
}
~~~
for语句小结for语句将按以下步骤执行:1.先求初始表达式的值。2.求循环条件的值。3.执行组成循环体的程序语句。4.求循环表达式的值。5.返回到2执行。
在for循环语句的“() ” 内部一般有3条语句,
initialization初始化语句, termination终止条件语句, iteration迭代语句,
其中这3条语句都是可以省略的。
例如把j 的初始化放在循环体的外面, 代码如下:
~~~
int j = 0;
for (; j <= i ; j++) {
r = j * j;
s = j * j * j;
NSLog(@"整数为: %i 对应的平方和%i :对应的立方和:%i ", j, i , s);
}
~~~
#### 跳转语句
与程序转移有关的跳转有break, continue, goto语句,
break和continue都主要与循环有,
goto语句在C中就有, 它是无条件跳转可以完全替代break和continue, 一般要慎用 。
break语句break语句在switch中使用过, 用来终止switch语句的执行。 break语句还可以用于循环体中, 终止当前的循环, 并紧跟该循环块的第一条语句处执行。
举例如下: break语句
~~~
for (int i = 0; i < 10; i++) {
if (i == 3)
break;
NSLog(@ " i =%i", i);
}
NSLog(@" Game Over!");
i =0
i =1
i =2
Game Over!
~~~
也就是说如果在一组嵌套循环中执行break语句,仅会推出执行break语句的最内层循环。
continue语句continue语句用来结束本次循环, 跳过循环体中下面尚未执行的语句,
接着进行终止条件的判断, 以决定是否继续循环。
对于for语句, 在进行终止条件的判断前, 还要先执行迭代语句。
举例如下:
~~~
for (int i = 0; i < 100; i ++) {
if (i % 10 == 0)
continue;
NSLog(@"%i ", i );
}
…
18
19
21
22
…
~~~
#### goto语句
goto语句是无条件跳转, 可以完全替代break和continue。如果是嵌套循环, 可以使用 goto语句指定标签, 来改变程序的流程。
举例如下:
~~~
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 10; i++) {
if (i == 3)
goto label;
NSLog(@ " i =%i", i);
}
}
label:
NSLog(@" Game Over!");
~~~
在内循环中使用 break和continue都只能跳出内循环,
goto语句没有这个限制,
label: 是标签定义, goto语句后面要跟有标签。