計算機的基本屬性之一就是它能夠重復執行一組語句。
循環語句的作用是反復執行一段代碼, 直到滿足終止循環的條件為止。
?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語句后面要跟有標簽。