C语言循环嵌套详解
在C语言中,if-else、while、do-while、for 都可以相互嵌套。所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 while,或者 for 里面有 while,while 里面有 if-else,这都是允许的。
if-else 的嵌套在《C语言if else语句》一节中已经进行了讲解,本节主要介绍循环结构的嵌套。
示例1:for 嵌套执行的流程。
i=1, j=1
i=1, j=2
i=1, j=3
i=1, j=4
i=2, j=1
i=2, j=2
i=2, j=3
i=2, j=4
i=3, j=1
i=3, j=2
i=3, j=3
i=3, j=4
i=4, j=1
i=4, j=2
i=4, j=3
i=4, j=4
本例是一个简单的 for 循环嵌套,外层循环和内层循环交叉执行,外层 for 每执行一次,内层 for 就要执行四次。
在C语言中,代码是顺序、同步执行的,当前代码必须执行完毕后才能执行后面的代码。这就意味着,外层 for 每次循环时,都必须等待内层 for 循环完毕(也就是循环4次)才能进行下次循环。虽然 i 是变量,但是对于内层 for 来说,每次循环时它的值都是固定的。
示例2:输出一个4×4的整数矩阵。
外层 for 第二次循环时,i为2,内层 for 要输出四次 2*j 的值,也就是第二行的数据;接下来执行 printf("\n") 和 i++,外层 for 的第二次循环才算结束。外层 for 第三次、第四次循环以此类推。
可以看到,内层 for 每循环一次输出一个数据,而外层 for 每循环一次输出一行数据。
示例3:输出九九乘法表。
需要注意的是,内层 for 的结束条件是
九九乘法表还有更多输出方式,请查看:C语言输出九九乘法表(5种解法)
if-else 的嵌套在《C语言if else语句》一节中已经进行了讲解,本节主要介绍循环结构的嵌套。
示例1:for 嵌套执行的流程。
#include <stdio.h> int main() { int i, j; for(i=1; i<=4; i++){ //外层for循环 for(j=1; j<=4; j++){ //内层for循环 printf("i=%d, j=%d\n", i, j); } printf("\n"); } return 0; }运行结果:
i=1, j=1
i=1, j=2
i=1, j=3
i=1, j=4
i=2, j=1
i=2, j=2
i=2, j=3
i=2, j=4
i=3, j=1
i=3, j=2
i=3, j=3
i=3, j=4
i=4, j=1
i=4, j=2
i=4, j=3
i=4, j=4
本例是一个简单的 for 循环嵌套,外层循环和内层循环交叉执行,外层 for 每执行一次,内层 for 就要执行四次。
在C语言中,代码是顺序、同步执行的,当前代码必须执行完毕后才能执行后面的代码。这就意味着,外层 for 每次循环时,都必须等待内层 for 循环完毕(也就是循环4次)才能进行下次循环。虽然 i 是变量,但是对于内层 for 来说,每次循环时它的值都是固定的。
示例2:输出一个4×4的整数矩阵。
#include <stdio.h> int main() { int i, j; for(i=1; i<=4; i++){ //外层for循环 for(j=1; j<=4; j++){ //内层for循环 printf("%-4d", i*j); } printf("\n"); } return 0; }运行结果:
1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16外层 for 第一次循环时,i为1,内层 for 要输出四次 1*j 的值,也就是第一行数据;内层 for 循环结束后执行 printf("\n"),输出换行符;接着执行外层 for 的 i++ 语句。此时外层 for 的第一次循环才算结束。
外层 for 第二次循环时,i为2,内层 for 要输出四次 2*j 的值,也就是第二行的数据;接下来执行 printf("\n") 和 i++,外层 for 的第二次循环才算结束。外层 for 第三次、第四次循环以此类推。
可以看到,内层 for 每循环一次输出一个数据,而外层 for 每循环一次输出一行数据。
示例3:输出九九乘法表。
#include <stdio.h> int main(){ int i, j; for(i=1; i<=9; i++){ //外层for循环 for(j=1; j<=i; j++){ //内层for循环 printf("%d*%d=%-2d ", i, j, i*j); } printf("\n"); } return 0; }运行结果:
1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81和示例2一样,内层 for 每循环一次输出一条数据,外层 for 每循环一次输出一行数据。
需要注意的是,内层 for 的结束条件是
j<=i
。外层 for 每循环一次,i 的值就会变化,所以每次开始内层 for 循环时,结束条件是不一样的。具体如下:
- 当 i=1 时,内层 for 的结束条件为 j<=1,只能循环一次,输出第一行。
- 当 i=2 时,内层 for 的结束条件是 j<=2,循环两次,输出第二行。
- 当 i=3 时,内层 for 的结束条件是 j<=3,循环三次,输出第三行。
- 当 i=4、5、6... 时,以此类推。
九九乘法表还有更多输出方式,请查看:C语言输出九九乘法表(5种解法)
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算