ZetCode

C for

最后修改于 2023 年 1 月 9 日

C for 教程演示了如何使用 for 语句在 C 语言中创建循环。

for 语句

for 语句允许我们重复执行一个或多个语句指定的次数。

for (init; condition; increment ) {
    statement(s);
}

for 语句包含三个部分:初始化、条件和增量。初始化部分只执行一次。for 语句的主体(包含在大括号内)在条件为真时执行。

如果条件返回 false,则 for 循环终止。在执行完块中的语句后,for 循环切换到第三部分,对计数器进行增量。循环持续进行,直到条件不再为真。请注意,有可能创建无限循环。

C for 示例

在第一个示例中,我们打印数字 0..9。

simple.c
#include <stdio.h>

int main() {

    for (int i = 0; i < 10; i++) {

        printf("%d\n", i);
    }

    return 0;
}

在这个 for 循环中,我们打印十个值。开始时,我们将计数器 i 变量初始化为 0。这只执行一次。在条件中,我们将计数器与 10 进行比较。如果它小于 10,则执行 for 语句的主体:计数器的值使用 printf 函数打印到控制台。然后使用 ++ 运算符对计数器进行增量。for 语句的主体一直执行,直到条件为真。

$ ./simple
0
1
2
3
4
5
6
7
8
9

在下一个示例中,我们以相反的顺序打印相同的值。

simple2.c
#include <stdio.h>

int main() {

    for (int i = 9; i >= 0; i--) {

        printf("%d\n", i);
    }

    return 0;
}

for 语句从值 9 开始。我们使用 -- 运算符来递减计数器。

$ ./simple2
9
8
7
6
5
4
3
2
1
0

C for - 部分是可选的

for 语句的所有三个部分都是可选的。

random.c
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int main() {

    srand(time(NULL));

    for (;;) {

        int r = rand() % 30;

        printf("%d ", r);

        if (r == 22) {

            break;
        }
    }

    return 0;
}

在示例中,我们没有指定 for 语句的任何三个部分:我们创建了一个无限循环。为了结束循环,我们使用了 break 语句。

该示例计算 0..29 之间的随机值。如果等于 22,则循环结束。

$ ./random
20 18 9 4 10 23 11 28 21 29 12 8 12 16 22

C for - 多个初始化变量

在 for 语句中,我们可以有多个初始化变量。

multi_init.c
#include <stdio.h>

int main() {

    for (int i=0, j=0; i<=10 && j<=10; i++, j++) {

        printf("%d\n", i*j);
    }

    return 0;
}

在示例中,我们初始化了两个变量:ij。变量之间用逗号分隔。

$ ./multi_init 
0
1
4
9
16
25
36
49
64
81
100

C for - 遍历数组

C for 语句经常用于遍历数组。

sum.c
#include <stdio.h>

int main() {

    int vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    int sum = 0;
    size_t length = sizeof vals / sizeof vals[0];

    for (int i = 0; i < length; i++) {

        sum += vals[i];
    }

    printf("The sum of values is: %d\n", sum);

    return 0;
}

在示例中,我们遍历整数数组并计算它们的和。

size_t length = sizeof vals / sizeof vals[0];

我们计算数组的大小。

for (int i = 0; i < length; i++) {

  sum += vals[i];
}

在每个 for 循环中,我们将当前值添加到 sum 变量中。

$ ./sum
The sum of values is: 55

C 嵌套 for 语句

for 语句可以嵌套。

nested.c
#include <stdio.h>

int main() {

    const int m = 3;
    const int n = 5;

    int vals[m][n] = {
        {1, 2, 3, 4, 5},
        {6, 7, 8, 9, 10},
        {11, 12, 13, 14, 15}
    };

    for (int i = 0; i < m; i++) {

        for (int j = 0; j < n; j++) {

            printf("%d ", vals[i][j]);
        }

        printf("\n");
    }

    return 0;
}

在示例中,我们使用嵌套的 for 语句来遍历二维整数数组。

$ ./nested
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

在本文中,我们介绍了 C for 语句。