for 语句
-
当需要重复执行一段代码很多遍的时候,可以使用循环结构来解决问题。
-
那么什么是循环结构呢?
- 循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。
- 由循环体中的条件,判断继续执行该功能还是退出循环。
-
for循环
for
循环语法:
for (循环变量赋初始值;循环条件;更新循环变量) { 循环体 }
-
循环控制语句 break
-
除了正常的循环之外,循环控制语句可以更改程序执行的正常序列。循环控制语句常用的是
break
和continue
。 -
break
用法- 在
switch
语句中也有用到过,用于停止执行模块内后面的程序语句- 通常放在循环体中,当执行到这句语句时,跳出整个循环,也就是说整个循环立即终止
- 在
-
-
循环控制语句 continue
continue
用法- 通常也是放在循环体中,当执行到这句语句时,跳过当前循环体,强迫进入下一次循环
while 循环
while
循环只关注循环终止的条件和循环体的内容本身。while
语法:
while (循环成立条件) {
循环体
}
while
循环执行逻辑:- 只要循环成立条件为真,就进入循环体
- 重复这个步骤,直到循环成立条件为假
do while 循环
- 无论如何,至少要执行一次猜数字的操作,可以用
do while
的写法
Tips:在刚刚的代码中,可以发现在循环体里有猜数字(cin >> guess
)的操作,在循环开始前也有猜数字的操作。这就适合用 do while
。
do while
语法
do {
循环体
} while (循环成立条件);
do while
执行逻辑- 和
while
类似 - 唯一的区别在于:因为条件表达式出现在循环的尾部,所以至少会执行一次循环体,执行完成后,再判断是否进入下一次循环。
- 和
for 和 while 的比较
- 相同点:都是表达循环结构的语句,都可以使用
break
和continue
作为循环控制语句break
:当执行到这句语句时,跳出循环,也就是说整个循环立即终止。continue
:当执行到这句语句时,跳过当前循环,强迫进入下一次循环。
- 不同点:
for
循环需要清楚循环次数/循环变量的变化范围;while
循环只需要知道什么时候停下来就好。
多重循环
正如if语句可以通过嵌套,实现分支内部的新分支,循环也是可以嵌套的。
- 循环嵌套适用于循环的大操作里有重复的小操作的情景。
- 举例
假设我们要打印一个九九乘法表:
循环的大操作:对于1-9,每个数字都打印一行 大操作中重复的小操作:在第i
行里,对于每个小于等于i
的数字j
,都打印出i
和j
组成的乘法公式。
如果我们用for
循环内部嵌套for
循环的方式来写,代码是这样实现的:
// 1-9,每个数字打印一行
for (int i = 1; i <= 9; i++) {
// 在第i行中,对于每个小于i的数字,都打印一个等式和tab分隔
for (int j = 1; j <= i ; j++) {
cout << j << "*" << i << "=" << j*i << "\t";
}
// 第i行最后打印换行符
cout << endl;
}
如果我们用for
循环内部嵌套while
循环的方式来写,代码就是这样的:
// 1-9,每个数字打印一行
for (int i = 1; i <= 9; i++) {
// 在第i行中,对于每个小于i的数字,都打印一个等式和tab分隔
int j = 1;
while (j <= i) {
cout << j << "*" << i << "=" << j*i << "\t";
j++;
}
// 第i行最后打印换行符
cout << endl;
}
- 通过这个例子,我们一起来看看循环嵌套的注意事项:
- 可以任意嵌套,比如
for
嵌for
,for
嵌while
,while
嵌for
,while
嵌while
都可以 - 如果是
for
嵌for
,内外层的循环变量(比如上述代码的i
和j
)需要用不一样的变量,否则容易产生混乱 - 在嵌套操作中都需要使用缩进,以增强代码可读性
le嵌
while`都可以 - 如果是
for
嵌for
,内外层的循环变量(比如上述代码的i
和j
)需要用不一样的变量,否则容易产生混乱 - 在嵌套操作中都需要使用缩进,以增强代码可读性
- 可以多层嵌套,但是有时候太多层嵌套容易超时,需要引起注意
- 可以任意嵌套,比如