教程:C# if 语句和循环 - 条件逻辑

本教程介绍如何编写 C# 代码来检查变量并基于这些变量更改执行路径。 编写 C# 代码并查看编译和运行它的结果。 本教程包含一系列课程,用于探索 C# 中的分支和循环构造。 这些课程介绍了 C# 语言的基础知识。

在本教程中,你将:

  • 使用 C# 开发环境启动 GitHub Codespace。
  • 浏览 ifelse 语句。
  • 使用循环重复操作。
  • 使用嵌套循环。
  • 合并分支和循环。

先决条件

必须具有以下选项之一:

使用 if 语句

若要使用教程环境启动 GitHub Codespace,请打开 教程 codespace 存储库的浏览器窗口。 选择绿色 “代码 ”按钮和 “代码空间 ”选项卡。然后选择该 + 符号以使用此环境创建新的 Codespace。 如果已完成本系列中的其他教程,则可以打开该代码空间,而不是创建新的代码空间。

  1. 加载 codespace 时,请在名为 branches-loops.cs教程文件夹中创建新文件。

  2. 打开新文件。

  3. 将以下代码键入或复制到 branches-loops.cs

    int a = 5;
    int b = 6;
    if (a + b > 10)
        Console.WriteLine("The answer is greater than 10.");
    
  4. 通过在集成终端中键入以下命令来尝试此代码:

    cd tutorials
    dotnet branches-loops.cs
    

    您应该看到消息“答案是大于 10。”打印到您的控制台上。

  5. 修改其声明 b ,使总和小于 10:

    int b = 3;
    
  6. 在终端窗口中再次键入 dotnet branches-loops.cs

    由于答案小于 10,因此不会打印任何内容。 您正在测试的条件为假。 没有要执行的任何代码,因为你只为 if 语句编写了一个可能的分支:true 分支。

小窍门

在浏览 C# (或任何编程语言)时,编写代码时可能会出错。 编译器查找并报告错误。 仔细查看错误输出和生成错误的代码。 你还可以要求科皮洛特找出差异或发现任何错误。 编译器错误通常可以帮助你找到问题。

第一个示例展示了 if 和布尔类型的强大功能。 布尔值是一个变量,可以是两个值之一:truefalse。 C# 定义布尔变量的特殊类型 bool 。 该 if 语句检查 bool 的值。 如果值为值 true,则执行后面的 if 语句。 否则,跳过这些语句。 基于这些条件检查条件和执行语句的过程非常强大。 让我们来了解一下。

使 if 和 else 协同工作

若要在 true 和 false 分支中执行不同的代码,请创建一个 else 在条件为 false 时执行的分支。 请尝试分支 else

  1. 在以下代码片段中添加最后两行(你应该已经有前四行):

    int a = 5;
    int b = 3;
    if (a + b > 10)
        Console.WriteLine("The answer is greater than 10");
    else
        Console.WriteLine("The answer is not greater than 10");
    

    关键字后面的 else 语句仅在测试 false条件时执行。 将ifelse与布尔条件结合起来,可提供处理truefalse条件所需的所有功能。

    重要

    ifelse 语句下的缩进是为了方便读者阅读。 C# 语言不会将缩进或空格视为重要。 根据条件,执行跟在 ifelse 关键字之后的语句。 本教程中的所有示例都遵循了常见做法,根据语句的控制流缩进代码行。

    由于缩进并不重要,因此你需要使用 {} 指示何时需要多个语句成为有条件执行的块的一部分。 C# 程序员通常在所有 ifelse 子句上使用这些大括号。

  2. 以下示例与在上一示例中创建的内容相同,并添加了 {}。 修改代码以匹配以下代码:

    int a = 5;
    int b = 3;
    if (a + b > 10)
    {
        Console.WriteLine("The answer is greater than 10");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
    }
    

    小窍门

    在本教程的其余部分,代码示例均包括使用大括号,以便遵循公认的编程规范。

  3. 可以测试更复杂的条件。 在到目前为止编写的代码后面添加以下代码:

    int a = 5;
    int b = 3;
    int c = 4;
    if ((a + b + c > 10) && (a == b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("And the first number is equal to the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("Or the first number is not equal to the second");
    }
    

    符号 == 测试 是否相等。 使用 == 将相等测试与赋值测试区分开来,如在 a = 5 中所见。

    && 代表 "and"。 这意味着必须同时满足这两个条件,才能在 true 分支中执行该语句。 这些示例还显示,在每个条件分支中可以有多个语句,前提是将语句括在{一起。}

  4. 可以使用 || 来表示“或”。 在到目前为止编写的代码后面添加以下代码:

    if ((a + b + c > 10) || (a == b))
    
  5. 修改abc的值,并在&&||之间切换以进行探索。 你对&&||操作符的工作原理有了更深入的了解。

  6. 你完成了第一步。 在下一部分开始之前,让我们将当前代码移到单独的方法中。 这样,开始使用新示例就更容易了。 将现有代码放入名为 ExploreIf() 的方法中。 从程序顶部调用它。 完成这些更改后,代码应如下所示:

    ExploreIf();
    
    void ExploreIf()
    {
        int a = 5;
        int b = 3;
        if (a + b > 10)
        {
            Console.WriteLine("The answer is greater than 10");
        }
        else
        {
            Console.WriteLine("The answer is not greater than 10");
        }
    
        int c = 4;
        if ((a + b + c > 10) && (a > b))
        {
            Console.WriteLine("The answer is greater than 10");
            Console.WriteLine("And the first number is greater than the second");
        }
        else
        {
            Console.WriteLine("The answer is not greater than 10");
            Console.WriteLine("Or the first number is not greater than the second");
        }
    
        if ((a + b + c > 10) || (a > b))
        {
            Console.WriteLine("The answer is greater than 10");
            Console.WriteLine("Or the first number is greater than the second");
        }
        else
        {
            Console.WriteLine("The answer is not greater than 10");
            Console.WriteLine("And the first number is not greater than the second");
        }
    }
    
  7. 注释掉调用 ExploreIf()。 在此部分工作时,这会使输出变得不那么混乱。

    //ExploreIf();
    

// C# 中启动 注释 。 注释是在源代码中需要保留但不执行为代码的任何文本。 编译器不会从注释生成任何可执行代码。

使用循环重复操作

创建大型程序的另一个重要概念是 循环。 使用循环重复想要多次执行的语句。

  1. 在调用以下 ExploreIf代码后添加此代码:

    int counter = 0;
    while (counter < 10)
    {
        Console.WriteLine($"Hello World! The counter is {counter}");
        counter++;
    }
    

    while 语句检查条件并执行以下 while语句。 它重复检查条件并执行这些语句,直到条件为假。

    在这个示例中有一个新的运算符。 ++变量counter的后面是递增运算符。 它将 counter 的值加 1 并将该值存储在 counter 变量中。

    重要

    在执行代码时,请确保 while 循环条件更改为 false。 否则,将创建一个 无限循环 ,程序永不结束。 此示例中未演示该行为,因为必须使用 CTRL-C 或其他方法强制程序退出。

    循环会在 while 前先测试条件,然后再执行后续 while 代码。

  2. ... dowhile 循环首先执行代码,然后检查条件。 以下代码中显示了do while循环:

    int counter = 0;
    do
    {
        Console.WriteLine($"Hello World! The counter is {counter}");
        counter++;
    } while (counter < 10);
    

    do 循环和前面的 while 循环生成相同的输出。

接下来,将继续介绍最后一个循环语句。

使用 for 循环

在 C# 代码中看到的另一个常见循环语句是 for 循环。

  1. 请尝试以下代码:

    for (int counter = 0; counter < 10; counter++)
    {
        Console.WriteLine($"Hello World! The counter is {counter}");
    }
    

    前面的for循环执行与您已使用的while循环和do循环相同的工作。 该 for 语句包含三个部分,用于控制其工作原理:

    • 第一部分是 初始值设定项int counter = 0; 声明为 counter 循环变量,并将其初始值设置为 0
    • 中间部分是条件counter < 10声明只要该值for小于 10,此counter循环将继续执行。
    • 最后一部分是 for迭代器counter++ 指定在执行 for 语句后的块之后如何修改循环变量。 在此示例中,它指定 counter 在代码块每次执行时递增 1。
  2. 亲自尝试这些条件。 请尝试以下每一项更改:

    • 更改初始化器以从其他值开始。
    • 更改条件以在不同的值处终止。

完成后,请转到下一部分自行编写一些代码,并使用所学内容。

本教程中有一种循环语句未被介绍:foreach 语句。 该 foreach 语句对一系列项中的每个项重复其语句。 你最常将其与 集合一起使用。 下一教程介绍了相关内容。

已创建嵌套循环

可以通过将外部循环中的每个项与内部循环中的每个项组合在一起,将另一个循环中的一个whiledofor循环嵌套到另一个循环内,以创建矩阵。 让我们生成一组字母数字对来表示行和列。

  1. 添加以下生成行的 for 循环:

    for (int row = 1; row < 11; row++)
    {
        Console.WriteLine($"The row is {row}");
    }
    
  2. 添加另一个循环以生成列:

    for (char column = 'a'; column < 'k'; column++)
    {
        Console.WriteLine($"The column is {column}");
    }
    
  3. 最后,将列循环嵌套到行循环中以形成成对:

    for (int row = 1; row < 11; row++)
    {
        for (char column = 'a'; column < 'k'; column++)
        {
            Console.WriteLine($"The cell is ({row}, {column})");
        }
    }
    

    对于内部循环的每个完整运行,外部循环递增一次。 反转行和列嵌套,自行查看变化。 完成后,将本节中的代码置于名为ExploreLoops()的方法中。

结合使用分支和循环

现在,你使用了 if C# 语言中的语句和循环构造,看看是否可以编写 C# 代码来查找 1 到 20 个整数的总和,这些整数被 3 分割。 下面是一些提示:

  • 运算符 % 提供除法运算的其余部分。
  • if 语句提供条件来查看数字是否应是总和的一部分。
  • for 循环可帮助对所有数字 1 到 20 重复一系列步骤。

自己尝试。 然后检查你的表现如何。 作为提示,你应该得到 63 作为答案。

你想到这样的东西吗?

int sum = 0;
for (int number = 1; number < 21; number++)
{
    if (number % 3 == 0)
    {
        sum = sum + number;
    }
}
Console.WriteLine($"The sum is {sum}");

已完成“分支和循环”教程。 若要详细了解这些概念,请参阅下列文章:

清理资源

GitHub 会在 30 天不活动后自动删除 Codespace。 如果打算探索本系列中的更多教程,您可以保留 Codespace 配置。 如果已准备好访问 .NET 站点 来下载 .NET SDK,则可以删除 Codespace。 若要删除 Codespace,请打开浏览器窗口并导航到 Codespaces。 应该会在窗口中看到代码空间的列表。 在学习教程代码空间的条目中选择三个点(...),然后选择 “删除”。

后续步骤