首页 > 编程笔记 > C语言笔记 阅读:13

C语言中的for循环语句(非常详细)

在 C语言中,循环是程序设计中不可或缺的一部分,它允许我们重复执行一段代码以完成特定的任务。

C语言提供了 3 种循环结构,分别是 whiledo-whilefor 循环,本文我们要深入讲解的是 for 循环。

相比其他循环结构(如 whiledo-while),for 循环以其简洁的语法和明确的分段结构,成为最常用的循环方式之一,它特别适合在已知循环次数或需要迭代的情况下使用。

接下来,我们就从语法、用法、示例和注意事项等多个方面,全面剖析 for 循环。

for循环的基本语法

for 循环的语法非常紧凑,它将初始化、条件判断和增量更新集中在同一行。基本形式如下:

for (初始化; 条件; 更新) {
    // 循环体:需要重复执行的代码
}

语法详细说明如下:

- 初始化: 在循环开始前执行一次,通常用于定义和初始化循环变量(如 int i = 0)。
- 条件: 每次循环开始前检查的表达式,返回布尔值(true 或 false)。如果为真,执行循环体;如果为假,退出循环。
- 更新: 每次循环体执行完毕后执行,通常用于修改循环变量(如 i++)。
- 分号 ;: 初始化、条件和更新之间用分号分隔,即使某部分为空,也必须保留分号。
- { ... }: 循环体,可以包含多行代码。如果只有一行,大括号可以省略,但建议保留以提高可读性。

for 循环的执行流程是:

  1. 执行 初始化 部分(仅一次)。
  2. 检查 条件,如果为真,执行循环体;如果为假,退出循环。
  3. 执行循环体后,执行 更新 部分。
  4. 返回步骤 2,重复直到条件为假。

 

让我们通过一个简单的例子来理解 for 循环。假设我们要打印数字 1 到 5。

#include <stdio.h>

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

输出结果:

1
2
3
4
5

在这个例子中:


i 增加到 6 时,条件 i <= 5 变为假,循环结束。

for循环的灵活性

for 循环的三个部分(初始化、条件、更新)都可以根据需要调整,甚至省略,下面是一些变体用法。

1) 省略初始化

如果循环变量已经在外部定义,可以省略初始化部分。例如:

#include <stdio.h>

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

注意,第一个分号仍然需要保留。

2) 省略条件

如果省略条件,循环将无限执行,除非在循环体内用 break 语句跳出。例如:

#include <stdio.h>

int main() {
    for (int i = 1; ; i++) {
        printf("%d\n", i);
        if (i == 5) break; // 当 i 等于 5 时跳出循环
    }
    return 0;
}

输出结果与前面相同。

3) 多变量循环

for 循环支持在初始化和更新部分使用多个变量。例如,打印两个递增序列:

#include <stdio.h>

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

输出结果:

i = 1, j = 10
i = 2, j = 12
i = 3, j = 14
i = 4, j = 16
i = 5, j = 18

for循环的使用场景

for 循环特别适合以下情况:

1) 已知循环次数

当你明确知道需要循环多少次时,for 循环是最自然的选择。例如,计算 1 到 100 的和:

#include <stdio.h>

int main() {
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
        sum += i;
    }
    printf("1 到 100 的和是: %d\n", sum);
    return 0;
}

输出结果:

1 到 100 的和是: 5050

2) 数组遍历

for 循环常用于遍历数组。例如,打印一个数组的所有元素:

#include <stdio.h>

int main() {
    int arr[5] = {10, 20, 30, 40, 50};
    for (int i = 0; i < 5; i++) {
        printf("arr[%d] = %d\n", i, arr[i]);
    }
    return 0;
}

输出结果:

arr[0] = 10
arr[1] = 20
arr[2] = 30
arr[3] = 40
arr[4] = 50

嵌套for循环

for 循环可以嵌套使用,常用于处理二维数组或生成复杂模式。例如,打印九九乘法表:

#include <stdio.h>

int main() {
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d * %d = %d\t", j, i, i * j);
        }
        printf("\n");
    }
    return 0;
}

输出结果:

1 * 1 = 1	
1 * 2 = 2	2 * 2 = 4	
1 * 3 = 3	2 * 3 = 6	3 * 3 = 9	
1 * 4 = 4	2 * 4 = 8	3 * 4 = 12	4 * 4 = 16	
1 * 5 = 5	2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25	
1 * 6 = 6	2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36	
1 * 7 = 7	2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49	
1 * 8 = 8	2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64	
1 * 9 = 9	2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81	

外层循环控制行数,内层循环控制每行的乘法项数,\t 用于对齐输出。

for循环注意事项

使用 for 循环时,需要注意以下几点:

1) 避免无限循环

如果更新部分无法使条件变为假,会导致无限循环。例如:

for (int i = 1; i <= 5; ) { // 缺少 i++,无限循环
    printf("%d\n", i);
}

解决方法是确保更新部分正确修改循环变量。

2) 循环变量的作用域

在 C99 及以上标准中,for 循环中定义的变量(如 int i)仅在循环体内有效。例如:

for (int i = 1; i <= 5; i++) {
    printf("%d\n", i);
}
// printf("%d\n", i); // 错误,i 在此不可用

3) 边界问题

数组遍历时,注意不要越界。例如,数组长度为 5,索引应从 0 到 4,条件写成 i <= 5 会导致访问越界。

综合练习

让我们通过一个综合示例巩固所学。编写一个程序,找出 1 到 100 之间的所有质数。

#include <stdio.h>

int main() {
    for (int num = 1; num <= 100; num++) {
        int isPrime = 1; // 假设 num 是质数
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) {
                isPrime = 0; // 发现因数,不是质数
                break;
            }
        }
        if (isPrime && num > 1) {
            printf("%d 是质数\n", num);
        }
    }
    return 0;
}

输出结果(部分):

2 是质数
3 是质数
5 是质数
7 是质数
11 是质数
...
97 是质数

这个程序使用嵌套 for 循环,外层遍历 1 到 100,内层检查每个数是否为质数,优化条件 i * i <= num 减少计算量。

总结

for 循环是 C语言中最灵活、最常用的循环结构之一。它的语法简洁,适合处理已知次数的循环、数组遍历和嵌套任务。

认真阅读完本文,你已经彻底掌握了 for 循环的用法,尝试在你的程序中使用 for 循环吧!

相关文章