你知道如何求 sum=1+2+...+5 之和吗?
计算机内部有个基本的运算单元,称为算术逻辑单元 (Arithmetic-Logic Unit, ALU)。虽然现在计算机的运算速度非常快,但ALU能够执行的基本运算还是非常简单的,例如加减乘除、移动数的位置、逻辑运算(比较大小、判断真和假)、跳转。
所以,我们进行程序设计时,需要把复杂的运算分解为基本的操作。
对于求sum=1+2+...+5 之和,可以分解为下面的操作:
1 2 3 4 5 6 | sum = 0; sum = sum + 1; sum = sum + 2; sum = sum + 3; sum = sum + 4; sum = sum + 5; |
可以看出,上面总共进行了5次加法运算。这5次加法运算可以概括为
1 | sum = sum + i; |
i的变化范围是 1、2、3、4、5
1 2 3 | for(i=1; i<=5; i=i+1) { sum = sum + i; } |
完成的程序就是
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main(int argc, char *argv[]) { int i, sum = 0; for(i=1; i<=5; i=i+1) { sum = sum + i; } printf("%d\n", sum); return 0; } |
这段代码也可以使用 while 循环来完成。 for 循环能够完成的工作, while 循环也同样可以。
for 循环中第一个分号前的语句( i = 1)可以放到 while 的前面,第2个分号后面的语句(i=i+1)可以放到循环体的最后面。
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main(int argc, char *argv[]) { int i, sum = 0; i = 1; while (i<=5) { sum = sum + i; i = i + 1; } printf("%d\n", sum); return 0; } |
那么什么情况下该使用 for 循环,什么情况下该使用 while 循环呢?
建议: 当循环变量线性变化,如 i = i + 1、 i = i-1、 i = i + 5 等等。
本着从特殊到一般的原则,把 5 变成通用的变量 n,那么程序可以写出:
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> int main(int argc, char *argv[]) { int i, n, sum = 0; scanf("%d", &n); for(i=1; i<=n; i=i+1) { sum = sum + i; } printf("%d\n", sum); return 0; } |
1 |
1 |
1 |
1 |