三、C语言中的分支与循环—循环嵌套 (9)

发布时间:2024年01月02日

嵌套循环指的是一个循环内部包含另一个循环。外层循环每执行一次,内层循环会执行完其所有的迭代。嵌套循环经常被用来处理多维数据结构,如多维数组,或者在进行复杂的算法操作时,如排序和搜索算法。

嵌套循环可以是任意类型的循环(forwhiledo-while),并且它们可以相互嵌套。

1. for循环的嵌套

for循环的嵌套是最常见的形式。它的基本结构如下:

这里,每次外层for循环执行时,内层for循环都会完整地执行其循环体。

for (初始化表达式1; 测试表达式1; 更新表达式1) {
    // 外层循环的代码
    
    for (初始化表达式2; 测试表达式2; 更新表达式2) {
        // 内层循环的代码
    }
}

1)代码示例:二维数组的遍历

外层for循环遍历二维数组的行,而内层for循环遍历列。每遍历一行,就打印该行所有的列,然后换行。

#define ROWS 3
#define COLS 3

int main() {
    int matrix[ROWS][COLS] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

2. whiledo-while循环的嵌套

whiledo-while循环也可以嵌套。它们的嵌套方式和for循环类似:

while (测试表达式1) {
    // 外层循环的代码
    
    while (测试表达式2) {
        // 内层循环的代码
    }
}

3.代码练习

找出100~200之间的素数,并打印在屏幕上

解题思路:

步骤 1: 理解素数

素数是只能被1和它本身整除的大于1的自然数。所以我们需要检查100到200之间的每个数是否是素数。

步骤 2: 编写代码以检查一个数是否是素数

为了检查一个数n是否是素数,我们需要从2遍历到n-1,检查n是否能被这些数整除。如果n能被任何一个数整除,那么它不是素数。

步骤 3: 循环从100到200的所有数

我们需要从100循环到200,并对每一个数执行步骤2。

步骤 4: 打印素数

每当我们找到一个素数,我们就打印它。

C语言代码实现

以下是完成上述任务的C语言代码示例:

#include <stdio.h>
#include <stdbool.h>

int main() {
    int i, j;
    bool isPrime;
    
    // 循环从100到200的所有数
    for (i = 100; i <= 200; i++) {
        isPrime = true; // 假设当前数是素数
        
        // 检查i是否是素数
        for (j = 2; j * j <= i; j++) { // 优化:只需检查到sqrt(i)
            if (i % j == 0) { // 如果i能被j整除
                isPrime = false; // i不是素数
                break; // 不需要检查更大的数,退出内层循环
            }
        }
        
        // 如果i是素数,则打印它
        if (isPrime && i > 1) { // 确保i大于1
            printf("%d\n", i);
        }
    }
    
    return 0;
}

4.注意事项

  • 嵌套层数:理论上,循环可以嵌套任意多层,但过多的嵌套会使代码可读性变差。
  • 性能考量:嵌套循环可能会显著增加算法的时间复杂度,尤其是在数据集较大时。
  • 变量作用域:每个循环的控制变量应当在其循环体内声明,以避免命名冲突和其他作用域相关的问题。
  • 循环控制:可以使用breakcontinue语句控制循环的流程。在嵌套循环中使用时,它们只影响所在层的循环。
文章来源:https://blog.csdn.net/m0_52889787/article/details/135330188
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。