跳转至

流程控制与循环复习#

对应笔记:流程控制循环结构循环嵌套循环控制语句 建议用时:50 分钟。


一、选择题#

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. 结束整个方法
答案

Bbreak 只跳出当前所在的那一层循环。return 才结束整个方法(无论嵌套多少层)。

5. foreach 循环遍历数组时,下列说法正确的是?

  • A. 可以修改数组元素的值
  • B. 可以获得索引 i
  • C. 只能只读遍历,不能修改集合长度
  • D. 和 for 循环完全一样
答案

C。foreach 是只读遍历,遍历中不能修改集合(增删元素);拿不到索引,需要索引时用 for。

6. continuebreak 的区别是?

  • A. 没有区别
  • B. continue 结束整个循环,break 跳过本次
  • C. break 结束整个循环,continue 跳过本次
  • D. 都只对嵌套外层生效
答案

Cbreak 立即终止整个循环;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. whiledo-while 的区别?

答案
  • while:先判断后执行,条件不成立时一次都不执行
  • do-while:先执行后判断,至少执行一次
  • 场景:需要"至少尝试一次"的输入校验(如密码登录)用 do-while

3. 异常处理的最佳实践有哪些?

答案
  1. 先捕获具体异常,再捕获通用异常(Exception 兜底)
  2. finally 用于资源清理
  3. 不要吞掉异常——至少记录 ex.Message
  4. 尽量缩小 try 范围,只包可能出错的代码

4. goto 语句的作用是什么?有什么注意事项?

答案

跳转到代码中的标记位置重新执行。常用于输入校验失败后让用户重新输入。但会降低代码可读性,尽量少用。


四、编程题#

1. 打印 9×9 乘法表(下三角)。

答案
for (int i = 1; i <= 9; i++)
{
    for (int j = 1; j <= i; j++)
    {
        Console.Write($"{j}×{i}={j * i}\t");
    }
    Console.WriteLine();
}

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 的水仙花数(各位立方和等于自身)。

答案
for (int i = 100; i < 1000; i++)
{
    int a = i % 10, b = i / 10 % 10, c = i / 100;
    if (a * a * a + b * b * b + c * c * c == i)
        Console.WriteLine(i);
}

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",错误则重新输入。

答案
string pwd;
do
{
    Console.WriteLine("请输入密码:");
    pwd = Console.ReadLine();
} while (pwd != "123456");
Console.WriteLine("登录成功");

知识卡片#

程序三种基本结构?

顺序结构、选择结构(分支)、循环结构。

breakcontinuereturn 三者的区别?

break 终止当前循环;continue 跳过本次进入下一次;return 结束整个方法(多层循环也全部终止)。

forwhile 怎么选择?

循环次数已知/可计数用 for;不确定次数、依赖条件判断用 while;至少执行一次用 do-while。

嵌套循环的执行顺序?

外层循环每执行一次,内层循环完整执行一轮;总次数 = 外层次数 × 内层次数。

foreach 的特点?

只读遍历数组/集合,拿不到索引,遍历中不能增删集合元素;需要索引或修改用 for。

try-catch-finally 的执行流程?

try 无异常 → 跳过 catch 执行 finally;有异常 → 匹配 catch 处理 → 执行 finally;finally 无论如何都执行。

常见异常类型有哪些?

FormatException(格式错)、DivideByZeroException(除零)、NullReferenceException(空引用)、IndexOutOfRangeException(越界)。

goto 的使用场景?

输入校验失败后跳回标记处让用户重新输入;会降低可读性,尽量少用。


相关笔记#