跳至内容
张叶安的小站
用户工具
登录
站点工具
搜索
工具
显示页面
过去修订
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
csharp:第二章运算符与流程控制
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== 第二章 运算符与流程控制 ====== ===== 2.1 条件语句 ===== === if语句 === <code csharp> int score = 85; if (score >= 90) { Console.WriteLine("优秀"); } else if (score >= 80) { Console.WriteLine("良好"); } else if (score >= 70) { Console.WriteLine("中等"); } else if (score >= 60) { Console.WriteLine("及格"); } else { Console.WriteLine("不及格"); } </code> === 三元运算符 === <code csharp> int age = 20; string status = age >= 18 ? "成年人" : "未成年人"; // 嵌套三元运算符 int score = 85; string grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : score >= 60 ? "D" : "F"; </code> === switch语句 === ==== 基本switch ==== <code csharp> int day = 3; switch (day) { case 1: Console.WriteLine("星期一"); break; case 2: Console.WriteLine("星期二"); break; case 3: Console.WriteLine("星期三"); break; case 4: Console.WriteLine("星期四"); break; case 5: Console.WriteLine("星期五"); break; case 6: case 7: Console.WriteLine("周末"); break; default: Console.WriteLine("无效的日期"); break; } </code> ==== switch表达式(C# 8+) ==== <code csharp> int day = 3; string dayName = day switch { 1 => "星期一", 2 => "星期二", 3 => "星期三", 4 => "星期四", 5 => "星期五", 6 or 7 => "周末", _ => "无效的日期" }; // 模式匹配switch表达式 string GetDescription(object obj) => obj switch { int i when i > 0 => $"正整数: {i}", int i when i < 0 => $"负整数: {i}", 0 => "零", string s => $"字符串: {s}", null => "空值", _ => "未知类型" }; </code> ===== 2.2 循环语句 ===== === for循环 === <code csharp> // 基本for循环 for (int i = 0; i < 5; i++) { Console.WriteLine($"第 {i + 1} 次循环"); } // 递减循环 for (int i = 10; i > 0; i--) { Console.WriteLine(i); } // 多变量循环 for (int i = 0, j = 10; i < j; i++, j--) { Console.WriteLine($"i={i}, j={j}"); } // 省略部分表达式 int n = 0; for (; n < 5;) { Console.WriteLine(n); n++; } </code> === while循环 === <code csharp> // 基本while循环 int count = 0; while (count < 5) { Console.WriteLine($"Count: {count}"); count++; } // 读取输入直到用户输入"exit" string input = ""; while (input.ToLower() != "exit") { Console.Write("输入内容 (exit退出): "); input = Console.ReadLine(); Console.WriteLine($"你输入了: {input}"); } </code> === do-while循环 === <code csharp> // 至少执行一次 int number; do { Console.Write("请输入1-100之间的数字: "); } while (!int.TryParse(Console.ReadLine(), out number) || number < 1 || number > 100); Console.WriteLine($"你输入了: {number}"); </code> === foreach循环 === <code csharp> // 遍历数组 string[] names = { "Alice", "Bob", "Charlie" }; foreach (string name in names) { Console.WriteLine(name); } // 遍历列表 List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; foreach (int num in numbers) { Console.WriteLine(num * num); } </code> ===== 2.3 循环控制 ===== === break语句 === <code csharp> // 跳出循环 for (int i = 0; i < 100; i++) { if (i == 10) { break; // 当i等于10时跳出循环 } Console.WriteLine(i); } // 查找第一个能被7和13整除的数 for (int i = 1; ; i++) { if (i % 7 == 0 && i % 13 == 0) { Console.WriteLine($"第一个能被7和13整除的数是: {i}"); break; } } </code> === continue语句 === <code csharp> // 跳过当前迭代 for (int i = 0; i < 10; i++) { if (i % 2 == 0) { continue; // 跳过偶数 } Console.WriteLine(i); // 只输出奇数 } // 处理列表时跳过null值 List<string> items = new List<string> { "A", null, "B", null, "C" }; foreach (var item in items) { if (item == null) { continue; } Console.WriteLine(item.ToUpper()); } </code> === 嵌套循环与标签 === <code csharp> // 嵌套循环 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { Console.Write($"{j}x{i}={i * j}\t"); } Console.WriteLine(); } // 使用标签跳出多层循环 outer: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (i * j > 20) { break outer; // 跳出外层循环 } Console.Write($"{i},{j} "); } Console.WriteLine(); } </code> ===== 2.4 模式匹配(C# 7+) ===== === is表达式 === <code csharp> object obj = "Hello"; // 类型检查并赋值 if (obj is string str) { Console.WriteLine($"字符串长度: {str.Length}"); } // 带条件的模式匹配 object value = 42; if (value is int num && num > 0) { Console.WriteLine($"正整数: {num}"); } </code> === 属性模式 === <code csharp> class Person { public string Name { get; set; } public int Age { get; set; } } Person person = new Person { Name = "张三", Age = 25 }; if (person is { Age: >= 18, Name: not null }) { Console.WriteLine("成年人"); } // 更复杂的属性模式 string description = person switch { { Age: < 13 } => "儿童", { Age: >= 13 and < 20 } => "青少年", { Age: >= 20 and < 60 } => "成年人", { Age: >= 60 } => "老年人", _ => "未知" }; </code> === 列表模式(C# 11+) ==== <code csharp> int[] numbers = { 1, 2, 3 }; if (numbers is [1, 2, 3]) { Console.WriteLine("匹配数组 [1, 2, 3]"); } if (numbers is [_, _, _]) { Console.WriteLine("包含3个元素的数组"); } if (numbers is [1, ..]) { Console.WriteLine("以1开头的数组"); } // 切片模式 int[] arr = { 1, 2, 3, 4, 5 }; if (arr is [1, .. var middle, 5]) { Console.WriteLine($"中间元素: {string.Join(", ", middle)}"); } </code> ===== 2.5 空值处理 ===== === 空合并运算符 === <code csharp> string name = null; string displayName = name ?? "匿名用户"; // 如果name为null,使用"匿名用户" // 空合并赋值(C# 8+) name ??= "默认值"; // 如果name为null,赋值为"默认值" </code> === 空条件运算符 === <code csharp> Person person = null; // 传统方式 // int length = person.Name.Length; // 会抛出NullReferenceException // 使用空条件运算符 int? length = person?.Name?.Length; // 安全地访问,如果任何环节为null,返回null // 结合空合并运算符 int len = person?.Name?.Length ?? 0; // 如果为null,使用0 </code> ===== 2.6 实战示例 ===== === 猜数字游戏 === <code csharp> Random random = new Random(); int target = random.Next(1, 101); int attempts = 0; int guess; Console.WriteLine("猜数字游戏!我想了一个1-100之间的数字。"); do { Console.Write("请输入你的猜测: "); if (!int.TryParse(Console.ReadLine(), out guess)) { Console.WriteLine("请输入有效的数字!"); continue; } attempts++; if (guess < target) { Console.WriteLine("太小了!再试一次。"); } else if (guess > target) { Console.WriteLine("太大了!再试一次。"); } else { Console.WriteLine($"恭喜你!用了 {attempts} 次猜对了!"); } } while (guess != target); </code> === 打印菱形 === <code csharp> Console.Write("请输入菱形的大小: "); int size = int.Parse(Console.ReadLine()); // 上半部分(包括中间行) for (int i = 1; i <= size; i++) { // 打印空格 for (int j = 1; j <= size - i; j++) { Console.Write(" "); } // 打印星号 for (int k = 1; k <= 2 * i - 1; k++) { Console.Write("*"); } Console.WriteLine(); } // 下半部分 for (int i = size - 1; i >= 1; i--) { for (int j = 1; j <= size - i; j++) { Console.Write(" "); } for (int k = 1; k <= 2 * i - 1; k++) { Console.Write("*"); } Console.WriteLine(); } </code> === 计算素数 === <code csharp> Console.Write("请输入一个正整数: "); int n = int.Parse(Console.ReadLine()); Console.WriteLine($"1到{n}之间的素数:"); for (int num = 2; num <= n; num++) { bool isPrime = true; for (int i = 2; i <= Math.Sqrt(num); i++) { if (num % i == 0) { isPrime = false; break; } } if (isPrime) { Console.Write(num + " "); } } Console.WriteLine(); </code> ===== 练习题 ===== === 基础练习 === 1. **成绩等级判断**:使用switch表达式重写第一章的成绩等级判断程序。 2. **乘法表**:使用嵌套循环打印9x9乘法表。 3. **数字累加**:使用for循环计算1到100所有整数的和。 4. **字符统计**:输入一段文字,统计其中字母、数字、空格和其他字符的数量。 === 进阶练习 === 5. **斐波那契数列**:输出前20个斐波那契数列的数字(1, 1, 2, 3, 5, 8...)。 6. **完美数**:找出1-1000之间的所有完美数(完美数是指其所有真因子之和等于它本身的数,如6=1+2+3)。 7. **数字金字塔**:根据用户输入的高度,打印如下形式的数字金字塔: <code> 1 121 12321 1234321 123454321 </code> === 挑战练习 === 8. **ATM模拟器**:实现一个简单的ATM程序,功能包括: - 查询余额 - 存款 - 取款(检查余额是否足够) - 退出 使用循环让用户可以连续操作。 9. **日历打印**:根据用户输入的年份和月份,打印该月的日历格式。 10. **汉诺塔问题**:使用递归实现汉诺塔问题的解决方案,并显示移动步骤。 ===== 本章小结 ===== 本章学习了C#的流程控制: - if/else条件判断和三元运算符 - switch语句和switch表达式 - for、while、do-while循环 - foreach循环遍历集合 - break和continue控制循环 - 模式匹配的强大功能 - 空值处理运算符 掌握这些流程控制结构后,你就能编写复杂的逻辑程序了。
csharp/第二章运算符与流程控制.txt
· 最后更改:
2026/02/03 19:45
由
127.0.0.1
页面工具
显示页面
过去修订
反向链接
回到顶部