404 Not Found

404 Not Found


nginx

循环结构

while 循环

while 循环在条件为 true 时重复执行代码块。每次迭代前先检查条件,若条件为 false 则跳过整个循环体。

CSHARP
int count = 1;
while (count <= 5)
{
    Console.WriteLine($"第 {count} 次执行");
    count++;
}
TEXT
第 1 次执行
第 2 次执行
第 3 次执行
第 4 次执行
第 5 次执行
💡 如果初始条件就为 false,循环体一次也不会执行。

do...while 循环

do...while 循环先执行一次循环体,然后再检查条件。无论条件是否满足,循环体至少执行一次。

CSHARP
int number;
do
{
    Console.WriteLine("请输入一个正数:");
    number = int.Parse(Console.ReadLine());
} while (number <= 0);
Console.WriteLine($"你输入的正数是:{number}");
⚠️ do...while 末尾的分号不可省略,这是与 while 循环的语法区别。

for 循环

for 循环将初始化、条件判断和迭代更新合并到一行,适合已知循环次数的场景。

CSHARP
for (int i = 1; i <= 5; i++)
{
    Console.WriteLine($"i = {i}");
}
TEXT
i = 1
i = 2
i = 3
i = 4
i = 5

for 语句的三个部分均可省略,但分号必须保留:

CSHARP
int j = 0;
for (; j < 3; )
{
    Console.WriteLine($"j = {j}");
    j++;
}
TEXT
j = 0
j = 1
j = 2

foreach 循环

foreach 是 C# 的特色循环,用于遍历集合中的每个元素,语法简洁且安全。它适用于数组、列表以及所有实现了 IEnumerable 的集合。

CSHARP
string[] fruits = { "苹果", "香蕉", "橙子" };
foreach (var fruit in fruits)
{
    Console.WriteLine($"水果:{fruit}");
}
TEXT
水果:苹果
水果:香蕉
水果:橙子
⚠️ foreach 循环是只读的——迭代变量是只读副本,不能在循环中修改集合元素,也不能在遍历过程中增删集合的元素,否则会抛出 InvalidOperationException

示例

CSHARP
int[] scores = { 90, 85, 72, 60, 95 };
int sum = 0;
foreach (int score in scores)
{
    sum += score;
}
Console.WriteLine($"总分:{sum},平均分:{(double)sum / scores.Length:F1}");
▶ 试一试
TEXT
总分:402,平均分:80.4

嵌套循环

循环内部再包含循环即为嵌套循环,常用于处理二维数据结构(如矩阵、表格)。

CSHARP
for (int row = 1; row <= 3; row++)
{
    for (int col = 1; col <= 4; col++)
    {
        Console.Write($"{row * col,4}");
    }
    Console.WriteLine();
}
TEXT
   1   2   3   4
   2   4   6   8
   3   6   9  12
⚠️ 嵌套循环的时间复杂度为 O(n²),层数越多性能越差。实际开发中应尽量避免深层嵌套,可考虑使用 LINQ 或方法提取来优化。

break 与 continue

break

break 立即跳出当前循环,不再执行后续迭代。

CSHARP
for (int i = 0; i < 10; i++)
{
    if (i == 5) break;
    Console.Write($"{i} ");
}
TEXT
0 1 2 3 4

continue

continue 跳过本次迭代的剩余代码,直接进入下一次迭代。

CSHARP
for (int i = 0; i < 6; i++)
{
    if (i % 2 == 0) continue;
    Console.Write($"{i} ");
}
TEXT
1 3 5
💡 breakcontinue 只作用于最内层的循环。若需要跳出多层循环,可使用标签标记或标志变量。

循环的常见模式

计数模式

统计满足条件的元素个数:

CSHARP
int[] data = { 12, 25, 8, 33, 17, 6, 41 };
int count = 0;
foreach (int val in data)
{
    if (val > 20) count++;
}
Console.WriteLine($"大于20的个数:{count}");
TEXT
大于20的个数:3

累加模式

对一系列数值求和:

CSHARP
int sum = 0;
for (int i = 1; i <= 100; i++)
{
    sum += i;
}
Console.WriteLine($"1到100的和:{sum}");
TEXT
1到100的和:5050

查找模式

在集合中寻找目标元素:

CSHARP
int[] numbers = { 3, 7, 15, 22, 9, 31 };
int target = 22;
int index = -1;
for (int i = 0; i < numbers.Length; i++)
{
    if (numbers[i] == target)
    {
        index = i;
        break;
    }
}
Console.WriteLine(index >= 0 ? $"找到 {target},索引为 {index}" : "未找到");
TEXT
找到 22,索引为 3

示例

综合运用多种模式——统计成绩等级分布并计算平均分:

CSHARP
int[] scores = { 92, 78, 55, 88, 43, 96, 67, 73, 81, 50 };
int excellent = 0, pass = 0, fail = 0, total = 0;
foreach (int s in scores)
{
    total += s;
    if (s >= 90) excellent++;
    else if (s >= 60) pass++;
    else fail++;
}
double avg = (double)total / scores.Length;
Console.WriteLine($"优秀:{excellent},及格:{pass},不及格:{fail}");
Console.WriteLine($"平均分:{avg:F1}");
▶ 试一试
TEXT
优秀:2,及格:5,不及格:3
平均分:72.3

死循环与避免

死循环是指循环条件永远为 true,导致循环永远无法终止。常见的死循环写法:

CSHARP
while (true)
{
}

for (; ; )
{
}

示例

带退出条件的受控循环,避免死循环:

CSHARP
Random rnd = new Random();
int attempts = 0;
while (true)
{
    int value = rnd.Next(1, 101);
    attempts++;
    if (value == 42)
    {
        Console.WriteLine($"第 {attempts} 次抽到了 42!");
        break;
    }
    if (attempts > 1000)
    {
        Console.WriteLine("尝试次数过多,退出循环。");
        break;
    }
}
▶ 试一试

避免死循环的原则:

🚀 实际开发中,while (true) 配合 break 是常见的循环模式,但一定要保证所有分支都有退出机会。

❓ 常见问题

Q whiledo...while 有什么区别?
A while 先判断再执行,可能一次都不执行;do...while 先执行再判断,至少执行一次。
Q foreach 中能修改集合元素吗?
A 不能。迭代变量是只读副本,修改它不会影响原集合;若需修改元素,请使用 for 循环通过索引访问。
Q break 能跳出多层循环吗?
A 不能。break 只跳出最内层循环。如需跳出多层,可使用标志变量或将内层循环提取为方法后用 return 退出。
Q for (; ; )while (true) 有区别吗?
A 功能完全相同,都是死循环写法。while (true) 语义更清晰,for (; ; ) 在某些编译器中不产生警告。

📖 小节

📝 作业

  1. 编写程序,使用 while 循环计算 2 的幂,直到超过 1000 为止,输出所有结果。
  2. 使用 for 循环打印九九乘法表(上三角形式,避免重复)。
  3. 给定一个字符串数组,使用 foreach 统计长度大于 5 的字符串个数。
  4. 编写程序,使用 do...while 让用户反复输入密码,直到输入正确为止(正确密码自定)。
  5. 使用嵌套 for 循环找出 1~50 之间的所有质数。
  6. for 循环中使用 continue,输出 1~20 中所有不能被 3 整除的数。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏