分支语句和循环

分支语句和循环 if-else条件判断语句只有满足条件才能执行的函数体if (条件) { // 条件为 true 时执行 } else { // 条件为 false 时执行 }如果满足了条件就执行否则的话就执行另一个函数体内的代码段int age 18; if (age 18) { Console.WriteLine(已成年); } else { Console.WriteLine(未成年); }else也可以不写int score 95; if (score 60) { Console.WriteLine(及格); } // 如果不及格什么也不做直接跳过也可以通过else if 进行多条件分支语句的编写if (条件1) { // 条件1为 true } else if (条件2) { // 条件1为 false 且 条件2为 true } else if (条件3) { // 条件1、2为 false 且 条件3为 true } else { // 所有条件都为 false }同样的if-else也可以嵌套bool isLoggedIn true; bool isAdmin false; if (isLoggedIn) { if (isAdmin) { Console.WriteLine(欢迎管理员); } else { Console.WriteLine(欢迎普通用户); } } else { Console.WriteLine(请先登录); }if的参数必须是返回值为bool类型的只是一个单独的左值或右值编译器时不允许的。// ❌ 错误C# 不允许这样写 if (5) { } // 编译错误 // ✅ 正确 if (5 3) { }else匹配的是同一作用域内上方最近的if所以在编写过程中一定要用{}明确标明作用域避免写错。switchswitch语句基于单个变量的多个精确值进行的分支判断。相比于if-else链switch可读性更高些、int x 5; if(x 1) { } else if(x 2) { } else if(x 3) { } else if(x 4) { } else { } switch(x) { case 1: break; case 2: break; case 3: break; case 4: break; default: }可以直观的看到switch的代码段更短更简洁更方便。当条件是单个变量且有精确值匹配分支数在3个以上的时候用switch如果不是单个变量且有精确值匹配那分支数再多也不可以使用switch。for结构如下for (初始化; 条件; 迭代) { // 循环体 }初始化只会执行一次每次循环前都要判断当前条件是否为true只有为true才可以继续循环否则退出循环。在执行完循环体后进行迭代然后再进行下一次循环前判断。简单示例// 打印 1 到 5 for (int i 1; i 5; i) { Console.WriteLine(i); } // 输出1 2 3 4 5for可以省略部分参数比如// 省略初始化外部已定义 int i 0; for (; i 5; i) { Console.WriteLine(i); } // 省略迭代在循环体内处理 for (int i 0; i 5;) { Console.WriteLine(i); i; // 手动迭代 } // 省略条件死循环需 break 退出 for (;;) { Console.WriteLine(无限循环); break; // 必须退出 }for通常和数组搭配使用通过for对数组中每一位元素进行遍历int[] numbers { 10, 20, 30, 40, 50 }; // 使用索引访问 for (int i 0; i numbers.Length; i) { Console.WriteLine($numbers[{i}] {numbers[i]}); } // 输出 // numbers[0] 10 // numbers[1] 20 // ...for内也可以嵌套for但是时间复杂度就会变成n*mfor (int i 1; i 9; i) { for (int j 1; j i; j) { Console.Write(${j}×{i}{i * j}\t); } Console.WriteLine(); } // 输出 // 1×11 // 1×22 2×24 // 1×33 2×36 3×39 // ...for中可以使用break和continue进行循环控制break是跳出整个循环语句// 找到第一个偶数就停止 for (int i 1; i 10; i) { if (i % 2 0) { Console.WriteLine($找到偶数{i}); break; // 立即退出循环 } } // 输出找到偶数2continue是跳出本次循环直接迭代后进入下次循环// 打印 1-10 中的所有奇数跳过偶数 for (int i 1; i 10; i) { if (i % 2 0) continue; // 跳过本次循环 Console.Write(i ); } // 输出1 3 5 7 9在使用for编写程序时要注意条件不要写错不然可能无法进入循环或者变成死循环。不建议使用浮点数作为计数器因为浮点型可能会有误差从而导致循环次数出错。while先判断条件条件为true就执行循环体条件为false就不执行。int i 1; while (i 5) { Console.WriteLine(i); i; // 必须更新变量否则死循环 } // 输出1 2 3 4 5while通常用在不知道具体循环次数只知道循环条件的时候。do-while至少执行一次循环执行后在判断条件是否满足进入下一次循环。do { // 循环体至少执行一次 } while (条件);foreachforeach (元素类型 变量名 in 集合) { // 处理每个元素 }执行流程1.从集合中取出第一个元素2.赋值给变量3.执行循环体4.回到步骤1取下一个元素5.继续循环直到所有元素遍历完。举个简单的例子string[] fruits { Apple, Banana, Cherry }; foreach (string fruit in fruits) { Console.WriteLine(fruit); } // 输出 // Apple // Banana // Cherryforeach在循环时不可以修改集合中的元素int[] numbers { 1, 2, 3, 4, 5 }; foreach (int num in numbers) { num num * 2; // 编译错误无法赋值 }foreach不需要手动管理索引但也无法获取当前元素的索引位置。但可以用以下方法获取索引// C# 7.0 使用元组 var names new Liststring { Alice, Bob, Charlie }; foreach (var (index, name) in names.Select((n, i) (i, n))) { Console.WriteLine(${index}: {name}); } // 输出 // 0: Alice // 1: Bob // 2: Charlie // 或者使用索引变量手动增加 int idx 0; foreach (var name in names) { Console.WriteLine(${idx}: {name}); idx; }foreach支持所有实现了IEnumerable的的集合。// 任何实现了 IEnumerable 的集合都可以用 foreach IEnumerableint numbers GetNumbers(); // 假设返回 IEnumerableint foreach (int num in numbers) { Console.WriteLine(num); }