第四阶段:流程控制.条件语句

QcrTiMo 发布于 9 天前 7 次阅读


为什么需要条件语句?

想象一下现实生活中和游戏的场景:

  • 如果外面下雨,带伞。
  • 如果血量小于等于0,死亡。
  • 如果考试分数大于等于 60,及格了,否则就不及格。
  • 如果你是 VIP 会员,打 8 折,否则如果你是普通会员,打 9 折,否则不打折。

程序也需要这种做决策的能力。条件语句允许我们根据某个条件 (Condition) 是否为真 (true) 或 假 (false) 来决定执行哪些代码块。

比较运算符

要形成条件,我们首先需要比较不同的值。比较运算符用于比较两个值,并返回一个布尔 (bool) 结果 (true 或 false)。

  • == (等于): 判断两个操作数的值是否相等。
    • 极其重要: 两个等于号 == 用于比较,一个等于号 = 用于赋值!初学者非常容易混淆!
    • 例子:5 == 5 结果是 true; age == 18 判断 age 变量的值是否等于 18。
  • != (不等于): 判断两个操作数的值是否不相等。
    • 例子:5 != 3 结果是 true; name != "admin" 判断 name 变量的值是否不是 "admin"。
  • > (大于): 判断左操作数是否大于右操作数。
    • 例子:10 > 5 结果是 true。
  • < (小于): 判断左操作数是否小于右操作数。
    • 例子:3 < 8 结果是 true。
  • >= (大于等于): 判断左操作数是否大于或等于右操作数。
    • 例子:5 >= 5 结果是 true; score >= 60 判断 score 是否及格。
  • <= (小于等于): 判断左操作数是否小于或等于右操作数。
    • 例子:4 <= 7 结果是 true。

示例代码:

int myAge = 25;
int yourAge = 30;
string myName = "Alice";
bool isAgeEqual = (myAge == yourAge); // false
bool isAgeNotEqual = (myAge != yourAge); // true
bool isOlder = (myAge > yourAge); // false
bool isYoungerOrEqual = (myAge &lt;= yourAge); // true
bool isNameAlice = (myName == "Alice"); // true
Console.WriteLine($"myAge == yourAge: {isAgeEqual}");
Console.WriteLine($"myAge != yourAge: {isAgeNotEqual}");
Console.WriteLine($"myAge > yourAge: {isOlder}");
Console.WriteLine($"myAge &lt;= yourAge: {isYoungerOrEqual}");
Console.WriteLine($"myName == \"Alice\": {isNameAlice}"); // \" 用于在字符串中表示双引号本身

if 语句:满足条件才执行

if 语句是最基本的条件控制。它检查一个条件,如果条件为 true,就执行紧跟其后的代码块。

基本语法:

if (condition) // condition 必须是一个结果为 bool 的表达式
{
    // 条件为 true 时执行的代码块
    // 可以有一条或多条语句
}
// 如果条件为 false,则跳过大括号 {} 中的代码块,继续执行后面的代码

代码示例:

int temperature = 30;
if (temperature > 25)
{
    Console.WriteLine("天气炎热,注意防暑!");
    Console.WriteLine("建议开空调。");
}
Console.WriteLine("程序继续执行..."); // 这行代码无论如何都会执行

在这个例子中,因为 temperature (30) 大于 25,所以 if 后面的大括号里的两行 Console.WriteLine 都会被执行。如果 temperature 是 20,那么这两行就会被跳过。

注意 (代码块加大括号):

  • 强烈建议 即使 if 后面只有一条语句,也要始终使用大括号 {} 把代码块包起来。这能提高代码可读性,并且在以后添加更多语句时不容易出错。
// 不推荐的写法 (虽然合法,但容易出错)
// if (temperature > 25)
//     Console.WriteLine("天气炎热!"); // 只有这一行受 if 控制
//     Console.WriteLine("建议开空调。"); // 这一行无论如何都会执行,缩进有误导性!
// 推荐的写法
if (temperature > 25) {
    Console.WriteLine("天气炎热!");
}

if-else 语句:二选一

if-else 语句提供了一个“否则”的选项。如果 if 的条件为 true,执行 if 的代码块;如果条件为 false,则执行 else 的代码块。

基本语法:

if (condition)
{
    // 条件为 true 时执行的代码块
}
else // 不需要条件,表示 if 条件不满足时的情况
{
    // 条件为 false 时执行的代码块
}

代码示例:

int score = 55;
if (score >= 60)
{
    Console.WriteLine("恭喜,你及格了!");
}
else
{
    Console.WriteLine("很遗憾,你没有及格,请继续努力!");
}

在这个例子中,因为 score (55) 小于 60,所以 if 的条件为 false,程序会跳过 if 的代码块,执行 else 代码块里的语句。

if-else if-else 语句:多选一

当你有多个互斥的条件需要判断时,可以使用 if-else if-else 结构。它会按顺序检查条件:

  • 如果第一个 if 条件为 true,执行它的代码块,然后跳过整个 else if 和 else 部分。
  • 如果第一个 if 条件为 false,则检查第一个 else if 的条件。如果为 true,执行它的代码块,然后跳过后面的部分。
  • 依次检查后续的 else if。
  • 如果所有的 if 和 else if 条件都为 false,则执行最后的 else 代码块 (最后的 else 是可选的,如果没有 else 并且所有条件都不满足,则整个结构什么也不执行)。

基本语法:

if (condition1)
{
    // condition1 为 true 时执行
}
else if (condition2)
{
    // condition1 为 false, 且 condition2 为 true 时执行
}
else if (condition3)
{
    // condition1 和 condition2 都为 false, 且 condition3 为 true 时执行
}
// ... 可以有更多的 else if
else
{
    // 以上所有条件都为 false 时执行 (可选)
}

代码示例:

int studentScore = 85;
char grade;
if (studentScore >= 90)
{
    grade = 'A';
}
else if (studentScore >= 80) // 隐含条件:score &lt; 90
{
    grade = 'B';
}
else if (studentScore >= 70) // 隐含条件:score &lt; 80
{
    grade = 'C';
}
else if (studentScore >= 60) // 隐含条件:score &lt; 70
{
    grade = 'D';
}
else // 隐含条件:score &lt; 60
{
    grade = 'F'; // 不及格
}
Console.WriteLine($"你的成绩等级是:{grade}"); // 输出 B

else if 的顺序很重要。如果把 else if (studentScore >= 60) 放在最前面,那么 85 分也会满足 >= 60,程序就会错误地判定为 D 等级,然后跳过后面的判断。

逻辑运算符

有时候我们需要组合多个条件。例如,“伤害范围: 大于18,并且小于60”。这时就需要逻辑运算符。它们也返回 bool 值。

  • && (逻辑与 AND): 当两个条件都为 true 时,结果才为 true。
    • 例子:condition1 && condition2
  • || (逻辑或 OR): 当至少一个条件为 true 时,结果就为 true。
    • 例子:condition1 || condition2
  • ! (逻辑非 NOT): 反转一个布尔值。true 变成 false,false 变成 true。
    • 例子:!condition

示例代码:

int userAge = 20;
bool hasLicense = true;
bool isAdmin = false;
// 检查是否可以开车 (年龄 >= 18 并且 有驾照)
if (userAge >= 18 &amp;&amp; hasLicense)
{
    Console.WriteLine("你可以合法开车。");
}
else
{
    Console.WriteLine("你不满足开车条件。");
}
// 检查是否需要显示特殊菜单 (是管理员 或者 年龄大于 60)
if (isAdmin || userAge > 60)
{
    Console.WriteLine("显示特殊菜单。");
}
else
{
    Console.WriteLine("显示普通菜单。");
}
// 检查是否未毕业 (使用 !)
bool isGraduated = false;
if (!isGraduated) // 等同于 if (isGraduated == false)
{
    Console.WriteLine("你还是学生。");
}

嵌套 if 语句 (Nested If)

你可以在一个 if 或 else 代码块内部再包含另一个 if 语句,这称为嵌套 if。

代码示例:

bool isLoggedIn = true;
bool isUserAdmin = false;
if (isLoggedIn)
{
    Console.WriteLine("用户已登录。");
    // 在登录的基础上,再判断是否是管理员
    if (isUserAdmin)
    {
        Console.WriteLine("欢迎管理员!");
    }
    else
    {
        Console.WriteLine("欢迎普通用户!");
    }
}
else
{
    Console.WriteLine("请先登录。");
}

过多的嵌套会让代码变得复杂难懂,应尽量避免。有时候可以通过使用逻辑运算符 && 来简化嵌套 if。例如,上面的内层 if 可以思考是否能用 isLoggedIn && isUserAdmin 来判断。

学了那么久,该你实践了!

打开你之前的项目,把之前写的代码注释掉,并分好类,开始写这节练习:

  1. 判断数字正负零: 定义一个 int 变量 number,使用 if-else if-else 判断它是正数、负数还是零,并输出相应的信息。
  2. 判断偶数奇数: 定义一个 int 变量 num,使用 if-else 和取模运算符 % 判断它是偶数还是奇数。
  3. 判断闰年: 定义一个 int 变量 year。判断它是否是闰年。闰年的条件是:
    • 能被 4 整除,但不能被 100 整除。
    • 或者 能被 400 整除。
    • 你需要组合使用 && 和 || 运算符。 (提示: (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
  4. 模拟登录: 定义两个 string 变量 username 和 password。使用 if 语句判断输入的用户名和密码是否等于预设的正确值(比如 "admin" 和 "123456"),如果是,则输出 "登录成功",否则输出 "用户名或密码错误"。

尝试编写这些代码,并用不同的输入值测试它们!

斯哈斯哈斯哈,佳代子啊啊啊啊啊啊ᕕ(◠ڼ◠)ᕗᕕ(◠ڼ◠)ᕗᕕ(◠ڼ◠)ᕗᕕ(◠ڼ◠)ᕗᕕ(◠ڼ◠)ᕗ
最后更新于 2025-05-19