什么是二重循环?
循环体内可以是任何语句,任何语句,当然就可以是另一个循环语句。
二重循环,就是循环里面再套一个循环。
就像我们日常生活中,一周有7天(外层循环),每天有24小时(内层循环),这样组合起来就是7×24的时间安排。
在C语言中,我们最常用的就是for循环和while循环的嵌套。
基本语法结构
for (外层初始化; 外层条件; 外层更新)
{
// 外层循环体
for (内层初始化; 内层条件; 内层更新)
{
// 内层循环体
}
}
例1:打印九九乘法表
让我们通过最经典的例子来理解二重循环:
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 9; i++)
{ // 外层循环:控制行数
for (j = 1; j <= i; j++)
{ // 内层循环:控制每行的列数
printf("%d×%d=%-2d ", j, i, i * j);
}
printf("\n"); // 换行
}
return 0;
}
运行结果:
text
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
...(以此类推)
例2:打印图形图案
二重循环非常适合用来打印各种图形:
#include <stdio.h>
int main() {
int rows = 5;
// 打印直角三角形
printf("直角三角形:\n");
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= i; j++) {
printf("* ");
}
printf("\n");
}
// 打印倒三角形
printf("\n倒三角形:\n");
for (int i = rows; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
printf("* ");
}
printf("\n");
}
return 0;
}
例3:处理二维数组
二重循环是处理二维数组的绝佳工具:
#include <stdio.h>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printf("二维数组内容:\n");
for (int i = 0; i < 3; i++) { // 遍历行
for (int j = 0; j < 4; j++) { // 遍历列
printf("%d\t", matrix[i][j]);
}
printf("\n");
}
// 计算总和
int sum = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
sum += matrix[i][j];
}
}
printf("数组元素总和: %d\n", sum);
return 0;
}
例4:冒泡排序算法
二重循环在排序算法中非常重要:
#include <stdio.h>
int main() {
int numbers[] = {5, 2, 8, 1, 9};
int n = 5;
printf("排序前: ");
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
// 冒泡排序 - 使用二重循环
for (int i = 0; i < n - 1; i++) { // 外层循环:控制轮数
for (int j = 0; j < n - 1 - i; j++) { // 内层循环:比较相邻元素
if (numbers[j] > numbers[j + 1]) {
// 交换位置
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
printf("\n排序后: ");
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
重要注意事项
- 变量命名:外层循环通常用i,内层用j、k等,避免混淆
- 循环条件:确保内层循环的条件正确,避免死循环
- 性能考虑:二重循环的时间复杂度是O(n^2),数据量大时可能较慢
- 缩进格式:保持良好的代码缩进,让嵌套关系清晰可见
练习建议
- 尝试打印不同的图形(菱形、正方形等)
- 用二重循环实现矩阵的加法和乘法
- 尝试其他排序算法(如选择排序)
- 解决一些逻辑题,如找出100以内的所有质数
总结
二重循环是C编程中的重要概念,它让我们能够处理更复杂的数据结构和算法。
外层循环控制"大节奏",内层循环处理"细节"。
多练习、多思考,你很快就能熟练掌握这个强大的工具!
上述这些程序大伙先自己体会体会,下次细说。