- 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 - 主函数
- 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 - 指针与数组
- C - 字符指针和函数
- C - 空指针
- C - void 指针
- C - 野指针
- C - 解引用指针
- C - 近指针、远指针和巨型指针
- C - 指针数组的初始化
- C - 指针与多维数组
- C语言中的字符串
- C - 字符串
- C - 字符串数组
- C - 特殊字符
- C语言中的结构体和联合体
- C - 结构体
- C - 结构体和函数
- C - 结构体数组
- C - 自引用结构体
- C - 查找表
- C - 点(.)运算符
- C - 枚举(或 enum)
- C - 结构体填充和打包
- C - 嵌套结构体
- C - 匿名结构体和联合体
- C - 联合体
- C - 位域
- C - typedef
- C语言中的文件处理
- C - 输入和输出
- C - 文件I/O(文件处理)
- C预处理器
- C - 预处理器
- 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 提供了三个用于循环构造的关键字 - while、do-while 和 for。这三种类型的循环都可以进行嵌套。这意味着你可以在for循环内放置一个while循环,在do-while循环内放置一个for循环,或者其他任何组合。
嵌套循环的一般行为是,对于外循环的每次迭代,内循环都会完成所有的迭代。
嵌套 for 循环
嵌套 for 循环非常常见。如果内外循环都预期执行三次迭代,则最内层语句的总迭代次数将是“3 * 3 = 9”。
示例:嵌套 for 循环
请看下面的例子:
#include <stdio.h> int main(){ int i, j; // outer loop for(i = 1; i <= 3; i++){ // inner loop for(j = 1; j <= 3; j++){ printf("i: %d j: %d\n", i, j); } printf("End of Inner Loop \n"); } 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)变为假。在外循环结束时,“i”和“j”分别变为 4 和 4。
结果表明,对于外循环变量的每个值,内循环变量都会取所有值。打印的总行数为“3 * 3 = 9”。
在 for 循环内嵌套 while 循环
任何类型的循环都可以在任何其他类型的循环中嵌套。让我们通过在外循环for循环中放置一个while循环来重写上面的例子。
示例:嵌套循环(for 循环内嵌套 while 循环)
请看下面的例子:
#include <stdio.h> int main(){ int i, j; // outer for loop for (i = 1; i <= 3; i++){ // inner while loop j = 1; while (j <= 3){ printf("i: %d j: %d\n", i, j); j++; } printf("End of Inner While Loop \n"); } 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 \n"); // outer loop for(i = 1; i <= 10; i++){ // inner loop for(j = 1; j <= 10; j++){ printf("%4d", i*j); } printf("\n"); } 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); // outer loop for(i = 0; i < l; i++){ // inner loop for(j = 0; j <= i; j++){ printf("%c", x[j]); } printf("\n"); } 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} }; // outer loop for (i=0; i<=3; i++){ // inner loop for(j=0; j <= 3; j++){ printf("%5d", x[i][j]); } printf("\n"); } return 0; }
输出
运行此代码时,将产生以下输出:
1 2 3 4 11 22 33 44 9 99 999 9999 10 20 30 40