C#双层for循环
·
一、什么是双层 for 循环?
双层 for 循环,就是在一个 for 循环内部,再写一个 for 循环。也叫:循环嵌套。
- 外层循环:控制整体有多少组 / 多少行 / 多少轮
- 内层循环:控制每一组里有多少个 / 每一行二、执行规则(最重要!必须背会)
二、执行规则(最重要!必须背会)
- 先执行外层循环 1 次
- 然后内层循环完整执行一整圈
- 内层循环全部结束后,外层循环才会继续下一次
一句话总结:
外层跑 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 整圈
七、双层循环核心总结(背会就不会错)
- 外层循环控制行数 / 轮数
- 内层循环控制每行数量 / 内容
- 外层执行一次,内层执行一圈
- 内层循环结束,才会回到外层
- 双层循环 = 大循环套小循环
——————————第二种笔记————————————
一、双层 for 循环 执行顺序(最核心)
双层 for 循环的执行顺序和单层一致,但规则是:
- 先执行外层循环初始值
- 判断外层条件,条件成立才进入大括号{}
- 进入后,先把内层循环完整执行一圈
- 内层循环全部结束后,才回到外层执行i++
- 再判断外层条件,继续下一轮
一句话口诀:外层跑 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 次,内层跑一圈
- break:跳出当前循环
- continue:跳过本次,继续下次
- 内层结束,才会回到外层
————————双层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("");// 九行
}
更多推荐

所有评论(0)