5-2. 循环结构

  • 学习人数 30K+
  • 适合所有人群学习
avatar
林耿亮

你好编程主讲老师

一个完整的程序控制流包含下面三种控制流:

  1. 顺序流程
  2. 分支流程
  3. 循环流程

上一节中,我们讨论了分支流程,接下来我们将讨论循环流程。

1. 高斯求和


现在有一个需求:

计算1 + 2 + 3 + 4 ... + 99 + 100 = ?


这个问题是一个很古老的问题了,想必大家也会使用高斯求和公式轻松地计算其结果。

(首项 + 末项) x 项数 / 2

(1 + 100) x 100 / 2 = 5050

现在我们来验证一下求和公式计算的是不是准确的吧。我们让计算机用最原始的办法一项一项累加起来,一直从1累加到100。

高斯求和流程

首先,我们先准备一个变量sum值为0,用来存放每一次累加的结果。
i从1开始,计算i + sum,将结果赋值给sum。此时,sum为1 + 0。
i自增1,为2。再次计算i + sum,将结果赋值给sum。此时,sum为2 + 1 + 0。
i自增1,为3。再次计算i + sum,将结果赋值给sum。此时,sum为3 + 2 + 1 + 0。
i自增1,为4。再次计算i + sum,将结果赋值给sum。此时,sum为4 + 3 + 2 + 1 + 0。
直到i为101,停止循环。输出sum的结果。

2. while循环

C语言中,while语句可以实现循环。

while(测试条件)
    循环行为

if一样,while也仅对其后一条语句产生效果。如果要循环多条语句,请使用花括号将它们组合成一条复合语句。

while(测试条件)
{
    循环行为1
    循环行为2
    循环行为3
    ...
}

我们使用while语句来尝试实现一下上面的求和过程。

#include <stdio.h>
int main()
{
    int i = 1, sum = 0;
    while(i <= 100)
    {
        sum = i + sum;
        i++;
    }
    printf("%d %d\n", i, sum);
    return 0;
}

高斯求和结果

int i = 1, sum = 0;声明变量isum。并初始化为1和0。
while语句的测试条件为i <= 100,只要i在1到100的区间内,表达式为真,都能进入循环。
循环内,计算i + sum,将结果赋值给sum,并且i每次将自增1。
i为1时,表达式1 <= 100为真,可以进入循环。sum的值为1 + 0。i变为2。
i为2时,表达式2 <= 100为真,可以进入循环。sum的值为2 + (1 + 0)。i变为3。
i为3时,表达式3 <= 100为真,可以进入循环。sum的值为3 + (2 + 1 + 0)。i变为4。
直到i的值为101,表达式101 <= 100为假,测试条件不成立,停止循环。

3. C语言中的真与假

在表达式求值过程中:
真将用1表示,假将用0表示。

那么如果我们故意将测试条件结果改为1或0以外的数值呢?

#include <stdio.h>
int main()
{
    while(2)
    {
        printf("Hello");
    }
    return 0;
}

死循环

while将2看做了真,并且进行无限次数的循环。

在C语言中:非零即为真。

如果你的程序陷入了死循环,或者你想打断程序的执行,可以按组合键Ctrl + C让程序停止运行。