流程控制与循环复习#
一、选择题#
1. 下列代码输出什么?
int score = 85;
if (score > 90) Console.WriteLine("优秀");
else if (score > 60) Console.WriteLine("及格");
else Console.WriteLine("不及格");
- A. 优秀
- B. 及格
- C. 不及格
- D. 什么都不输出
答案
B. 及格。85 不满足 >90,满足 >60,走 else if 分支。注意 if-else if 链只会执行第一个成立的分支。
2. switch 语句中,每个 case 后通常必须加什么?
- A.
continue - B.
break - C.
return - D. 什么都不用加
答案
B. break。每个 case 结束需要 break(或 return/goto)防止"贯穿"到下一个 case。
3. do-while 循环至少会执行几次循环体?
- A. 0 次
- B. 1 次
- C. 取决于条件
- D. 无限次
答案
B. 1 次。do-while 先执行循环体再判断条件,至少执行一次。while 是先判断后执行,可能一次都不执行。
4. 在嵌套循环中,break 的作用是?
- A. 跳出所有循环
- B. 跳出最内层循环
- C. 跳过本次循环
- D. 结束整个方法
答案
B。break 只跳出当前所在的那一层循环。return 才结束整个方法(无论嵌套多少层)。
5. foreach 循环遍历数组时,下列说法正确的是?
- A. 可以修改数组元素的值
- B. 可以获得索引 i
- C. 只能只读遍历,不能修改集合长度
- D. 和 for 循环完全一样
答案
C。foreach 是只读遍历,遍历中不能修改集合(增删元素);拿不到索引,需要索引时用 for。
6. continue 与 break 的区别是?
- A. 没有区别
- B. continue 结束整个循环,break 跳过本次
- C. break 结束整个循环,continue 跳过本次
- D. 都只对嵌套外层生效
答案
C。break 立即终止整个循环;continue 跳过本次迭代,进入下一次循环。
二、填空题#
1. 循环 4 要素是:==_== ==== ==_== ====、==_== ==== ==_== ====、==_== ==== ==_== ====、==_== ==== ==_== ====。
答案
初始化语句、判断条件、循环体、迭代器。
2. try-catch-finally 中,==_== ==== ==_== ==== 块无论是否发生异常都会执行,通常用于==_== ==== ==_== ====。
答案
finally;资源清理(关闭文件流、释放连接等)。
3. 捕获异常时,应先捕获 ==_== ==== ==_== ==== 异常,再捕获 ==_== ==== ==_== ==== 异常(兜底)。**
答案
具体(如 FormatException);通用(Exception)。顺序不能反,否则具体异常永远不会被捕获。
4. 打印 1~100 的奇数,可用 for 循环 + ==_== ==== ==_== ==== 跳过偶数,或用迭代器步长为 ==_== ==== ==_== ====。
答案
continue;2(for (int i = 1; i <= 100; i += 2))。
5. 外层循环执行 N 次,内层循环执行 M 次,总执行次数为 ==_== ==== ==_== ====。
答案
N × M 次。
三、简答题#
1. if-else if 与多个独立 if 的区别?
答案
if-else if:一旦某个条件成立,不再判断后面的条件,整个链只执行一个分支- 多个独立
if:每个 if 都判断,条件成立的都会执行 - 场景:互斥条件用 if-else if;可能同时满足多个时用多个 if
2. while 与 do-while 的区别?
答案
- while:先判断后执行,条件不成立时一次都不执行
- do-while:先执行后判断,至少执行一次
- 场景:需要"至少尝试一次"的输入校验(如密码登录)用 do-while
3. 异常处理的最佳实践有哪些?
答案
- 先捕获具体异常,再捕获通用异常(Exception 兜底)
- finally 用于资源清理
- 不要吞掉异常——至少记录
ex.Message - 尽量缩小 try 范围,只包可能出错的代码
4. goto 语句的作用是什么?有什么注意事项?
答案
跳转到代码中的标记位置重新执行。常用于输入校验失败后让用户重新输入。但会降低代码可读性,尽量少用。
四、编程题#
1. 打印 9×9 乘法表(下三角)。
答案
2. 输入行数 n,打印等腰三角形(金字塔)。
答案
```csharp
> int n = Convert.ToInt32(Console.ReadLine()); > for (int i = 1; i <= n; i++) > { > for (int j = n; j > i; j--) Console.Write(" "); // 空格 > for (int j = 1; j < i * 2; j++) Console.Write("*"); // 2i-1 个 * > Console.WriteLine(); > } > ```
3. 判断输入的数字是否为质数。
答案
```csharp
> int n = Convert.ToInt32(Console.ReadLine()); > bool isPrime = n > 1; > for (int i = 2; i * i <= n; i++) // 只需检查到 sqrt(n) > { > if (n % i == 0) { isPrime = false; break; } > } > Console.WriteLine(isPrime ? "是质数" : "不是质数"); > ```
4. 判断 100~999 的水仙花数(各位立方和等于自身)。
答案
5. 猜数字游戏:随机生成 1~100 的数,用户循环猜,提示"大了/小了",猜对或 5 次用尽结束。
答案
Random r = new Random();
int target = r.Next(1, 101);
int chances = 5;
while (chances > 0)
{
Console.WriteLine($"剩余机会:{chances},请输入:");
int guess = Convert.ToInt32(Console.ReadLine());
if (guess == target) { Console.WriteLine("猜对了"); break; }
Console.WriteLine(guess > target ? "大了" : "小了");
chances--;
}
if (chances == 0) Console.WriteLine($"游戏结束,答案是{target}");
6. 用 do-while 模拟密码登录:密码为 "123456",错误则重新输入。
答案
知识卡片#
程序三种基本结构?
顺序结构、选择结构(分支)、循环结构。
break、continue、return 三者的区别?
break 终止当前循环;continue 跳过本次进入下一次;return 结束整个方法(多层循环也全部终止)。
for 与 while 怎么选择?
循环次数已知/可计数用 for;不确定次数、依赖条件判断用 while;至少执行一次用 do-while。
嵌套循环的执行顺序?
外层循环每执行一次,内层循环完整执行一轮;总次数 = 外层次数 × 内层次数。
foreach 的特点?
只读遍历数组/集合,拿不到索引,遍历中不能增删集合元素;需要索引或修改用 for。
try-catch-finally 的执行流程?
try 无异常 → 跳过 catch 执行 finally;有异常 → 匹配 catch 处理 → 执行 finally;finally 无论如何都执行。
常见异常类型有哪些?
FormatException(格式错)、DivideByZeroException(除零)、NullReferenceException(空引用)、IndexOutOfRangeException(越界)。
goto 的使用场景?
输入校验失败后跳回标记处让用户重新输入;会降低可读性,尽量少用。