一、for 语句的概念
for 语句是 C++ 中三种循环控制语句之一,其使用最为灵活。既可以用于循环次数确定的情况,也可以用于循环次数未知的情况。
二、for 语句的语法形式
for (初始语句; 表达式1; 表达式2)
语句
其中”语句”可以是单条语句,也可以是用大括号 {} 括起来的复合语句(循环体)。
三、for 语句的执行流程
- 首先执行初始语句(仅执行一次)。
- 然后计算表达式 1(循环控制条件)。
- 若表达式 1 的值为 true(非 0),则执行循环体;若为 false,则结束循环。
- 每次执行完循环体后,计算表达式 2 的值(通常用于更新循环控制变量)。
- 然后回到第 2 步,再次计算表达式 1,决定是否继续循环。
四、for 语句各部分的省略规则
| 组成部分 | 能否省略 | 说明 |
|---|---|---|
| 初始语句 | 可以 | 通常放在 for 外部,但分号不能省 |
| 表达式 1(循环条件) | 可以 | 省略后条件始终为 true,形成死循环 |
| 表达式 2(更新语句) | 可以 | 需在循环体内手动更新循环变量 |
| 两个分号 | 不能 | 语法要求必须保留 |
当三个部分全部省略时:
for (;;)
语句
这相当于 while(true) 语句,构成死循环。
五、for 语句与其他循环的关系
1. for 与 while 的等价转换
如果省略表达式 1 和表达式 2,只保留表达式 2,则 for 语句完全等同于 while 语句:
// for 形式
for (; num <= 10; )
{
total += num;
num++;
}
// 等价的 while 形式
while (num <= 10)
{
total += num;
num++;
}Code language: JavaScript (javascript)
2. 初始化语句放在 for 外部
int num = 1;
for (; num <= 10; num++)
{
total += num;
}
// num 在 for 外部仍可访问Code language: HTML, XML (xml)
六、代码示例
以下代码演示了 for 语句的各种用法:
#include <iostream>
using namespace std;
int main()
{
// 示例1:求自然数 1~10 之和
int total = 0;
for (int num = 1; num <= 10; num++)
{
total += num;
}
cout << "1+2+...+10 = " << total << endl; // 输出 55
// 示例2:初始化语句放在 for 外部
int sum = 0;
int i = 1;
for (; i <= 100; i++)
{
sum += i;
}
cout << "1+2+...+100 = " << sum << endl; // 输出 5050
// 示例3:省略表达式2,在循环体内更新
int total2 = 0;
for (int j = 1; j <= 5; )
{
total2 += j;
j++; // 在循环体内更新
}
cout << "total2 = " << total2 << endl;
// 示例4:死循环
/*
for (;;)
{
cout << "infinite loop" << endl;
}
*/
// 示例5:等价的 while(true)
/*
while (true)
{
cout << "infinite loop" << endl;
}
*/
// 示例6:多个初始化和更新表达式(逗号运算符)
for (int i = 0, j = 0; i <= 10; i++, j++)
{
cout << "i = " << i << ", j = " << j << endl;
}
// 示例7:输入一个整数,求出它的所有因子
cout << "请输入一个整数:" << endl;
int input = 0;
cin >> input;
cout << input << " 的因子有:";
for (int k = 1; k <= input; k++)
{
if (input % k == 0)
{
cout << k << " ";
}
}
cout << endl;
// 示例8:嵌套 for 循环(输出九九乘法表)
for (int row = 1; row <= 9; row++)
{
for (int col = 1; col <= row; col++)
{
cout << col << "x" << row << "=" << col * row << "\t";
}
cout << endl;
}
return 0;
}Code language: PHP (php)
七、注意事项
- for 循环头部中声明的变量,其作用域仅限于 for 循环内部,循环结束后不可访问。
- 如果需要在循环外部使用循环变量,应将初始化语句放在 for 外部。
- 表达式 1 省略后,循环条件默认为 true,必须在循环体内使用 break 语句跳出,否则形成死循环。
- 表达式 2 省略后,需在循环体内手动更新循环变量,否则可能导致死循环。
- for 语句头部中的分号不能省略,即使某一部分为空,分号也必须保留。
- 多个循环变量可以用逗号运算符分隔,如 for (int i = 0, j = 10; i < j; i++, j–)。
八、三种循环语句的比较
| 循环类型 | 执行顺序 | 最少执行次数 | 适用场景 |
|---|---|---|---|
| while | 先判断后执行 | 0 次 | 循环次数不确定,条件控制 |
| do…while | 先执行后判断 | 1 次 | 至少需要执行一次 |
| for | 先判断后执行 | 0 次 | 循环次数确定或需要集中管理循环变量 |
九、小结
- for 语句语法:for (初始语句; 表达式1; 表达式2) 语句。
- 执行流程:初始语句 → 判断表达式1 → 执行循环体 → 计算表达式2 → 重复判断。
- 三个部分均可省略,但分号不能省。全部省略构成死循环。
- 初始化语句中声明的变量作用域仅限于 for 循环内部。
- for 语句灵活,适合循环次数确定的场景,也可用于循环次数未知的情况。
- 下一节将介绍循环控制语句 break 和 continue。
Previous: 循环结构-do…while语句
Next: 循环结构的嵌套