文章目录
- 1. 语法结构
- 2. for 语句的执行流程
- 3. for 循环中的 break 和 continue
- 3.1 for 循环中的 break
- 3.2 for 循环中的 continue
- 4. for 循环语句的循环控制变量
- 5. for 循环的变种
- 5.1 for( ; ; )
- 5.2. for 循环的嵌套
- 5.3 使用多个变量控制循环
- 6. for 循环笔试题
1. 语法结构
for(表达式1; 表达式2; 表达式3)
{
循环语句;
}
- 表达式 1:为初始化部分,用于初始化循环变量。
- 表达式 2:为条件判断部分,用于判断循环何时终止。
- 表达式 3:为调整部分,用于循环条件的调整。
举个栗子
题目:利用循环在屏幕上打印 1-10 的数字。
- while 循环:以前使用过的 while 循环版本的解题方式:
//使用 while 循环在屏幕上打印 1-10 的数字
#include <stdio.h>
int main()
{
int i = 1; //1. 初始化循环变量
while (i <= 10) //2. 判断是否进入循环
{
printf("%d ", i);
i++; //3. 调整循环变量
}
putchar('\n');
return 0;
}
- for 循环:而使用 for 循环就是将 while 循环中的三个步骤整合到 for 语句中的表达式 1、2、3 中。
//使用 for 循环在屏幕上打印 1-10的数字
#include <stdio.h>
int main()
{
int i;
//表达式 1、2、3 分别对应 while 循环中的 1、2、3步
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
putchar('\n');
return 0;
}
2. for 语句的执行流程
3. for 循环中的 break 和 continue
- 我们发现在 for 循环中也可以出现 break 和 continue;
- 他们的意义和在 while 循环中是一样的。但是还是有些差异的。
3.1 for 循环中的 break
- 下段代码的结果会是什么?
#include <stdio.h>
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
if(5==i)
{
break;
}
printf("%d ", i);
}
putchar('\n');
return 0;
}
- 当变量 i 调整到 5 的时候跳出循环,只会打印 1-4 的数字。
- break 在 while 循环和 for 循环中非常相似。但是 continue 就不是这个样子了。
3.2 for 循环中的 continue
- 如果把上述代码中的 break 换成 continue 又会是什么结果呢?
- 除了 5 之外其余的数字全部打印出来了,
- 和之前用 while 循环写的只会打印 1-4 然后进入死循环的结果完全不一样:
- 这还要得益于 for 循环特殊的执行表达式的步骤。
1. continue 在 while 循环中的执行步骤
- 我们都知道,在 while 循环中 continue 会跳过本次循环中后面的循环体,然后跳到循环语句的判断部分。
- 在 continue 后面的循环变量根本没机会去做出改变。
2. continue 在 for 循环中的执行步骤
- 在 for 语句的执行流程中可以知道,在执行完 continue 之后,会跳到表达式 3 的调整循环变量去;
- 在就是说,在 for 循环中使用 continue 不用担心会跳过调整循环变量这个步骤而导致出现死循环。
4. for 循环语句的循环控制变量
1. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议 for 语句的循环控制变量的取值采用 “ 前闭后开区间 ” 写法。
- 前闭后开写法:这种写法更加清晰明了方便阅读,所以一般都是建议使用这种方法书写代码。
int i;
for(i = 0;i < 10;i++)
{
循环体;
}
- 前闭后闭区间:可读性差,但不是说所有的情况下都不用这种方法。
int i;
for(i = 0;i <=9;i++)
{
循环体:
}
5. for 循环的变种
5.1 for( ; ; )
- for 循环中得初始化部分,判断部分,调整部分都是可以被省略的,但不建议初学者使用,容易导致出现问题。
- 因为 for 循环的判断部分被省略,意味着判断会恒成立,就是直接进入死循环。
#include <stdio.h>
int main()
{
for ( ; ; )//省略了初始化、判断、调整部分
{
printf("hello word\n");//进入死循环
}
return 0;
}
5.2. for 循环的嵌套
-
在 for 循环的嵌套中,外层的循环每执行一次,内层的循环都要执行完所有的循环次数。
-
也就是说,内存的 for 循环走完了一圈,外层的 for 循环才能走一步。
-
for 循环的嵌套中:内循环决定行,外循环决定列;
- 内层的 for 循环了决定一行打印多少个,外层的 for 循环了决定一列打印多少个。
1. 下面代码的结果是什么?
#include <stdio.h>
int main()
{
int i = 0, j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("hello word! ");
}
putchar('\n');
}
return 0;
}
- 内存的 for 循环决定了一行打印 4 个 hello word!
- 外层的 for 循环决定了一列打印 3 个 hello word!
2. 如果省略掉初始部分,结果又是什么?
#include <stdio.h>
int main()
{
int i=0, j=0;
for (; i < 3; i++)
{
for (; j < 4; j++)
{
printf("hello word! ");
}
putchar('\n');
}
return 0;
}
- 内循环只进去了一次,其余时候只能进去外循环,所以就是这么个结果。
5.3 使用多个变量控制循环
#include <stdio.h>
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hello word!\n");
}
return 0;
}
6. for 循环笔试题
- 下列代码会执行多少次循环。
#include <stdio.h>
int main()
{
int i = 0,k=0;
for (i = 0, k = 0; k = 0; i++, k++)
{
k++;
}
return 0;
}
- 这种情况和在 if 语句的 “ = ” 引发的错误一样;
- 在判断条件处的 k = 0 是赋值而不是判断是否相等。
- 也就是说 k 的值会一直都为 0(假),所以这个循环压根就进不去。