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