一个完整的程序控制流包含下面三种控制流:
- 顺序流程
- 分支流程
- 循环流程
上一节中,我们讨论了分支流程,接下来我们将讨论循环流程。
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;
声明变量i
,sum
。并初始化为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
让程序停止运行。