循环结构-for语句

一、for 语句的概念

for 语句是 C++ 中三种循环控制语句之一,其使用最为灵活。既可以用于循环次数确定的情况,也可以用于循环次数未知的情况。

二、for 语句的语法形式

for (初始语句; 表达式1; 表达式2)
    语句

其中”语句”可以是单条语句,也可以是用大括号 {} 括起来的复合语句(循环体)。

三、for 语句的执行流程

  1. 首先执行初始语句(仅执行一次)。
  2. 然后计算表达式 1(循环控制条件)。
  3. 若表达式 1 的值为 true(非 0),则执行循环体;若为 false,则结束循环。
  4. 每次执行完循环体后,计算表达式 2 的值(通常用于更新循环控制变量)。
  5. 然后回到第 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。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注