第七章——循环 for

1. for 语句

for 循环可以方便地执行指定次数的循环。

语法:

for ( init; condition; increment )
{
   statement(s);
}
  • init 会首先被执行,且只会执行一次。这一步允许声明并初始化任何循环控制变量。也可以不在这里写任何语句,只要有一个分号出现即可。
  • 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  • 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  • 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

下面我们用 for 循环重新编写前面求 0-10 中偶数的程序,代码如下:

#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0)
            printf("%d\n", i);
    }
    return 0;
}

可以发现,使用 for 循环编写循环非常之简介明了。

请大家尝试编写求0+1+2+...+10之和的程序代码。

参考代码如下:

#include <stdio.h>

int main() {
    int sum = 0;
    for (int i = 0; i < 11; i++) {
        sum = sum + i;
        // sum += i;
    }
    printf("The sum is %d", sum);
    return 0;
}

2. for 循环嵌套

我们可以在 for 循环内使用一个或多个 for 循环。

下面请大家通过两层 for 循环打印如下 4*4 的直角三角形。

*
**
***
****

参考代码如下:

#include <stdio.h>

int main() {
    for (int i = 1; i <= 4; i++) {
        for (int j = 1; j <= i; j++) {
            putchar('*');
        }
        putchar('\n');
    }
    return 0;
}

下面我们编写一个求 0-100 类所有质数的程序。

质数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。

参考代码如下:

#include <stdio.h>

int main() {
    for (int i = 2, j; i <= 100; i++) {
        for (j = 2; j <= i; j++) {
            //遇到第一个因数则跳出循环
            if (i % j == 0)
                break;
        }
        //如果该因数等于这个数本身则表明为质数,输出
        if (j == i)
            printf("%d\n", i);
    }
    return 0;
}

如果改成每行最多 5 个质数就换行,则代码如下:

#include <stdio.h>

int main() {
    for (int i = 2, j, count = 0; i <= 100; i++) {
        for (j = 2; j <= i; j++) {
            //遇到第一个因数则跳出循环
            if (i % j == 0)
                break;
        }
        //如果该因数等于这个数本身则表明为质数,输出
        if (j == i) {
            printf("%-3d", i);
            count++;
            //判断质数的个数,五个质数就换行
            if (count % 5 == 0)
                putchar('\n');
        }
    }
    return 0;
}

输出的结果如下:

2  3  5  7  11
13 17 19 23 29
31 37 41 43 47
53 59 61 67 71
73 79 83 89 97

3. 小测试

  • 输入一个整数,求其阶乘。
  • 输入两个整数,求其最大公约数和最小公倍数。