二、for 循环
1、语法结构
for(表达式1;表达式2;表达式3)
循环语句;
注:
表达式1是初始化部分;
表达式2是判断部分;
表达式3是调整部分;
int i = 0;
for (i = 1; i <= 10; i++) //初始化部分:i为1。判断部分:i小于等于10时候执行。调整部分:执行后i++。
{
printf("%d ", i); //打印结果是1 2 3 4 5 6 7 8 9 10。
}
2、 for循环中,break 代表永久中止循环,直接跳出循环。
int i = 0;
for (i = 1; i <= 10; i++) //初始化部分:i为1。判断部分:i小于等于10时候执行。调整部分:执行后i++。
{
if (i == 5)
break;
printf("%d ", i); //打印结果是1 2 3 4。
}
判断i 等于 5后直接终止循环。
3、for循环中,continue 代表继续,即跳过本次循环continue后面的语句,直接重新判断是否继续新一轮循环。
int i = 0;
for (i = 1; i <= 10; i++) //初始化部分:i为1。判断部分:i小于等于10时候执行。调整部分:执行后i++。
{
if (i == 5)
continue;
printf("%d ", i); //打印结果是1 2 3 4 6 7 8 9 10。
}
跳过打印5 命令。
4、不可在for循环体内修改循环变量,防止for循环失去控制。
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i); //打印结果 1 6 6 6 6 6 (后面无限6死循环)
i = 5;
}
内部修改变量导致死循环
int i = 0;
for (i = 1; i <= 10; i++) //这里的i++是后来观看代码的人补上的。
{
printf("%d ", i); //打印结果1 3 5 7 9。
i++; //在循环体内写调整部分,其他人注意不到。打印结果就和预期不符。
}
内部修改变量,导致后面看代码人员修改出错。
5、建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;
for (i = 1; i < 11; i++) //前闭是指 i=1;后开是指i<11。< 比 <= 更清晰,更易读。
{
printf("%d ", i); //打印结果是1 2 3 4 5 6 7 8 9 10 。
}
一个小于号 比小于等于逻辑清晰。
6、for循环的初始化、判断、调整三个部分都可省略,程序仍能执行下去。但不建议省略。
int i = 0;
for (;;)
{
printf("a\n"); //a换行a换行(无限a换行死循环)。
}
全部省略仍能执行代码,死循环。
int i = 0;
int j = 0;
for (; i < 2; i++) //i小于2的时候执行,执行后i++。
{
for (; j < 2; j++) //j小于2的时候执行,执行后j++。
{
printf("a "); //打印结果a a 。
}
}
单个部分省略也能执行代码,易出错。
7、for循环变量控制可能不止一个变量。
int i = 0;
int j = 0;
for (i = 0,j = 1; i < 5 && j <4; ++i,j++) //i初始化为0,j初始化为1,i小于5 且 j小于4 时执行,执行后++i,j++。
{
printf("a "); //打印结果a a a 。
}
三、do while 循环
1、语法结构
do
{
循环语句;
} while(表达式);
注:
先执行后判断,所以至少循环一次。
int i = 1;
do //执行语句
{
printf("a ", i); //打印结果a a a a a 。
i++; //i++。
} while(i <= 5); //i <= 5 的时候执行。
2、do...while循环中,break 代表永久中止循环,直接跳出循环。
int i = 0;
do
{
if (i == 3) //i等于3的时候执行。
break; //终止循环。
printf("a "); //打印结果a a a 。
i++;
} while (i <= 5); //i 小于等于 5的时候执行下一轮循环。
同while里面的break。
3、do...while循环中,continue 代表继续,即跳过本次循环continue后面的语句,直接重新判断是否继续新一轮循环。
int i = 0;
do
{
if (i == 3) //i等于3的时候执行。
continue; //跳过后续语句,直接判断。
printf("a "); //打印结果a a a 死循环。
i++;
} while (i <= 5); //i 小于等于 5的时候执行下一轮循环。
continue 跳过后,i不再增加,陷入死循环。