跳转到内容

编程基础/案例控制结构

来自维基教科书,开放的书籍,开放的世界

案例或 switch 语句是一种选择控制机制,用于允许变量或表达式的值通过多路分支来改变程序执行的控制流程。[1]

双向选择的一个缺点是我们只能考虑两种选择。但是,如果您有超过两种选择,该怎么办?考虑以下具有四种选择的情况

if age equal to 18
    you can vote
else if age equal to 39
    you're middle-aged
else if age equal to 65
    consider retirement
else
    age is unimportant

您会根据年龄的值获得相应的提示。最后一个项目被称为默认值。如果年龄不等于 18、39 或 65,您将收到默认提示。在某些情况下,没有默认操作。考虑以下流程图示例

此流程图是案例控制结构的流程图,用于多路选择。决策框包含变量年龄。案例的逻辑是相等逻辑,其中变量年龄中的值按从左到右的顺序与列出的值进行比较。因此,存储在年龄中的值将与 18 进行比较,或者“年龄等于 18”。如果为真,则逻辑向下流动穿过操作,并在案例结构的底部退出。如果测试表达式的值为假,则它将移至下一个列出的值,并进行另一个比较。它的工作原理与嵌套的 if then else 结构完全相同。

实现多路选择代码

[编辑 | 编辑源代码]

Python 不支持案例控制结构。但使用与上面相同的示例,以下是 C++ / C# / Java / JavaScript / Swift 代码,用于实现案例控制结构。

switch (age)
{
    case 18:
        message = "You can vote.";
        break;
    case 39:
        message = "You're middle-aged.";
        break;
    case 65:
        message = "Consider retirement.";
        break;
    default:
        message = "Age is unimportant.";
        break;
}

变量 age 中的值使用相等比较与第一个“case”进行比较,即值为 18(也称为列出的值),或者“年龄等于 18”。如果为真,则消息将被赋值为“您可以投票”,并且下一行代码(break)将完成(这将使我们跳到控制结构的末尾)。如果为假,它将继续执行下一个 case 进行比较。

许多编程语言要求案例控制结构的列出值属于整数数据类型家族。这基本上意味着整数或字符数据类型。考虑此使用字符数据类型的示例(choice 是一个字符变量)

switch (choice)
{
    case 'A':
        message = "You are an A student.";
        break;
    case 'B':
        message = "You are a B student.";
        break;
    case 'C':
        message = "You are a C student.";
        break;
    default:
        message = "Maybe you should study harder.";
        break;
}

案例控制结构的局限性

[编辑 | 编辑源代码]

大多数编程语言不允许对类似 case 的结构使用值范围。考虑此使用范围的流程图示例

另请考虑以下使用相同逻辑的伪代码

Case of age
  0 to 17    Display "You can't vote."
  18 to 64   Display "You’re in your working years."
  65 +       Display "You should be retired."
End

在使用非整数家族或值范围时使用案例控制结构在设计程序时以及使用伪代码或流程图记录该设计时是允许的。但是,大多数语言中的实现将遵循使用复杂布尔表达式的嵌套 if then else 方法。上述示例的逻辑将如下所示

if age > 0 and age <= to 17
    display You can’t vote.
else if age is >= 18 and age <= 64
    display You’re in your working years.
else
    display You should be retired.

良好的结构化编程方法

[编辑 | 编辑源代码]

大多数教科书作者都确认,良好的结构化编程技术和习惯比关注您正在使用的语言的技术可能性和功能更重要,以学习编程技能。请记住,本模块专注于编程基础和概念,以建立我们的初始编程技能。它并非旨在详细介绍编程语言,尽管有时我们必须涵盖语言机制。

关键术语

[编辑 | 编辑源代码]
case
执行多路选择的控制结构。
switch
可以设置为充当案例控制结构的控制结构。

参考文献

[编辑 | 编辑源代码]
华夏公益教科书