一、什么是“循环”?
程序中的循环就像生活中的“重复操作”。
比如:
连续打印10次“你好”
让学生一个一个进场签到
每隔1秒刷新一次数据
这些重复的工作,在编程中由“循环语句”完成。
二、for 循环 —— 指定次数的循环
✅ 语法结构:
for (初始化语句; 条件表达式; 更新语句)
{
// 循环体:每次循环执行的代码
}
✅ 示例:打印1到5
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("第 " + i + " 次问好");
}
程序会执行5次,输出:
第 1 次问好
第 2 次问好
...
第 5 次问好
三、while 循环 —— 条件成立就一直循环
✅ 语法结构:
while (条件)
{
// 条件为 true,就重复执行这些代码
}
✅ 示例:打印1到5
int i = 1;
while (i <= 5)
{
Console.WriteLine("第 " + i + " 次问好");
i++;
}
while
循环适合“次数不确定,但有条件”的场景。
四、for 和 while 的选择建议
五、循环中的控制语句
✅ break —— 立即跳出整个循环
for (int i = 1; i <= 10; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
输出:
1
2
3
4
✅ continue —— 跳过本次,继续下次循环
for (int i = 1; i <= 5; i++)
{
if (i == 3)
continue;
Console.WriteLine(i);
}
输出:
1
2
4
5
六、练习题:打印九九乘法表(简化版)
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write(j + "×" + i + "=" + (i * j) + "\t");
}
Console.WriteLine();
}
输出一个完整的九九乘法表,非常实用的嵌套循环案例。
✅ 总结
学会循环,你就能让程序像机器一样重复工作,大大提高效率!
下一课,我们将正式进入数组的世界 —— Day09:认识数组,多个数据一起存!
我是不好奇,我们下课见!
循环语句用于控制语句的重复执行。C# 提供了多种循环语句以适应不同场景。掌握 for
循环后,可灵活处理大多数需要重复执行的逻辑!下面我将全面介绍 C# 中的各种循环语句及其应用。
for 循环
while 循环
do-while 循环
foreach 循环
一、定义
for
循环在已知循环次数的前提下,满足指定条件时重复执行代码块。它的语法清晰且灵活,适用于已知循环次数的场景。
二、语法
for (初始化语句; 循环条件; 迭代语句)
{
// 循环体
}
参数说明
初始化语句:在循环开始时执行一次(通常用于定义计数器变量)。
循环条件:每次循环前检查,若为
true
则执行循环体,否则退出。迭代语句:每次循环后执行(通常用于更新计数器)。
执行流程
在初始化语句中:定义变量,并初始化。
在循环条件中检测,检测变量是否符合条件。
符合条件 → 执行循环体内的代码。
不符合条件 → 退出循环
在迭代器中迭代变量的值。
重复步骤 2-4,直到变量检测不符合条件时退出循环。
三、for循环用法
用法1:基础循环
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i); // 输出 0, 1, 2, 3, 4
}
执行流程
int i = 0
→ 初始化计数器i
为0
。i < 5
→ 检查条件,若true
则进入循环体。Console.WriteLine(i)
→ 执行循环代码。i++
→ 计数器i
自增 1。重复步骤 2-4,直到
i >= 5
时退出循环。
用法2:遍历数组
string[] fruits = { "Apple", "Banana", "Cherry" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
用法3:条件循环
1.输出特定元素
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0) // 判断是否为偶数
{
Console.WriteLine(i); // 输出:2,4,6,8,10
}
}
2.输出特定元素
string[] fruits = { "苹果", "香蕉", "橙子", "葡萄", "西瓜" };
string target = "橙子";
bool found = false;
for (int i = 0; i < fruits.Length; i++)
{
if (fruits[i] == target)
{
found = true;
Console.WriteLine($"找到'{target}',索引位置:{i}");
break; // 找到后立即退出循环
}
}
if (!found)
{
Console.WriteLine($"未找到'{target}'");
}
3.分类输出
int[] scores = { 85, 92, 67, 54, 78, 43 };
for (int i = 0; i < scores.Length; i++)
{
Console.Write($"学生{i+1}成绩{scores[i]}:");
if (scores[i] >= 90)
Console.WriteLine("优秀");
else if (scores[i] >= 80)
Console.WriteLine("良好");
else if (scores[i] >= 60)
Console.WriteLine("及格");
else
Console.WriteLine("不及格");
}
用法4:嵌套循环
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write($"{j}×{i}={i * j}\t");
}
Console.WriteLine(); // 换行
}
用法5:多变量循环
示例:
// 多变量控制
for (int i = 0, j = 10; i < j; i++, j--)
{
Console.WriteLine($"i={i}, j={j}");
}
用法6:循环控制
break语句
break 语句的用途:立即终止当前循环。常用于switch语句或循环中。
for (int i = 0; i < 10; i++)
{
if (i == 5) break;
Console.WriteLine(i); // 只输出0-4
}
continue语句
continue 语句的用途:跳过当前迭代,继续下一次循环。仅用于循环结构中。
for (int i = 0; i < 5; i++)
{
if (i == 2) continue;
Console.WriteLine(i); // 输出0,1,3,4
}
用法6:无限循环
// 方式2
for (;;)
{
// 需要break退出
}
四、特点
明确知道循环次数时最适用
初始化、条件和迭代三部分都可自定义
支持多变量控制
五、循环性能优化
1.预先计算循环边界
int length = list.Count;
for (int i = 0; i < length; i++) { /*...*/ }
2.减少循环内部计算
// 不佳
for (int i = 0; i < list.Count; i++) { /*...*/ }
// 优化
int count = list.Count;
for (int i = 0; i < count; i++) { /*...*/ }
3.避免在循环中创建对象
StringBuilder sb = new StringBuilder(); // 循环外创建
for (int i = 0; i < 100; i++)
{
sb.Append(i); // 复用对象
}
4. 性能注意事项
避免重复计算条件: 例如,将
for (int i = 0; i < list.Count; i++)
改为:int count = list.Count; // 预先计算 for (int i = 0; i < count; i++)
优先使用
foreach
遍历集合(除非需要索引)。
六、for
循环的变体
在 C# 中,for
循环的 初始化语句、循环条件 和 迭代语句 三个部分 都可以省略,但需要根据实际情况合理使用,否则可能导致逻辑错误或无限循环。以下是详细说明:
初始化语句可以省略
场景:循环变量已在外部定义。需提前定义变量
示例:
int i = 0; // 外部初始化 for (; i < 5; i++) { Console.WriteLine(i); // 输出 0, 1, 2, 3, 4 }
循环条件可以省略
效果:默认条件为
true
,循环会无限执行,除非用break
退出。示例:
for (int i = 0; ; i++) { if (i >= 5) break; // 手动终止条件 Console.WriteLine(i); // 输出 0, 1, 2, 3, 4 }
迭代语句可以省略
场景:在循环体内手动更新变量。需在循环体内更新变量
示例:
for (int i = 0; i < 5; ) { Console.WriteLine(i); i++; // 手动迭代 }
三个部分全部省略
效果:等同于
while (true)
,形成无限循环。示例:
int i = 0; for (;;) { if (i >= 5) break; Console.WriteLine(i); // 输出 0, 1, 2, 3, 4 i++; }
关键注意事项
避免无限循环 如果省略 循环条件 且未在循环体内使用
break
,循环将无限运行:for (;;) { Console.WriteLine("无限循环!"); // 需手动终止程序 }
作用域问题
在
for
循环 内部初始化 的变量(如for (int i=0; ...)
),其作用域仅限于循环体内。若省略初始化并在外部定义变量,该变量在循环外仍有效:
int i; // 外部变量 for (i = 0; i < 3; i++) { /* ... */ } Console.WriteLine(i); // 输出 3(变量仍可访问)
代码可读性 虽然语法允许省略,但过度省略可能降低代码清晰度。建议在明确需求时使用。
示例:用户输入验证(省略迭代语句)
for (int attempts = 0; attempts < 3; )
{
Console.Write("请输入密码:");
string input = Console.ReadLine();
if (input == "123456")
{
Console.WriteLine("登录成功!");
break;
}
attempts++; // 手动更新尝试次数
Console.WriteLine($"剩余尝试次数:{3 - attempts}");
}
总结
可以省略:
for
循环的三个部分均可省略,但需确保逻辑正确。慎用无限循环:若省略条件,务必在循环体内添加退出机制(如
break
)。优先考虑可读性:清晰的代码比简化的语法更重要。
七、foreach
与 for
对比
for
适用于 索引访问(如数组、列表):
int[] numbers = { 10, 20, 30 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]); // 通过索引访问
}
foreach
适用于 遍历集合(无需索引):
foreach (int num in numbers)
{
Console.WriteLine(num); // 直接访问元素
}