for语句
格式:
for(init_expression;loop_condition;loop_expression)
<span style="white-space:pre"> </span>program statement
init_expression用于在循环开始之前设置初始值。
loop_condition用于指定继续执行所需的条件,只要满足这个条件,循环就将继续执行。
关系运算符:
关系运算符的优先级比所有的算术运算符的优先级都低。
loop_expression在每次执行循环体之后求值。
执行过程:
1.首先求初始表达式的值。这个表达式通常设置一个将在循环中使用的变量,对于某些初始值(例如0或1)来说,通常称为索引变量。
2.求循环条件的值,如果条件不满足(表达式位false),循环就立即终止。然而执行在循环之后的程序语句。
3.执行组成循环体的程序语句。
4.求循环表达式的值。这个表达式通常用于改变索引变量的值。
5.返回到步骤2.
注意:
1.循环条件要在进入循环时在第一次执行循环体之前立即求值。
2.不要在循环末尾处的结束圆括号后面放置分号,这导致循环立即终止。
嵌套的for循环
#import<Foundation/Foundation.h>
int main (int argc ,char* argv[])
{
@autoreleasepool{
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);
}
}
}
for循环的变体
for循环的任何位置都可包含多个表达式,只要使用逗号分隔这些表达式即可。例如:
for(i=0,j=0;i<10;++i)
for(i=0,j=0;i <10;++i,j-=10)
for(;j!=100;++j)
省略loop_condition字段的for循环实际上无限循环,理论上执行无限次的循环。只要有其他方式退出循环(例如:return,break,goto语句),就可以使用这一循环。
for(int counter=1;counter<=5;++counter)
变量counter只在for循环的整个过程是已知的(它被称为局部变量),并且不能在循环外部访问。
while语句
格式:
while(expression)
program statement
执行过程:
圆括号中指定的表达式(expession)将被求值。如果表达式求值的结果为true,则执行随后的程序语句(program statement)。执行完这条语句(或位于花括号中的一组语句)后,将再次对表达式求值,如果求值的结果为true,将再次执行程序语句。继续这个过程,直到表达式的最终结果为false,循环终止。
for语句都可以转换成等价的while循环。反之亦然。
for语句:
for(init_expression;loop_condition;loop_expression)
<span style="white-space:pre"> </span>program statement
可以转换成while语句:
init_expression;
while(loop_condition){
program statement
loop_expression;
}
一般来说,在执行预定次数的循环时,首选for语句,同样,如果初始表达式,循环表达式和,循环条件都涉及同一变量,那么for语句可能是合适的选择。
do语句
本文讨论的两个循环结构都要在循环开始前测试一组条件。如果条件不满足,那么可能永远不会执行循环体。有时需要在循环结尾(而不是在开始)处检测,因此,OC提供了do语句。
格式:
do
program statement
while (expression)
执行过程:
首先执行程序语句(program statement)。其次,求圆括号中表达式(expression)的值,如果表达式的求值结果为true,循环将继续,并再次执行程序语句。只要表达式的计算结果始终为true,就将重复执行程序语句。当表达式求出的值为false时,循环将终止。
break语句
执行break语句,程序立即退出正在执行的循环,循环内break之后的语句将被跳过,并且该循环的执行也被终止。
如果在一组嵌套循环中执行break语句,仅会退出执行break语句的最内层循环。
continue语句
执行continue语句,循环会跳过该语句之后直到循环结尾处之间的所有语句。除此之外,循环将和平常一样。