C while 循环

在 C 语言中,循环语句指的是在 “满足某个条件下” 循环反复地执行某些操作的语句。这就很有趣了,现在像 “1 + 2 + 3 + ... + 100” 、 “1 + 3 + 5 + ... + 99” 这种计算就可以轻松用程序来实现了。

在 C 语言中,循环语句共有以下 3 种。

  • while 语句。
  • do...while 语句。
  • for 语句。

C while 循环语法

这一节,我们先来给大家介绍一下 while 语句的用法。

语法:

while (条件)
{
    // 当条件为“真”时,循环执行
}

说明:

如果 “条件” 返回为真(1),则会执行 “{}” 内部的代码。当执行完 “{}” 内部代码之后,会再次判断 “条件” 是否成立。如果条件返回还是真,则会继续重复执行 “{}” 中的代码……循环执行直到条件为假(0)才结束整个循环,最后再接着执行 while 语句后面的程序。

在使用 while 语句时,小伙伴们应该清楚以下几点。

  • 确保条件最终会变为假:如果 while 循环中的条件永远不会变为 “假” ,那么该循环就会无限执行(变为死循环)。
  • 少用 break 语句:虽然 break 语句 可以终止循环,但应该少用。过多使用 break 语句会导致代码可读性比较差。
  • 少用 while 循环:优先考虑后面介绍的 for 循环,而不是 while 循环。主要是因为 while 循环的递增递减变量是放在外部定义,而 for 循环的递增递减变量是放在内部定义(更容易维护)。

C while 循环示例

小伙伴们肯定听过大数学家高斯的故事。老师让班里的小学生们计算 1 + 2 + 3 ... + 100 的和。聪明的高斯想到了一个非常巧妙的办法,在很短时间内就算出了答案。现在让我们用 C 语言中的循环语句来帮高斯解决这个问题。

示例 1:使用 while 循环来计算 1 + 2 + 3 + ... + 100 的值

#include <stdio.h>

int main(void)
{
    int n = 1;
    int sum = 0;

    // 如果 n 小于等于 100,则会执行 while 循环
    while (n <= 100)
    {
        sum += n;      // 等价于 sum = sum + n;
        n++;           // 等价于n = n + 1;
    }
    printf("1 + 2 + 3 + ... + 100 = %d", sum);

    return 0;
}

运行结果如下。

1 + 2 + 3 + ... + 100 = 5050

分析:

变量 n 用于递增(也就是不断加 1),初始值为 1。变量 sum 用于保存累加的和,初始值为 0。对于 while 循环,我们一步步来给大家分析一下。

第 1 次执行 while 循环,sum = 0 + 1,n = 2。

第 2 次执行 while 循环,sum = 0 + 1 +2,n = 3。

第 3 次执行 while 循环,sum = 0 + 1 + 2 + 3,n = 4。

……

第 100 次执行 while 循环,sum = 0 + 1 + ... + 100,n = 101。

记住,每一次执行 while 循环之前,我们都需要判断条件是否满足。如果满足,则继续执行 while 循环;如果不满足,则退出 while 循环。

当我们第 101 次执行 while 循环时,由于此时 n = 101,而判断条件 n <= 100 返回 “假”,此时 while 循环不再执行(也就是退出 while 循环)。由于退出了 while 循环,接下来就不会再循环执行 while 中的程序,而是执行 while 后面的 printf() 了。

对于上面示例的循环来说,用流程图表示如下图所示。

C while循环流程图

可能小伙伴就会问了,计算 1 ~ 100 所有整数之和,这个使用等差数列的公式 s = (n + 1) * n / 2 好像也可以吧?确实如此。

示例 2:不使用 while 循环,实现等差数列

#include <stdio.h>

int main(void)
{
    int n = 100;

    int sum = (n + 1) * n / 2;
    printf("1 + 2 + 3 + ... + 100 = %d", sum);

    return 0;
}

运行结果如下。

1 + 2 + 3 + ... + 100 = 5050

分析:

虽然数学公式法效率更高,但咱们这一节节的重点是学习循环思维。因为在实际编程中,很多复杂逻辑(如处理文件、遍历数组等)是无法用公式解决的,而必须使用循环。

示例 3:while 循环计算 1 + 3 + 5 + … + 99 的和

#include <stdio.h>

int main(void)
{
    int n = 1;
    int sum = 0;

    // 如果 n 小于 100,则会执行 while 循环
    while (n < 100)
    {
        sum += n;      // 等价于 sum = sum + n;
        n += 2;        // 等价于 n = n + 2;
    }
    printf("1 + 3 + 5 + ... + 99 = %d", sum);

    return 0;
}

运行结果如下。

1 + 3 + 5 + ... + 99 = 2500

分析:

在这个例子中,将 while 循环的条件 “n < 100” 改为 “n <= 99” 也是一样的,因为两个条件是等价的。当然,上一个例子 “n <= 100” 其实也等价于 “n<101”。我们可以思考一下为什么?

此外,sum += n; 等价于 sum = sum + n;,而 n += 2; 等价于 n = n + 2;。在实际开发中,我们一般使用简写形式多,大家一定要熟悉这种赋值运算符。至于 while 循环是怎么进行的,可以对比一下上一个例子的具体流程,自己理清一下思路,慢慢消化一下,很简单。

最后,对于 C 语言的 while 语句,我们还需要特别注意以下 2 点。

  • 循环内部的语句一定要用 “{}” 括起来,即使是一条语句也要。
  • 循环内部中,一定要有可以结合 “判断条件” 来让循环可以退出的语句,一般来说都是 i++、i += 2 之类的。同时,要确保在循环开始前,参与条件判断的变量已经被正确初始化。如果没有 “判断条件” 和 “退出语句”,循环就会一直运行下去,变成一个 “死循环”。要是这样的话,程序崩溃了,你崩溃了,老板也跟着崩溃了……。

示例 4:死循环

#include <stdio.h>

int main(void)
{
    int n = 100;

    while (n == 100)
    {
        printf("我也是醉了");
    }

    return 0;
}

运行结果如下。

我也是醉了
我也是醉了
……
我也是醉了

分析:

这就是最简单的 “死循环”,因为判断条件一直为 “真”,因此会一直执行 while 循环内部代码,然后会不断输出内容。如果想要停止程序的运行,我们可以使用 “Ctrl + C” 这个快捷键来停止。

在实际开发中,我们一定要避免 “死循环” 的出现,因为这是非常低级的一种错误了。

上一篇: C switch 语句

下一篇: C do while 循环

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号