switch case是循环还是条件结构?



我在一次面试中被问到这个问题。我回答说这是一个条件构式,因为

  • 它执行一次,不像循环有能力执行多次。
  • 没有循环控制机制,只有基于不同情况的条件切换。

那么我的答案是对还是错,有没有更好的答案?

他还问我为什么break;语句在开关情况下工作,因为break;只在循环中工作。这个问题我答不上来。

c++中

switchselection-statement

n3376 6.4/1和6.4.2是关于switch

selection-statement:
...
switch ( condition ) statement

breakjump-statement

n3376 6.6.1/1

break语句只能出现在迭代语句或switch语句中,并导致终止最小的封闭迭代语句或switch语句;控制传递给后面的语句

C答案

没有一个正式的术语叫做"条件构式"。C标准使用术语选择语句。C语言有三种不同的选择语句:if, if-elseswitch (C11 6.8.4)。循环在迭代语句类别下排序(6.8.5)。

break语句是一个跳转语句,就像goto一样。它对允许出现的位置有一些限制:

C11 6.8.6.3

break语句只能作为开关体或循环出现身体。

那么回答面试问题:

switch case是循环还是条件结构?

如果你说的条件构式是指一个选择语句,那么是的,switch是一个条件构式。

为什么打破;语句使用switch-case since, break;仅适用于循环

不,这个问题是不正确的,它不仅适用于循环。它适用于switch 循环。这是因为C语言是这样定义的(6.8.6.3)。

切换用例是一种包装指令块并表示执行(其中一部分)它的方法,从这里开始,在这里结束。匹配的case标记开始,后面的break标记结束。

块可以是一些指令:

{
     instruction_A;
     instruction_B;
     instruction_C;
     instruction_D;
}

case语句表示根据switch的值动态地从哪里开始:

switch(value)
{
case one:
     instruction_A;
     instruction_B;
case two:
     instruction_C;
case three:
     instruction_D;
}

one的情况下,所有的指令都将被调用,因为没有break。Case two将执行C和D,如果没有异常(C;.

)

break语句说明在哪里停止,这意味着可能会通过一些case语句:

switch(value)
{
case one:
     instruction_A;
     instruction_B;
case two:
     instruction_C;
     break;
case three:
     instruction_D;
}

Case one现在将执行A、B和C,但不执行d。

最新更新