📑前言

  • C语言中的for循环也用于遍历语句或程序的一部分多次,它与while和do-while循环一样。但是,在检查for循环中的条件时,我们可以初始化和递增或递减变量。与while循环不同,for循环中的条件或表达式在语句之前给出,因此可以执行语句0次或多次。

for语句的格式如下:

  • 表达式1是初始化步骤,只执行一次,表达式2是控制表达式,控制循环的终止,表达式3在每次循环的最后被执行。
  • for语句的执行步骤是:首先执行表达式1进行初始化,然后判断表达式2的值是否为真,若为真,则执行循环体,然后执行表达式3.随后再次对表达式2的值进行判断,若为真,则再次执行循环体和表达式3,依次循环直到表达式2的值为0为止。
  • for语句的3个表达式都可以省略,若省略表达式1,则在执行循环前没有初始化的操作;若省略第三个表达式,则执行完循环体后,没有再需要执行的语句,循环体确保循环能够在有限时间内终止;若省略第二个表达式,则每次判断都默认为真,除非在循环体内使用break,goto和程序终止函数外,循环不会停止。

🎯关于 for 语句的代码规范化问题

1️⃣if、else、for、while、do 都只能控制到其后的一条语句,如果要控制多条语句必须加大括号{}。但基于代码规范化,if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加{}。

2️⃣像 if、for、while 等关键字之后应留一个空格再跟左括号(,以突出关键字。

此外上面的程序还有一个知识点要跟大家说一下:从功能上讲,for(i=1; i<=100;++i)完全可以写成for(i=1; i<101; ++i),而且建议大家尽量使用这种写法。也就是说,循环语句的循环条件尽量写成半开半闭的,不管是 for 循环还是 while 循环。

for(i=1; i<101; ++i)实际上是 1≤i<101,是半开半闭的;而for(i=1; i<=100; ++i)实际上是 1≤i≤100,是全闭的。那么为什么建议使用半开半闭的呢?因为如果写成 i<=100 的话,那么每次判断的时候都要判断两次,即 i<100 和 i==100,而写成 i<101 的话每次只需要判断一次。

也许有人说:程序在执行 i<=100 的时候不是将它转换成 i<100||i==100 吗?这样由“短路或”的知识可知,如果前面的为真那么后面的不就不会执行了吗?这样不也是判断一次吗?不是这样的,系统是不会将 i<=100 转换成 i<100||i==100 的,每次判断的时候 i<100 和 i==100 都要判断。

但是写成半开半闭也有一个问题,就是会影响对代码的理解。有时候写成全闭的区间理解起来才顺畅,而写成半开半闭反而不易理解,比如<=右边是变量或表达式的时候。这时候要以可读性为第一要素,即哪种好理解就使用哪种。现在 CPU 速度那么快,也不在乎那点效率。所以前面说“尽量”,没有要求一定要那样写。


❗注意:PC端目录请看文章左手边(默认),app端(移动端)目录请看导航栏处

📚文章目录

📑前言

🎯关于 for 语句的代码规范化问题

🧩第一种

🧩第二种

🧩第三种


🧩第一种

#include <stdio.h>
int main(int argc, char **argv)
{
    int i = 0;
    int j = 0;

    for (i = 1; i <= 9; ++i)
    {
        for (j = 1; j <= 9; ++j)
            printf("%d*%d=%2d\t", i, j, i * j);
        printf("\n");
    }

    return 0;
}


🧩第二种

#include <stdio.h>
int main(int argc, char **argv)
{
    int i = 0;
    int j = 0;

    i = 1;
    for (;;)
    {
        if (i > 9)
            break;
        j = 1;
        for (;;)
        {
            if (j > 9)
                break;
            printf("%d*%d=%2d\t", i, j, i * j);
            ++j;
        }
        printf("\n");
        ++i;
    }

    return 0;
}


🧩第三种

#include <stdio.h>
int main(int argc, char **argv)
{
    int i = 0;
    int j = 0;

    int row = 0;
    int col = 0;
    for (i = 0; i < 81; ++i)
    {
        row = i / 9 + 1;
        col = i % 9 + 1;
        printf("%d*%d=%2d\t", row, col, row * col);
        if ((i + 1) % 9 == 0)
            printf("\n");
    }

    return 0;
}


📚C语言——习题、知识点案例,持续更新🔥  

🎯点赞收藏,防止迷路🔥 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐