循环
没有循环和结构化变量的程序不值得编写.
目录
1. while 语句 (先判后做)
格式:
[while 语句]
while (表达式) 语句
圆括号里面的表达式是控制表达式,后面的语句是循环体.
执行 while 语句时,首先计算控制表达式的值,如果值不为0,那么执行循环体,接着再次判定表达式,直到控制表达式为0.
举个例子:
int i,n,t;
i = 1;
t = 0;//初始化很重要
n = 100;
while (i <= n) {
t = t + i;
i++;
}
无限循环
[ 惯用法 ] while (1) …
2. do 语句 (先做后判)
[do语句]
do 语句 while 表达式
do {
printf("T minus %d and counting\n", i);
--i;
} while(i > 0);
do语句整个是一个语句, while() 要以 ; 结尾,和 while 语句有区别.
3. for 语句
[for 语句格式]
for (表达式1;表达式2;表达式3) 语句
注意表达式1,表达式2,表达式3之间用分号隔开
一些常用的 for 语句:
for ( i = 0; i < n; i++) ...
for ( i = n; i >= 0; i--) ...
for ( int i = 0; i < n; i++) ...//for语句声明的变量不可以在循环外访问
for (; i > 0; --i) ...
for (; i > 0; )// 等价于while语句
用 for 语句实现无限循环:
for ( ; ; )
…
4. 退出循环
4.1 break 语句
break 语句把程序控制从包含该语句的最内层 while 、do、for、或者 switch 语句中转移出来。因此,当这些语句出现嵌套的时候,break 语句只能跳出一层嵌套。
比如:
while(...) {
switch (...) {
...
break;
...
}
...
}
这个时候 break 语句只能跳出 switch 语句,但却不能跳出 while 循环。
4.2 continue 语句
break 语句刚好把程序控制转移到循环体末尾之后,而 continue 语句刚好把程序控制转移到循环体末尾之前。用 break 语句会使程序控制跳出循环,而 continue 语句会把程序控制留在循环内。
break 语句和 continue 语句还有一个区别是:break 语句可以用在 switch 语句和循环,而 continue 语句只能用在循环中。
举个例子:
int n,num;
n = 0;
sum = 0;
while (n < 10) {
scanf("%d", &i);
if (i == 0)
continue;
sum += i;
n++;
//continue jumps to here
}
4.3 goto 语句
break 语句和 continue 语句都是跳转语句:它们把控制从程序中的一个位置转移到另一个位置。这两者都是受限制的:break 语句的目标是包含该语句的循环结束之后的那一点 ,而 continue 语句的目标是循环结束之前的那一点。goto 语句则可以跳转到函数中任何有标号的语句处。
举个例子:
for (d = 2; d < n; d++ )
if (n % d == 0)
goto done;
.......
done:
if(d < n)
printf("%d is divisible by %d\n", n, d);
else
printf("%d is prime\n", n);
5. 空语句
语句可以为空,也就是除了末尾处的分号外什么符号也没有。下面是一个示例:
i = 0; ; j = 1;
这行有三条语句,中间的一条语句为空语句。
为了凸出空循环体,有以下方法:
- 空语句单独放置在一行
- 使用虚设的 continue 语句
for (d = 2; d < n && n % d != 0; d++)
continue;
- 使用空的复合语句
for (d = 2; d < n && n % d != 0; d++)
{ }