只要控制表达式为 true,while 循环就会反复地执行语句:
while (表达式)语句
先计算循环条件(也就是控制表达式)。如果为 true,就执行循环体,然后再次计算控制表达式。如果控制表达式为 false,程序跳过循环体,而去执行循环体后面的语句。
从语法上讲,循环体只有一条语句组成。如果需要执行多条语句时,可以使用语句块把它们组合在一起。例 1 展示了一个简单的 while 循环,整数逆序。
【例1】一个while循环 (整数逆序):
// 输入一个整数,输出该数的逆序 #includeint main() { int x; scanf("%d", &x); int digit; int ret = 0; while ( x> 0 ) { digit = x%10; printf("%d", digit); ret = ret*10 + digit; // printf("x=%d,digit=%d,ret=%dn", x, digit, ret); x /= 10; } // printf("%d", ret); return 0; }
while 循环流程图:
do…while 循环是一种底部驱动的循环:
do 语句 while (表达式)
在控制表达式被第一次计算之前,循环体语句会首先被执行一次。与 while 和 for 循环不同,do…while 循环会确保循环体语句至少执行一次。如果控制表达式的值为 true,那么另一次循环就会继续;如果是 false,则循环结束。
例 2 展示了一个do… while 循环,数位数。
【例2】一个do… while 循环(数位数):
//输入一个整数,输出该数的位数 #includeint main() { int x; int n=0; scanf("%d",&x); do { n++; x /= 10; }while( x> 0 ); printf("%dn",n) ; return 0; }
do…while 循环流程图
和 while 一样,for 循环也是一个顶部驱动的循环,但是它包含了更多的循环逻辑,如下所示:
for ( [表达式1] ; [表达式2] ; [表达式3] )
语句
在一个典型的 for 循环中,在循环体顶部,下述三个动作需要执行:
(1) 表达式 1:初始化
只计算一次。在计算控制表达式之前,先计算一次表达式 1,以进行必要的初始化,后面不再计算它。
(2) 表达式 2:控制表达式
每轮循环前都要计算控制表达式,以判断是否需要继续本轮循环。当控制表达式的结果为 false,结束循环。
(3) 表达式 3:调节器
调节器(例如计数器自增)在每轮循环结束后且表达式 2 计算前执行。即,在运行了调节器后,执行表达式 2,以进行判断。
例 3 展示了一个 for 循环,计算一个数的 n! 。
【例3】一个for 循环:
#includeint main() { int n; scanf("%d",&n); int fact = 1; int i = 1; for ( i=1; i<=n; i++){ fact *=i; } printf("%d!=%dn",n,fact); return 0; }
for 循环的流程图:
for 循环中的每一个表达式都是可以省略的,for ( ; 条件 ; ) == while ( 条件 )。
例3 中的循环:
for ( i=1; i<=n; i++){
fact *=i;
}
可以改写为 while 循环 如下所示;
int i = 1;
while ( i<=n ){
fact *=n;
i++;
}
Tips for loops
如果有固定次数用 for必须执行一次用 do…while其他情况用 while



