跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C++ 嵌套循环
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:C++嵌套循环}} '''C++嵌套循环'''是指在循环结构(如`for`、`while`或`do-while`)内部再包含另一个循环结构的编程技术。嵌套循环常用于处理多维数据(如矩阵、表格)或需要多重迭代的场景。本文将详细讲解嵌套循环的语法、执行流程、实际应用及优化技巧。 == 基本语法与执行流程 == 嵌套循环的语法与普通循环类似,但内层循环会作为外层循环体的一部分。以下是一个典型的`for`循环嵌套示例: <syntaxhighlight lang="cpp"> #include <iostream> using namespace std; int main() { // 外层循环控制行 for (int i = 1; i <= 3; i++) { // 内层循环控制列 for (int j = 1; j <= 3; j++) { cout << "(" << i << "," << j << ") "; } cout << endl; // 换行 } return 0; } </syntaxhighlight> '''输出:''' <pre> (1,1) (1,2) (1,3) (2,1) (2,2) (2,3) (3,1) (3,2) (3,3) </pre> '''执行流程说明:''' 1. 外层循环初始化`i=1`,检查条件`i<=3`。 2. 进入内层循环,`j`从1迭代到3,打印坐标。 3. 内层循环结束后,外层循环`i++`,重复上述过程,直到`i>3`。 === 流程图 === <mermaid> flowchart TD A[开始] --> B[外层循环初始化 i=1] B --> C{i <= 3?} C -->|是| D[内层循环初始化 j=1] D --> E{j <= 3?} E -->|是| F[打印(i,j)] F --> G[j++] G --> E E -->|否| H[换行] H --> I[i++] I --> C C -->|否| J[结束] </mermaid> == 嵌套循环的类型 == C++支持任意类型的循环嵌套,常见组合包括: * '''`for`嵌套`for`''':适用于已知迭代次数的场景。 * '''`while`嵌套`for`''':外层条件动态,内层次数固定。 * '''`do-while`嵌套`while`''':至少执行一次内层循环。 === 示例:`while`嵌套`for` === <syntaxhighlight lang="cpp"> int i = 1; while (i <= 2) { for (int j = 1; j <= 3; j++) { cout << i * j << " "; } i++; cout << endl; } </syntaxhighlight> '''输出:''' <pre> 1 2 3 2 4 6 </pre> == 实际应用案例 == === 案例1:打印乘法表 === <syntaxhighlight lang="cpp"> for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { cout << j << "×" << i << "=" << i * j << "\t"; } cout << endl; } </syntaxhighlight> '''输出:''' <pre> 1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 ... </pre> === 案例2:二维数组遍历 === <syntaxhighlight lang="cpp"> int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}}; for (int row = 0; row < 2; row++) { for (int col = 0; col < 3; col++) { cout << matrix[row][col] << " "; } cout << endl; } </syntaxhighlight> '''输出:''' <pre> 1 2 3 4 5 6 </pre> == 性能优化与注意事项 == 1. '''减少内层循环的计算量''':将不依赖内层循环的表达式提到外层。 * 低效写法: <syntaxhighlight lang="cpp"> for (int i = 0; i < 1000; i++) { for (int j = 0; j < sqrt(i); j++) { /* ... */ } } </syntaxhighlight> * 优化后: <syntaxhighlight lang="cpp"> for (int i = 0; i < 1000; i++) { int limit = sqrt(i); for (int j = 0; j < limit; j++) { /* ... */ } } </syntaxhighlight> 2. '''避免深层嵌套''':超过3层的嵌套会降低可读性,建议拆分为函数。 3. '''循环变量命名''':使用`row/col`或`i/j/k`等明确意义的名称。 == 数学应用:矩阵乘法 == 嵌套循环可实现矩阵乘法<math>C = A \times B</math>,其中: <math> C_{ij} = \sum_{k=1}^{n} A_{ik} \times B_{kj} </math> <syntaxhighlight lang="cpp"> // 假设A是m×n矩阵,B是n×p矩阵 for (int i = 0; i < m; i++) { for (int j = 0; j < p; j++) { C[i][j] = 0; for (int k = 0; k < n; k++) { C[i][j] += A[i][k] * B[k][j]; } } } </syntaxhighlight> == 常见问题解答 == '''Q: 如何提前退出嵌套循环?''' A: 使用`break`语句配合标签或标志变量: <syntaxhighlight lang="cpp"> bool exitFlag = false; for (int i = 0; i < 10 && !exitFlag; i++) { for (int j = 0; j < 10; j++) { if (i * j == 42) { exitFlag = true; break; } } } </syntaxhighlight> '''Q: 嵌套循环的时间复杂度是多少?''' A: 若外层循环执行<math>m</math>次,内层执行<math>n</math>次,则总复杂度为<math>O(m \times n)</math>。 == 总结 == 嵌套循环是处理多维数据和多层次逻辑的核心工具。通过合理设计和优化,可以高效解决复杂问题。建议初学者从简单案例入手,逐步掌握其灵活性和应用场景。 [[Category:编程语言]] [[Category:C++]] [[Category:C++ 控制流]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)