ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 【知识精讲】for循环 ## Part1 除了`while`循环之外,在 C++ 语言编程中,还有一种极为常见的循环——`for`循环。`for`循环的功能非常强大,它的使用条件灵活,完整地包含了`while`循环所具有的所有功能,并且还具有赋初值、循环变量自增等一系列功能。此外,在很多情况下,`for`循环层次清晰,拥有更好的可读性。 ## Part2 跟`while`循环相比,`for`循环的结构稍显复杂,其语法形式如下: ~~~ for (初始语句;表达式1;表达式2) { 循环体 } ~~~ 看起来有点复杂?其实这很好理解。`for`循环的执行流程是:首先执行一次初始语句,然后对表达式1 的值进行计算,并根据表达式1 的计算结果决定是否执行循环——如果表达式1 的值为`true`那就进入循环体开始执行。 当循环体执行完一次之后,计算表达式2 的值,然后再回到表达式1 并判断是否继续执行循环体;而如果表达式1 的计算结果为`false`的话,那就会退出循环。 ## Part3 这样用语言描述的话,大家看起来可能会有点晕——所以我们直接来看代码吧!举个简单的例子,如果我们想要在屏幕上依次输出 111 到 100100100 的话,那么借助`for`循环,我们便可以使用这样一段代码来实现这个功能: ~~~ for (int i = 0; i < 100; i++) { cout << i+1 <<endl; } ~~~ 对照之前介绍过的流程,我们可以分析一下`for`循环执行的过程:首先我们可以看到,`for`循环初始化了一个计数器变量`i`,并且赋给它初值 000,然后执行循环体,也就是`cout`输出语句。每执行完一次循环体之后,再执行一次`i++;`操作,对`i`进行自增。 `i`的值从 000 一直加到 999999 ,正好执行了 100100100 次——这里需要特别注意的是,对于从 000 开始计数的`i`,如果你希望循环执行`n`次的话,条件判断的形式就应该写成`i<n;`;而如果`i`是从 111 开始计数的话,那么条件判断就要写成`i<=n;`了。作为初学者,大家务必要注意这一点。 ## Part4 除此之外,有几个要点还要特别强调,请大家务必注意: * `for`循环中的初始语句,表达式1 和表达式2 都不是必须的——我们可以省略它们,但**分号不能省略**。如果将这三者全部省略的话,形式如下所示:`for(;;)`相当于`while(true)`——如果在循环体中没有可以跳出循环的语句的话(后面的章节会介绍),那么整个循环将进入死循环。 如果你在自己的电脑上写程序不小心进入了死循环的话,那么你可以按`Ctrl+C`来强行终止程序。在实际编程中,你应该小心地避免程序陷入死循环。 ## Part5 * `for`循环带有初始语句——从上面的例子中我们可以看到,我们在初始语句中使用`int i=0;`对计数变量`i`进行了声明。这种写法定义的变量只在循环内部有效,用途专一而明确,可以有效增强程序的可读性而不出错,建议大家尽量都这么写,养成良好的编程习惯。 此外,初始语句中可以定义多个变量,例如`int i=0,j=0;`,或者使用逗号连接多个表达式,例如`i=0,j=100;` ## Part6 如果循环体只有一句代码的话,那么大括号可以省略——如下所示: ~~~ for (int i = 0; i < 100; i++) cout << i+1 << endl; ~~~ 但是这么做容易破坏代码的可读性,所以不推荐大家使用这种写法。 ## Part7 任意两个循环结构,或者是循环结构与选择结构之间,都可以自由地嵌套使用。比如说,我们可以将两个`for`循环嵌套,如下所示: ~~~ for (int i = 0; i < 10; i++) { for (int j = 0; j < 12; j++) { 循环体 } } ~~~ 对于这个循环来说,内层循环执行 121212 次,外层循环执行 101010 次,这样算下来整个循环体一共执行了 12∗10\=12012\*10=12012∗10\=120 次