现在的位置: 首页 > 竞赛 > 正文

从累加和出发谈循环

2012年12月20日 竞赛 ⁄ 共 326字 ⁄ 字号 暂无评论

你知道如何求 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
 

抱歉!评论已关闭.