当前位置: 首页 > news >正文

【入门级-C++程序设计:3、程序基本语句-多层循环语句】

1、定义:
在 C++ 中,多层循环(嵌套循环)是指在一个循环体内包含另一个或多个循环语句。它常用于处理多维数据结构(如二维数组)、复杂的迭代逻辑(如矩阵运算、图形打印、组合遍历等)。多层循环的核心是外层循环控制 “轮次”,内层循环控制每轮的 “细节操作”,执行时先完整执行内层循环,再进入外层循环的下一次迭代。

2、多层循环的基本结构
多层循环可由for、while、do-while任意组合构成,最常用的是for循环的嵌套(结构清晰,适合已知循环次数的场景)。

双层for循环(最常见)
for (外层初始化; 外层循环条件; 外层迭代) {
// 外层循环体
for (内层初始化; 内层循环条件; 内层迭代) {
// 内层循环体(每次外层循环,内层会完整执行一遍)
}
}

for嵌套while:
for (int i = 0; i < 3; i++) {
int j = 0;
while (j < 2) {
cout << “i=” << i << “, j=” << j << endl;
j++;
}
}

while嵌套do-while:
int i = 0;
while (i < 2) {
int j = 0;
do {
cout << “i=” << i << “, j=” << j << endl;
j++;
} while (j < 3);
i++;
}

3、执行流程
以双层for循环为例,执行顺序为:
1)执行外层初始化(仅一次)。
2)判断外层循环条件:若为true,进入外层循环体;若为false,整个多层循环结束。
3)执行内层初始化(每次进入外层循环体时执行一次)。
4)判断内层循环条件:若为true,执行内层循环体,然后执行内层迭代,重复步骤 4;若为false,退出内层循环。
5)执行外层迭代,回到步骤 2,开始外层循环的下一次迭代。
示例执行过程:
for (int i = 0; i < 2; i++) { // 外层循环:i=0,1
for (int j = 0; j < 2; j++) { // 内层循环:j=0,1(每次i变化时,j从0重新开始)
cout << “i=” << i << “, j=” << j << " ";
}
cout << endl;
}

4、常见应用场景
1)二维数组的遍历
二维数组本质是 “数组的数组”,需通过外层循环控制行,内层循环控制列:
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};

// 遍历二维数组并打印所有元素
for (int i = 0; i < 3; i++) { // 外层循环:控制行(0~2)
for (int j = 0; j < 4; j++) { // 内层循环:控制列(0~3)
cout << matrix[i][j] << “\t”;
}
cout << endl;
}
输出:
1 2 3 4
5 6 7 8
9 10 11 12
2) 图形打印(如矩形、三角形)
通过内层循环控制每行的字符数量,外层循环控制行数:
// 打印5行4列的矩形(组成)
for (int row = 0; row < 5; row++) { // 外层:5行
for (int col = 0; col < 4; col++) { // 内层:每行4个

cout << "* ";
}
cout << endl; // 每行结束换行
}
输出:






3)组合逻辑(如穷举法)
例如计算两个数的所有可能组合(1~3 之间的数对):
for (int a = 1; a <= 3; a++) {
for (int b = 1; b <= 3; b++) {
cout << “(” << a << “,” << b << ") ";
}
cout << endl;
}
输出:
(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
(3,1) (3,2) (3,3)

5、多层循环的扩展(三层及以上)
理论上,循环可以嵌套任意多层(如三层循环处理三维数组),但需注意代码可读性和程序的执行效率。例如,遍历三维数组int arr[2][3][4]:
for (int i = 0; i < 2; i++) { // 第一层:深度
for (int j = 0; j < 3; j++) { // 第二层:行
for (int k = 0; k < 4; k++) { // 第三层:列
cout << arr[i][j][k] << " ";
}
cout << “\t”;
}
cout << endl;
}

http://www.dtcms.com/a/270156.html

相关文章:

  • 数据推荐|标贝科技大规模高质量数据集
  • 25.安卓逆向2-frida hook技术-拦截弹框事件(拦截强制更新弹框和解决jadx加载dex文件不全问题)
  • 从0到1搭建ELK日志收集平台
  • 扣子Coze飞书多维表插件参数获取流程
  • 如何利用机器学习(ML)检测异常登录行为
  • 深深浅浅地理解 Python 中的 `Barrier` 对象
  • emscripten编译cocos2dx项目输入框支持中文
  • MySQL 全库表记录统计与空间估算教程
  • 猿人学js逆向比赛第一届第十五题
  • SpringAI学习笔记-MCP服务器简单示例
  • 软考(软件设计师)数据库原理-SQL
  • HTML+JS+CSS制作一个数独游戏
  • CSS揭秘:9.自适应的椭圆
  • 记一次mount point is busy问题排查
  • 数据结构 —— 栈(stack)在算法思维中的巧妙运用
  • C++进阶—二叉树进阶
  • 笔记/TCP/IP四层模型
  • Fence-音视频设备资源同步
  • IT 技术领域创作者三周年纪念日
  • 【CodeTop】每日练习 2025.7.8
  • Java 阻塞队列:7种类型全解析
  • 起重机械的工作循环门限值计算逻辑
  • 容器技术入门与Docker环境部署
  • Ntfs!LfsRestartLogFile函数分析之两次调用Ntfs!LfsReadRestart函数的目的
  • (生活比喻-图文并茂)http2.0和http3.0的队头阻塞,http2.0应用层解决,TCP层存在,3.0就是彻底解决,到底怎么理解区别???
  • AI健康小屋“15分钟服务圈”:如何重构社区健康生态?
  • MyBatis-Plus:深入探索与最佳实践
  • C#,js如何对网页超文本内容按行拆分,选择第A-B个字符返回HTM?
  • stack_queue扩展学习 --- 反向迭代器
  • 戴尔3670装win11和ubuntu双系统踩坑教程