上一节介绍了 C 语言的 while 循环语句,可以很方便的让计算机执行很多次数的迭代,事实上,while 循环语句还有很多兄弟语句也能实现循环操作,可以视实际情况选择合适的语句。此外,C 语言还提供了 break 和 continue 关键字用于控制循环。下面我们一一介绍。
C 语言的 break 和 continue 关键字
当循环语句遇到 break 时,直接跳出循环,而遇到 continue 时,则结束本次循环,开始一次新的循环。这么说有点虚,还是来看几个例子吧:
int cnt = 0;
while(1)
{
cnt = cnt +1;
if(cnt ==3)
break;
printf("cnt=%d\n", cnt);
}
以上代码,while(1) 本应是个死循环,按理说,程序应该永远停在 while 循环语句里了。但是在 cnt 等于 3 的时候,程序遇到 break 了,于是跳出循环体,执行了 printf 语句,程序最后输出 “cnt=3”。再来看看 continue 关键字:
int cnt = 0;
while(cnt < 4)
{
cnt = cnt +1;
if(cnt ==2)
continue;
printf("cnt=%d, ", cnt);
}
代码很简单,就是把 cnt 依次从 0 加一加到 4,然后打印出它的值。程序最后输出:"1, 3, 4, ",少了 2 对不?这是因为在 cnt 等于 2 的时候,直接就结束本次循环,跳到程序开头了,也即 cnt 等于 2 的时候,printf 语句被跳过了。现在应该理解“当循环语句遇到 break 时,直接跳出循环,而遇到 continue 时,则结束本次循环,开始一次新的循环。” 这句话了。
break 和 continue 应作为独立的语句,要用 ;结尾。它们让循环更加灵活了。
C 语言的 do/while 循环语句
do/while 循环语句和 while 循环语句非常像,只是 do/while 循环语句把条件表达式放在后面,它的语法如下:
do{
语句;
}while(条件表达式);
程序遇到 do/while 循环语句后,会先执行循环体里的语句,到末尾才判断条件表达式真假决定是否循环。说到这里,就看出它与 while 循环语句的区别了:如果条件表达式为假,while 循环直接就被跳过了,不会执行;而 do/while 循环语句则至少执行一次循环。例如:
#include <stdio>
int main()
{
while(1==0){
printf("while \n");
}
do{
printf("do while\n");
}while(1==0);
}
编译执行后,程序会输出 “do while”。使用 do/while 语句要注意的事项和 while 语句一致,只是还要确保 do/while 语句的最后 while后一定要有“;”,否则编译器无法判断这是一个do/while循环的结尾还是另一个while循环的开头。
C 语言的 for 语句
先来看看 for 语句的语法:
for(控制表达式1;控制表达式2;控制表达式3)
语句
如果不考虑 continue(为什么呢,可以思考一下) ,则 for 语句相当于:
控制表达式1;
while(控制表达式2) {
语句
控制表达式3;
}
我们用 for 语句来计算 n!,请看如下代码:
int factorial(int n)
{
int result = 1;
int i;
for(i = 1; i <= n; ++i)
result = result * i;
return result;
}
++i 的作用和 i+1; i=i+1; 一样,如果 i = 0,那么执行 a = ++i; 语句后,a 等于 1,i 也等于 1。类似还有 --i,表示自减。现在来分析一下 for 语句:“i=1”,表示 for 循环体里的 i 从 1 开始;“i<=n”,表示如果 i<=n 为真,则循环,否则跳出循环;++i 表示每执行一次循环,就把 i 加一。
现在,已经知道 C 语言循环语句一大家子和它的管家们(break,continue)了吧。