一、什么是双层 for 循环?


双层 for 循环,就是在一个 for 循环内部,再写一个 for 循环。也叫:循环嵌套。

  • 外层循环:控制整体有多少组 / 多少行 / 多少轮
  • 内层循环:控制每一组里有多少个 / 每一行二、执行规则(最重要!必须背会)

二、执行规则(最重要!必须背会)

  1. 先执行外层循环 1 次
  2. 然后内层循环完整执行一整圈
  3. 内层循环全部结束后,外层循环才会继续下一次
一句话总结:
外层跑 1 次,内层跑一圈!

三、标准语法结构

// 外层循环
for (int i = 0; i < 次数; i++)
{
    // 每次进入外层,都会执行下面整个内层循环

    // 内层循环
    for (int j = 0; j < 个数; j++)
    {
        // 要重复执行的内容
    }
}

四、两个循环的

1. 外层循环 for (i)

  • 控制一共有多少行
  • 控制一共执行几大轮

2. 内层循环 for (j)

  • 控制每一行有多少个符号 / 数字 / 星星
  • 控制每一轮里做多少次小事

五、执行顺序演示(最容易理解)

假设:
外层循环执行 2 次
内层循环执行 3 次
执行顺序:

外层第1次
   内层第1次
   内层第2次
   内层第3次
外层第2次
   内层第1次
   内层第2次
   内层第3次
结束

六、经典案例 1:打印倒三角星星(最常考)

// 外层循环:控制行数(5行)
for (int i = 5; i >= 1; i--)
{
    // 内层循环:控制每行星星数量
    for (int j = 1; j <= i; j++)
    {
        Console.Write("☆");
    }

    // 内层结束 → 换行
    Console.WriteLine();
}

☆☆☆☆☆
☆☆☆☆
☆☆☆
☆☆
☆

讲解:

  • 外层 i:5 → 4 → 3 → 2 → 1(共 5 行)
  • 内层 j:每行打印 i 个星星
  • 外层 1 次 → 内层 1 整圈

七、双层循环核心总结(背会就不会错)

  1. 外层循环控制行数 / 轮数
  2. 内层循环控制每行数量 / 内容
  3. 外层执行一次,内层执行一圈
  4. 内层循环结束,才会回到外层
  5. 双层循环 = 大循环套小循环

——————————第二种笔记————————————

一、双层 for 循环 执行顺序(最核心)


双层 for 循环的执行顺序和单层一致,但规则是:
  1. 先执行外层循环初始值
  2. 判断外层条件,条件成立才进入大括号{}
  3. 进入后,先把内层循环完整执行一圈
  4. 内层循环全部结束后,才回到外层执行i++
  5. 再判断外层条件,继续下一轮

一句话口诀:外层跑 1 次,内层跑一圈!

二、标准双层 for 循环结构

for (int i = 0; i < 次数; i++)  // 外层循环:控制行数/轮数
{
    // 外层代码

    for (int j = 0; j < 个数; j++)  // 内层循环:控制每行内容
    {
        // 内层代码
    }
}

三、最基础执行顺序演示

for (int i = 0; i < 3; i++)  
{
    Console.WriteLine("i的值为:" + i);

    for (int j = 0; j < 3; j++) 
    {
        Console.WriteLine("j的值为:" + j);
    }
}

执行顺序:

i=0
    j=0
    j=1
    j=2
i=1
    j=0
    j=1
    j=2
i=2
    j=0
    j=1
    j=2

总结:
外层每走 1 次,内层完整跑 3 次!

四、双层循环中的 break 和 continue(重点)

1. break:跳出当前所在循环,直接结束循环
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        if (j == 2)
        {
            break; // 跳出内层循环
        }
        Console.WriteLine($"i={i},j={j}");
    }
}

结果:
i=0 j=0 j=1
i=1 j=0 j=1
i=2 j=0 j=1
2. continue:跳过本次,继续下一次
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        if (j == 1)
        {
            continue; // 跳过j=1,不打印
        }
        Console.WriteLine($"i={i},j={j}---------");
    }
}

结果:
i=0 j=0 j=2
i=1 j=0 j=2
i=2 j=0 j=2
3. break 写在外层判断
for (int i = 0; i < 3; i++)
{
    if (i == 1)
    {
        break; // 直接结束整个外层循环
    }
    for (int j = 0; j < 3; j++)
    {
        if (j == 1)
        {
            continue;
        }
        Console.WriteLine($"i={i},j={j}???????");
    }
}

结果:只执行 i=0

五、双层循环 终极总结(必背)

  1. 外层循环控制行数 / 轮数
  2. 内层循环控制每行数量 / 内容
  3. 外层跑 1 次,内层跑一圈
  4. break:跳出当前循环
  5. continue:跳过本次,继续下次
  6. 内层结束,才会回到外层

————————双层for循环例子———————

 //2 求 1 - 1000 以内所有的完美数,除自身以外所有因子之和等于这个数就是完美数。
//因子:假如整数n除以m, 结果是无余数的整数, 那么我们称m就是n的因子
 // 遍历 1 到 1000 的每一个数
 for (int num1 = 1; num1 <= 1000; num1++)
 {
     int sum = 0; // 用来存:除自身外的因子总和

     // 找 num 的因子(除了自己)
     for (int i = 1; i < num1; i++)
     {
         // 如果能整除,i 就是因子
         if (num1 % i == 0)
         {
             sum = sum + i; // 因子加起来
         }
     }

     // 判断:因子和 == 自己 → 完美数
     if (sum == num1)
     {
         Console.WriteLine(num1 + " 是完美数");
     }
 }
 //3 百钱买百鸡 100块钱可以买多少只公鸡 多少只母鸡 多少只小鸡?公鸡五块钱一只 母鸡三块钱一只小鸡一块钱三只
 for (int gongji = 0; gongji <= 20; gongji++)
 {
     for (int muji = 0; muji <= 33; muji++)
     {
         int xiaoji = 100 - gongji - muji;
         if(xiaoji % 3 == 0 && 5 * gongji + 3 * muji + xiaoji / 3 == 100)
         {
             Console.WriteLine("公鸡:" + gongji + " 母鸡:" + muji + " 小鸡:" + xiaoji);
         }
     }
     
 }
//4把一张1元的钞票换成5分,2分和1分的硬币,要求每种至少一枚,并且所换硬币数不超过30枚。请问,有哪几种换法
 int count9 =0;
 for (int wufen = 1; wufen <=20; wufen++)
 {
     for (int erfen = 1; erfen <= 50; erfen++)
     {
         int yifen = 100 - wufen * 5 - erfen * 2;
         if (yifen >= 1 && wufen + erfen + yifen <= 30)
         {
             //Console.WriteLine($"5分:{wufen} 枚,2分:{erfen} 枚,1分:{yifen} 枚");
              Console.WriteLine("5分:" + wufen + " 二分:" + erfen + " 一分:" + yifen);
             count9++;
         }
     }
 }

 //第二种方法
 // 1元=100分,每种至少1枚,总硬币≤30枚
 int count8 = 0;
 for (int wufen = 1; wufen <= 20; wufen++)
 {
     for (int erfen = 1; erfen <= 50; erfen++)
     {
         for (int yifen = 1; yifen <= 100; yifen++)
         {
             // 总钱数=100分 且 总数量≤30
             if (wufen * 5 + erfen * 2 + yifen == 100 && wufen + erfen + yifen <= 30)
             {
                 Console.WriteLine($"5分:{wufen}  2分:{erfen}  1分:{yifen}");
                 count8++;
             }
         }
     }
 }
//5打印如下效果:打印如下效果:
//☆☆☆☆☆
//☆☆☆☆
//☆☆☆
//☆☆
//☆
   for (int i = 5; i >= 1; i--)
   {
       for (int j = 1; j <= i; j++) //i
       {
           Console.Write("☆");
       }
       Console.WriteLine();
   }

   Console.WriteLine(" ");
 //6 一共150元,牙刷2元,牙膏5元,香皂3元,花光150元,一共有多少种方式,并列举?
int count2 = 0;
for (int yashua = 0; yashua <= 75; yashua++)
{
    for (int yagao = 0; yagao <= 30; yagao++)
    {
        int mongey = 150 - yashua * 2 - yagao * 5;
        if (mongey % 3 == 0 && mongey>=0)
        {
            int xiangzao = mongey / 3;
            count2++; // 方法数+1
            Console.WriteLine($"第{count2}种:牙刷={yashua} 牙膏={yagao} 香皂={xiangzao}");
            //Console.WriteLine("牙刷:" + yashua + " 牙膏:" + yagao + " 香皂:" + xiangzao);
        }
    }
}
Console.WriteLine("\n总共有 " + count + " 种方法");
//第二种方法
int count1 = 0;
// 牙刷2元,最多75
for (int yashua = 0; yashua <= 75; yashua++)
{
    // 牙膏5元,最多30
    for (int yagao = 0; yagao <= 30; yagao++)
    {
        // 香皂3元,最多50
        for (int xiangzao = 0; xiangzao <= 50; xiangzao++)
        {
            // 总钱数正好150
            if (yashua * 2 + yagao * 5 + xiangzao * 3 == 150)
            {
                count1++;
                Console.WriteLine($"第{count1}种:牙刷{yashua} 牙膏{yagao} 香皂{xiangzao}");
            }
        }
    }
}
Console.WriteLine($"一共{count1}种买法");
//7.编写程序实现功能,计算100至1000之间有多少个数 其各位数字之和是7,如果要求找到第一个满足条件的即可,有返回值的怎么处理?
 //统计100~1000之间各位数字之和等于7的数
 int count5 = 0;
 for (int num6 = 100; num6 < 1000; num6++)
 {
     // 拆分百位、十位、个位
     int bai = num6 / 100;
     int shi = num6 / 10 % 10;
     int ge = num6 % 10;

     if (bai + shi + ge == 7)
     {
         count5++;
         Console.WriteLine(num6);
     }
 }
 Console.WriteLine("总个数:" + count5);
  //8.基数为2 ,次数为5,结果为22222 ,通过数学运算得到的?
  int jishu = 2;   // 基数
  int cishu = 5;   // 次数
  // 数学公式计算 22222
  int result = jishu * (int)(Math.Pow(10, cishu) - 1) / 9;
  Console.WriteLine(result); // 输出:22222

  //第二种方法
  int jishu1 = 2;
  int count3 = 5;
  int result1 = 0;
  for (int k = 0; k < count3; k++)
  {
      result += jishu1;
      jishu1 = jishu1 * 10;
  }
  Console.WriteLine(result1);
9.九九成发表

 //  1*1=1
 //  1*2=2     2*2 =4
 //  1*3 = 3   2*3 = 6   3*3 = 9

 //  1*9=9                     9*9=81

 // 外循环多少次  总共是九行 需要把cw这一句执行9次
 // 内循环的次数  第一行有一个表达式   第二行有2个表达式,内循环循环的次数不定 正好小于等于i

 for (int i = 1; i <=9; i++)
 {
     for(int j = 1; j <=i; j++) //  i = 1 ;j = 1 
                                //  i = 2   j =  1 2 
                                //  i = 3   j = 1 2 3
     {
         Console.Write($"{j}*{i}={j*i}   "); //每一行表达式不需要换行
     }
     Console.WriteLine("");// 九行
 }

更多推荐