while 循环
while 循环先判断,再执行循环体
#include <stdio.h>
int main()
{
int i = 10;
while(i>10)
{
printf("%d ",i);
i++;
}
}
// 输出
什么也不输出,因为先执行 i 是否大于 10 的判断,但并不大于 10 ,所以不执行循环体
do while 循环
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d ",i);
i++;
}while(i>10);
}
// 输出
这是一个从 10 到 +∞ 的无限循环
// 可以看到先执行 printf 和 i++ 的操作后,满足了判断条件 i>10
for 循环
逗号运算符
逗号运算符的优先级是所有运算符中最低的,且采用从左向右结合的方式
for 的格式
for(表达式1;表达式2;表达式3)
{
// 执行代码
}
// 其中表达式并非只能一个语句,可以是多个语句,用逗号隔开
// 1. 表达式 1 只在第一次初始化时存在,之后的循环将只受限于表达式 2,3
#include <stdio.h>
int main()
{
int i,j;
for(i=1,j=i+1;i<20;i++)
{
printf("i=%d,j=%d\n",i,j);
}
}
// 输出,可以看到 j 的值没有变,因为表达式 1 只在第一次时使用
i=1,j=2
i=2,j=2
i=3,j=2
i=4,j=2
i=5,j=2
i=6,j=2
i=7,j=2
i=8,j=2
i=9,j=2
i=10,j=2
i=11,j=2
i=12,j=2
i=13,j=2
i=14,j=2
i=15,j=2
i=16,j=2
i=17,j=2
i=18,j=2
i=19,j=2
break 语句
break 用于跳出当前循环体的所有循环,即即使后面还有循环,也不再执行,这点和 continue
要区分
#include <stdio.h>
int main()
{
int i=1;
while(1)
{
i++;
printf("%d ",i);
if(i==20) break;
}
}
// 输出,这本来是一个无限循环,但是设置了 i == 20,跳出所有循环
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
note
- 对于嵌套循环来说(不管是 while,do while 还是 for),break 都只能跳出一个循环范围,比如有一个两层嵌套的结构,break 位于最里面,那么 break 只能跳出最里面的循环,外层循环体依旧执行。
#include <stdio.h>
int main()
{
int i=0,j=0;
while(i<20)
{
while(j<5)
{
if(j==3) break;
printf("i=%d,j=%d\n",i,j);
j++;
}
j=0;
i++;
}
}
// 输出,可以看到所有循环中,只有内层循环当 j == 3时,跳出,不在执行 j==4 和 j==5
// 但 i 的每一次循环都执行
i=0,j=0
i=0,j=1
i=0,j=2
i=1,j=0
i=1,j=1
i=1,j=2
i=2,j=0
i=2,j=1
i=2,j=2
i=3,j=0
i=3,j=1
i=3,j=2
i=4,j=0
i=4,j=1
i=4,j=2
i=5,j=0
i=5,j=1
i=5,j=2
i=6,j=0
i=6,j=1
i=6,j=2
i=7,j=0
i=7,j=1
i=7,j=2
i=8,j=0
i=8,j=1
i=8,j=2
i=9,j=0
i=9,j=1
i=9,j=2
i=10,j=0
i=10,j=1
i=10,j=2
i=11,j=0
i=11,j=1
i=11,j=2
i=12,j=0
i=12,j=1
i=12,j=2
i=13,j=0
i=13,j=1
i=13,j=2
i=14,j=0
i=14,j=1
i=14,j=2
i=15,j=0
i=15,j=1
i=15,j=2
i=16,j=0
i=16,j=1
i=16,j=2
i=17,j=0
i=17,j=1
i=17,j=2
i=18,j=0
i=18,j=1
i=18,j=2
i=19,j=0
i=19,j=1
i=19,j=2
continue 语句
continue 用于跳过本次循环。
break 和 continue 的区别
我们用考试在打比方,假设参加某种考试,考试分成 5 轮,当你到第三轮时,如果你用 break 语句,那么后面的 4,5 就都不参加了,而当你用 continue 时,仅跳过本轮(第 3 轮),后面的 4,5 轮依然要参加。
同时需要注意的是,在当前轮中,二者都是仅从存在 break 或者 continue 的地方开始不参加,在这两个语句之前执行的代码依旧正常执行。
#include <stdio.h>
int main()
{
int i=0;
while(i<10)
{
i++;
printf("%d ",i);
if(i==2)
{
printf("跳过本次循环\n");
continue;
}
printf("没有跳过\n");
}
}
// 输出,可以看到第二轮执行了 continue,但也仅仅是从 continue 之后的代码才不执行,
// printf("跳过本次循环\n"); 位于 continue 之前照样执行
1 没有跳过
2 跳过本次循环
3 没有跳过
4 没有跳过
5 没有跳过
6 没有跳过
7 没有跳过
8 没有跳过
9 没有跳过
10 没有跳过