C 语言编程教程

C 语言 - 首页

C 语言基础

C 语言 - 概述 C 语言 - 特性 C 语言 - 发展历史 C 语言 - 环境设置 C 语言 - 程序结构 C 语言 - Hello World C - 编译过程 C - 注释 C - 标记 C - 关键字 C - 标识符 C - 用户输入 C - 基本语法 C - 数据类型 C - 变量 C - 整数提升 C - 类型转换 C - 类型转换 C - 布尔值

C 语言中的常量和文字

C - 常量 C - 字面量 C - 转义序列 C - 格式说明符

C 语言中的运算符

C - 运算符 C - 算术运算符 C - 关系运算符 C - 逻辑运算符 C - 位运算符 C - 赋值运算符 C - 一元运算符 C - 递增和递减运算符 C - 三元运算符 C - sizeof 运算符 C - 运算符优先级 C - 其他运算符

C 语言中的决策

C - 决策 C - if 语句 C - if...else 语句 C - 嵌套 if 语句 C - switch 语句 C - 嵌套 switch 语句

C 语言中的循环

C - 循环 C - While 循环 C - For 循环 C - Do...while 循环 C - 嵌套循环 C - 无限循环 C - Break 语句 C - Continue 语句 C - goto 语句

C 语言中的函数

C - 函数 C - Main 函数 C - 按值调用函数 C - 按引用调用函数 C - 嵌套函数 C - 可变参数函数 C - 用户定义函数 C - 回调函数 C - return 语句 C - 递归

C 语言中的作用域规则

C - 作用域规则 C - 静态变量 C - 全局变量

C 语言中的数组

C - 数组 C - 数组的属性 C - 多维数组 C - 将数组传递给函数 C - 从函数返回数组 C - 可变长度数组

C 语言中的指针

C - 指针 C - 指针和数组 C - 指针的应用 C - 指针运算 C - 指针数组 C - 指向指针的指针 C - 将指针传递给函数 C - 从函数返回指针 C - 函数指针 C - 指向数组的指针 C - 指向结构体的指针 C - 指针链 C - 指针 vs 数组 C - 字符指针和函数 C - NULL 指针 C - void 指针 C - 悬垂指针 C - 解引用指针 C - Near、Far 和 Huge 指针 C - 指针数组的初始化 C - 指针与多维数组

C 语言中的字符串

C - 字符串 C - 字符串数组 C - 特殊字符

C 语言的结构体和联合

C - 结构体 C - 结构体和函数 C - 结构体数组 C - 自引用结构 C - 查找表 C - 点 (.) 运算符 C - 枚举(或 enum) C - 结构填充和打包 C - 嵌套结构 C - 匿名结构和联合 C - 联合 C - Bit 位字段 C - Typedef

C 语言中的文件处理

C - 输入和输出 C - 文件 I/O(文件处理)

C 语言中的预处理器

C - 预处理器 C - #pragma 编译指示 C - 预处理器操作符 C - 宏 C - 头文件

C 语言中的内存管理

C - 内存管理 C - 内存地址 C - 存储类

C 其他主题

C - 错误处理 C - 可变参数 C - 命令执行 C - 数学函数 C - static 静态关键字 C - 随机数生成 C - 命令行参数

C 语言编程资源

C语言问题与解答答案 C语言快速指南 C语言速查表 C语言实用资源 C语言讨论


C 语言中的嵌套循环

在编程语境中,"嵌套"一词指的是将一个特定的编程元素封装在另一个类似的元素中。例如,嵌套循环、嵌套结构嵌套条件语句等。

嵌套循环

在 C 语言中,当一个循环结构被用在另一个循环体中时,我们称之为嵌套循环(或循环中的循环)。其中,封装另一个循环的循环称为外循环。封闭的循环称为内循环

嵌套循环的一般语法

嵌套循环的一般形式如下:-

Outer loop {
   Inner loop {
      ...
      ...
   }
   ... 
}

C 语言提供了三个关键字用于循环的构成:whiledo-whilefor。这三种循环类型均可嵌套。这意味着您可以将 while 循环放在 for 循环内,将 for 循环放在 do-while 循环内,或者任何其他组合。

嵌套循环的一般行为是,对于外层循环的每次迭代,内层循环都会完成所有迭代。

嵌套 For 循环

嵌套 for 循环 非常常见。如果预计外层循环和内层循环各执行三次迭代,则最内层语句的总迭代次数为"3 * 3 = 9"。

示例:嵌套 for 循环

请看以下示例 -

#include <stdio.h>
 
int main(){

   int i, j;
	
   // 外循环
   for(i = 1; i <= 3; i++){
      
      // 内循环
      for(j = 1; j <= 3; j++){
         printf("i: %d j: %d
", i, j);
      }
      printf("End of Inner Loop 
");
   }
   printf("End of Outer Loop");
 
   return 0;
}

输出

运行此代码时,将产生以下输出 -

i: 1 j: 1
i: 1 j: 2
i: 1 j: 3
End of Inner Loop

i: 2 j: 1
i: 2 j: 2
i: 2 j: 3
End of Inner Loop

i: 3 j: 1
i: 3 j: 2
i: 3 j: 3
End of Inner Loop

End of Outer loop

嵌套循环说明

现在让我们分析一下上述程序的工作原理。当遇到外循环时,外循环的循环变量"i"被初始化为1。由于测试条​​件 (a <= 3) 为真,程序进入外循环体。

程序进入内循环,控制内循环的变量"j"被初始化为1。由于内循环的测试条件 (j <= 3) 为真,程序进入内循环。打印"a"和"b"的值。

程序到达内循环的末尾。变量"j"递增。程序跳转到步骤4,直到条件 (j <= 3) 为真。

当测试条件变为假(因为"j"变为4)时,程序退出内循环。到达外循环的末尾。控制外循环变量的变量"i"递增,控制跳转到步骤 3。由于这是内循环的开始,因此"j"再次设置为 1。

内循环完成迭代并再次结束。步骤 4 至 8 将重复执行,直到外循环的测试条件 (i <= 3) 变为 false。在外循环结束时,"i"和"j"分别变为 4 和 4。

结果表明,对于外循环变量的每个值,内循环变量都会取其所有值。打印的总行数为"3 * 3 = 9"。

在 For 循环中嵌套 While 循环

任何类型的循环都可以嵌套在任何其他类型的循环中。让我们通过在外部 for 循环内放置一个 while 循环来重写上面的示例。

示例:嵌套循环(for 循环内嵌套 while 循环)

请看以下示例 -

#include <stdio.h>
 
int main(){

   int i, j;
	
   // 外层 for 循环
   for (i = 1; i <= 3; i++){
   
      // 内部 while 循环
      j = 1;
      while (j <= 3){
         printf("i: %d j: %d
", i, j);
         j++;
      }
      printf("End of Inner While Loop 
");
   }
   printf("End of Outer For loop");
 
   return 0;
}

输出

i: 1 j: 1
i: 1 j: 2
i: 1 j: 3
End of Inner While Loop

i: 2 j: 1
i: 2 j: 2
i: 2 j: 3
End of Inner While Loop

i: 3 j: 1
i: 3 j: 2
i: 3 j: 3
End of inner while Loop

End of outer for loop

程序员在很多应用程序中使用嵌套循环。让我们来看一些嵌套循环的示例。

C 嵌套循环示例

示例:打印表格

以下程序借助两个嵌套的 for 循环打印 1 到 10 的表格。

#include <stdio.h>
 
int main(){

   int i, j;
   printf("Program to Print the Tables of 1 to 10 
");
   
   // 外循环
   for(i = 1; i <= 10; i++){
      
      // 内循环
      for(j = 1; j <= 10; j++){
         printf("%4d", i*j);
      }
      printf("
");
   }
   return 0;
}

输出

运行代码并检查其输出 −

Program to Print the Tables of 1 to 10
    1    2    3    4    5    6    7    8    9   10
    2    4    6    8   10   12   14   16   18   20
    3    6    9   12   15   18   21   24   27   30
    4    8   12   16   20   24   28   32   36   40
    5   10   15   20   25   30   35   40   45   50
    6   12   18   24   30   36   42   48   54   60
    7   14   21   28   35   42   49   56   63   70
    8   16   24   32   40   48   56   64   72   80
    9   18   27   36   45   54   63   72   81   90
   10   20   30   40   50   60   70   80   90  100

示例:打印字符金字塔

以下代码打印字符串中递增的字符数。

#include <stdio.h>
#include <string.h>

int main(){

   int i, j, l;
   char x[] = "TutorialsPoint";
   l = strlen(x);

   // 外循环
   for(i = 0; i < l; i++){
   
      // 内循环
      for(j = 0; j <= i; j++){
         printf("%c", x[j]);
      }
      printf("
");
   }
   return 0;
}

输出

运行此代码时,将产生以下输出 -

T
Tu
Tut
Tuto
Tutor
Tutori
Tutoria
Tutorial
Tutorials
TutorialsP
TutorialsPo
TutorialsPoi
TutorialsPoin
TutorialsPoint

示例:打印二维数组

在本程序中,我们将展示如何使用嵌套循环显示一个由整数组成的二维数组。外层循环控制行数,内层循环控制列数。

#include <stdio.h>

int main(){

   int i, j;
   int x[4][4] = {
      {1, 2, 3, 4},
      {11, 22, 33, 44},
      {9, 99, 999, 9999},
      {10, 20, 30, 40}
   };

   // 外循环
   for (i=0; i<=3; i++){
   
      // 内循环
      for(j=0; j <= 3; j++){
         printf("%5d", x[i][j]);
      }
      printf("
");
   }
   return 0;
}

输出

运行此代码时,将产生以下输出 -

    1    2    3    4
   11   22   33   44
    9   99  999 9999
   10   20   30   40

c_loops.html