25.for

25.循环语句-for


25.1 知识点

for 循环基本语法

for 循环的基本语法结构如下:

for ( /*初始化表达式*/; /*条件表达式*/; /*增量表达式*/)
{
    // 循环代码逻辑
}
  • 第一个空位(初始化表达式):通常用于声明一个临时变量,作为计数器。
  • 第二个空位(条件表达式):决定是否进入循环,返回一个布尔类型的结果(可以是布尔变量、关系运算符、逻辑运算符或算术运算符)。
  • 第三个空位(增量表达式):用于对第一个空位中声明的变量进行自增或自减操作。

注意:

  • 第一个空位只在第一次进入 for 循环时执行。
  • 第二个空位会在每次进入 for 循环时判断,决定是否继续执行循环体。
  • 第三个空位的操作会在每次循环完毕后执行。

示例:

for (int i = 0; i < 10; i++)
{
    cout << i << endl;
}
// 执行完循环体后,输出 "循环外的逻辑"
cout << "循环外的逻辑" << endl;

for (int i = 10; i >= 0; i--)
{
    cout << i << endl;
}
// 执行完循环体后,输出 "循环外的逻辑"
cout << "循环外的逻辑" << endl;

每个空位可以根据需要进行自定义。例如,可以在第一个空位声明多个变量,在第二个空位使用任何能够返回布尔值的表达式,在第三个空位执行任何逻辑。

for (int i = 0, j = 0; i < 10 && j < 0; ++i, j = j + 1)
{
    // 循环逻辑
}

for 循环支持嵌套使用

for 循环可以嵌套在其他语句中,形成多重循环结构。以下是一个嵌套 for 循环的示例:

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        cout << i + j << endl;
    }

    while (true)
    {
        // 无限循环逻辑
    }

    if (true)
    {
        // 条件判断
    }

    do
    {
        // 循环体
    } while (true);

    switch (i)
    {
        default:
            break;
    }
}

for 循环体内,可以嵌套多种语句,如 whileifdo-whileswitch 等。

for 循环特殊写法

for 循环可以使用一些特殊写法来实现不同的控制逻辑。

  1. 死循环:
    for 循环可以写成死循环形式。以下是一个死循环的示例:

    for (;;)
    {
        cout << "for 循环的死循环" << endl;
    }
    
  2. 不写初始化和条件判断:
    初始化表达式和循环条件也可以不写在 for 语句的空位中,而是放在循环体前或循环体后。以下是两个示例:

    • 在循环前声明变量,不写初始化表达式:
    int k = 0;
    for (; k < 10;)
    {
        cout << k << endl;
        ++k; // 或者 k++, k += 1
    }
    
    • 不在 for 循环的条件表达式中写判断条件:
    for (k = 0; ; ++k)
    {
        if (k < 10)
            break;
    }
    

for 循环与 while 循环的对比

for 循环和 while 循环的主要区别在于用途和结构。两者都可以实现相同的循环逻辑,但通常 for 循环用于明确知道循环次数时,而 while 循环用于条件未知时。

  • for 循环:
    for 循环通常用于精确控制某个范围的循环,尤其适合在循环次数已知的情况下使用。

    for (int i = 0; i < 10; i++)
    {
        // 循环体
    }
    
  • while 循环:
    while 循环更适合在循环次数不确定,依赖于某个条件的情况下使用。

    int j = 0;
    while (j < 10)
    {
        // 循环体
        ++j;
    }
    

25.2 知识点代码

Lesson25_循环语句_for.cpp

#include <iostream>
using namespace std;
int main()
{
    std::cout << "for循环语句\n";

    #pragma region 知识点一 for循环基本语法

    //for ( /*初始化表达式*/; /*条件表达式*/; /*增量表达式*/)
    //{
    //    //循环代码逻辑
    //}
    //第一个空位(初始表达式): 一般是用来声明一个临时变量,用来计数用的
    //第二个空位(条件表达式):表示进入循环的条件 一个bool类型的结果(bool变量 关系运算符 逻辑运算符 算数运算符)
    //第三个空位(增量表达式):用第一个空中声明的变量 进行一个 自增减运算

    //第一个空位 只有在第一次进入for循环时 才会去执行
    //第二个空位 是每次进入for循环时都会去判断 决定了是否继续循环
    for (int i = 0; i < 10; i++)
    {
        cout << i << endl;
        //执行完这个循环语句块中的所有逻辑后
        //最后才会执行第三个空中的代码
    }
    cout << "循环外的逻辑" << endl;

    for (int i = 10; i >= 0; i--)
    {
        cout << i << endl;
    }
    cout << "循环外的逻辑" << endl;

    //每个空位 可以按照规则进行书写
    //第一个空位 就是声明变量 所以可以连续声明的
    //第二个空位 就是进入条件 只要是能够返回真假的表达式都是可以的
    //第三个空位 就是执行完一次循环逻辑过后要做的事情 做啥都行
    /*for (int i = 0, j = 0; i < 10 && j < 0; ++i, j = j + 1)
    {

    }*/

    #pragma endregion

    #pragma region 知识点二 for循环支持嵌套使用

    //多种语句嵌套
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cout << i + j << endl;
        }

        while (true)
        {

        }

        if (true)
        {

        }
        do
        {

        } while (true);

        switch (i)
        {
            default:
                break;
        }
    }

    #pragma endregion

    #pragma region 知识点三 for循环特殊写法

    //for循环时可以写死循环
    /*for (;;)
    {
        cout << "for循环的死循环" << endl;
    }*/

    //不写在空位里 而是在循环前和循环体最后写也是可以的
    //不在空位里写初始和循环体末尾条件
    int k = 0;
    for (;k < 10;)
    {
        cout << k << endl;
        ++k;//k++,k+=1;
    }
    //不在空位里写判断条件
    for (k = 0; ; ++k)
    {
        if (k < 10)
            break;
    }

    #pragma endregion

    #pragma region 知识点四 for循环与while循环的对比

    //所有和循环相关的逻辑 
    //使用目前学习过的循环语句都可以实现
    // for循环 一般用来准确的得到某一个范围中的所有数
    for (int i = 0; i < 10; i++)
    {

    }

    int j = 0;
    while (j < 10)
    {
        //....................
        ++j;
    }

    #pragma endregion
}

25.3 练习题

输出1到100之间的整数(包含本身)

for (int i = 1; i <= 100; i++)
{
    cout << i << endl;
}

求1~100之间所有偶数的和

int sum = 0;
//第一步:得到1~100之间的数
for (int i = 1; i <= 100; i++)
{
    //第二步:先判断 是不是偶数 是才累加
    if (i % 2 == 0)
        sum += i;
}
cout << sum << endl;

sum = 0;
for (int i = 2; i <= 100; i += 2)
{
    sum += i;
}
cout << sum << endl;

找出100~999之间的水仙花数

例如:153 = 111 + 555 + 333 这个数就是水仙花数

//第一步:得到100~999之间的数
for (int i = 100; i <= 999; i++)
{
    //第二步:得到百位、十位、个位
    int bai = i / 100;
    int shi = i % 100 / 10;
    int ge = i % 10;
    //370 = 3 * 3 *3 + 7 *7*7 = 27 + 49*7 = 27 + 343 = 370
    //第三步:判断 各位置的 立方 相加 是不是等于原来这个数
    if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i)
        cout << i << endl;
}

在控制台上输出九九乘法表

for (int i = 1; i <= 9; i++)
{
    // 1  1X1=1 空行
    // 2  1X2=2 2X2=4 空行
    // 3  1X3=3 2X3=6 3X3=9 空行
    // 每一行 第一个数 是从1开始 并且是小于等于 当前行数的
    for (int j = 1; j <= i; j++)
    {
        //j就是第一个数
        //i就是第二个数
        cout << j << "X" << i << "=" << j * i << " ";
    }
    //空行 因为之前一行的内容需要连续打印 不能空行
    //应该链接完毕了 再来空行
    cout << endl;
}

在控制台上输出如下10*10的空心星型方阵

**********
*        *
*        *
*        *
*        *
*        *
*        *
*        *
*        *
**********
for (int j = 0; j < 10; j++)
{
    //10列
    for (int i = 0; i < 10; i++)
    {
        //每一个行的规则
        //第一行和最后一行 要全部打印星号
        if (j == 0 || j == 9)
            cout << "*";
        else
        {
            //其他就按照现在的规则
            if (i == 0 || i == 9)
                cout << "*";
            else
                cout << " ";
        }
    }
    cout << endl;
}

在控制台上输出如下10*10的三角形方阵

*                1  1
**               2  2
***              3  3
****             4  4
*****
******
*******
********
*********
***********
//10行
for (int i = 1; i <= 10; i++)
{
    //10列
    //打印n个星号 n=行数
    for (int j = 1; j <= i; j++)
    {
        //连接打印
        cout << "*";
    }
    //空行
    cout << endl;
}

在控制台上输出如下10行的三角形方阵

         *                   1  1   ->   2i - 1    9        10 - i
        ***                  2  3   ->   2i - 1    8        10 - i
       *****                 3  5                  7
      *******                4  7                  6
     *********               5  9                  5
    ***********              6  11                 4
   *************             7  13                 3
  ***************            8  15                 2
 *****************           9  17                 1
*******************          10 19                 0    
//10行 
for (int i = 1; i <= 10; i++)
{
    //空格
    for (int k = 1; k <= 10 - i; k++)
    {
        cout << " ";
    }

    //星号
    for (int j = 1; j <= 2*i - 1; j++)
    {
        //这一行的内容要连着打印 所以不能空行
        cout << "*";
    }
    //空行
    cout << endl;
}

25.4 练习题代码

Lesson25_练习题.cpp

#include <iostream>
using namespace std;
int main()
{
    std::cout << "for循环练习题\n";

    #pragma region 练习题一

    //输出1到100之间的整数(包含本身)

    for (int i = 1; i <= 100; i++)
    {
        cout << i << endl;
    }

    #pragma endregion

    #pragma region 练习题二

    //求1~100之间所有偶数的和
    
    int sum = 0;
    //第一步:得到1~100之间的数
    for (int i = 1; i <= 100; i++)
    {
        //第二步:先判断 是不是偶数 是才累加
        if (i % 2 == 0)
            sum += i;
    }
    cout << sum << endl;

    sum = 0;
    for (int i = 2; i <= 100; i += 2)
    {
        sum += i;
    }
    cout << sum << endl;

    #pragma endregion

    #pragma region 练习题三

    /*找出100~999之间的水仙花数
    例如:153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 这个数就是水仙花数*/

    //第一步:得到100~999之间的数
    for (int i = 100; i <= 999; i++)
    {
        //第二步:得到百位、十位、个位
        int bai = i / 100;
        int shi = i % 100 / 10;
        int ge = i % 10;
        //370 = 3 * 3 *3 + 7 *7*7 = 27 + 49*7 = 27 + 343 = 370
        //第三步:判断 各位置的 立方 相加 是不是等于原来这个数
        if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i)
            cout << i << endl;
    }

    #pragma endregion

    #pragma region 练习题四

    //在控制台上输出九九乘法表

    for (int i = 1; i <= 9; i++)
    {
        // 1  1X1=1 空行
        // 2  1X2=2 2X2=4 空行
        // 3  1X3=3 2X3=6 3X3=9 空行
        // 每一行 第一个数 是从1开始 并且是小于等于 当前行数的
        for (int j = 1; j <= i; j++)
        {
            //j就是第一个数
            //i就是第二个数
            cout << j << "X" << i << "=" << j * i << " ";
        }
        //空行 因为之前一行的内容需要连续打印 不能空行
        //应该链接完毕了 再来空行
        cout << endl;
    }

    #pragma endregion

    #pragma region 练习题五

    /*在控制台上输出如下10 * 10的空心星型方阵
    **********
    *        *
    *        *
    *        *
    *        *
    *        *
    *        *
    *        *
    *        *
    **********/

    //10行
    for (int j = 0; j < 10; j++)
    {
        //10列
        for (int i = 0; i < 10; i++)
        {
            //每一个行的规则
            //第一行和最后一行 要全部打印星号
            if (j == 0 || j == 9)
                cout << "*";
            else
            {
                //其他就按照现在的规则
                if (i == 0 || i == 9)
                    cout << "*";
                else
                    cout << " ";
            }
        }
        cout << endl;
    }

   
    #pragma endregion

    #pragma region 练习题六

    /*在控制台上输出如下10 * 10的三角形方阵
    *                1  1
    **               2  2
    ***              3  3
    ****             4  4
    *****
    ******
    *******
    ********
    *********
    ***********/

    //10行
    for (int i = 1; i <= 10; i++)
    {
        //10列
        //打印n个星号 n=行数
        for (int j = 1; j <= i; j++)
        {
            //连接打印
            cout << "*";
        }
        //空行
        cout << endl;
    }

    #pragma endregion

    #pragma region 练习题七

    /*在控制台上输出如下10行的三角形方阵
             *                   1  1   ->   2i - 1    9        10 - i
            ***                  2  3   ->   2i - 1    8        10 - i
           *****                 3  5                  7
          *******                4  7                  6
         *********               5  9                  5
        ***********              6  11                 4
       *************             7  13                 3
      ***************            8  15                 2
     *****************           9  17                 1
    *******************          10 19                 0    */  

    //10行 
    for (int i = 1; i <= 10; i++)
    {
        //空格
        for (int k = 1; k <= 10 - i; k++)
        {
            cout << " ";
        }

        //星号
        for (int j = 1; j <= 2*i - 1; j++)
        {
            //这一行的内容要连着打印 所以不能空行
            cout << "*";
        }
        //空行
        cout << endl;
    }

    #pragma endregion

}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏