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

时间:2013-05-16 06:34:27

标签: c++ c

我在接受采访时被问到这个问题。 我回答说这是一个条件结构,因为

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

我的答案是对还是错,有更好的答案吗?

他还问我break;语句与switch-case一起工作的原因,break;仅适用于循环。 这个问题我无法回答。

3 个答案:

答案 0 :(得分:12)

在C ++中

switchselection-statement

n3376 6.4 / 1和6.4.2约为switch

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

breakjump-statement

n3376 6.6.1 / 1

break语句只能在iteration-statement或switch语句中出现并导致终止 最小的封闭迭代语句或switch语句;控制权传递给以下声明 终止的陈述,如果有的话。

答案 1 :(得分:4)

C回答

没有称为“条件构造”的正式术语。 C标准使用术语选择语句。 C语言有三种不同的选择语句:ifif-elseswitch(C11 6.8.4)。循环在迭代语句(6.8.5)的类别下排序。

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

  

C11 6.8.6.3

     

break语句只能出现在开关体或循环中   体。


所以回答面试问题:

  

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

如果您通过条件构造表示选择语句,那么是,switch是条件构造。

  

为什么打破;语句与switch-case一起工作,因为,break;仅适用于循环

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

答案 2 :(得分:0)

开关案例是一种包装指令块并说出执行(部分)的方法,从这里开始到此结束。匹配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,将调用所有指令,因为没有中断。如果没有例外(c;。

,则案例two将执行C和D.

break语句说明要停止的地方,并且意味着可以通过一些案例陈述:

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

案例one现在将执行A,B和C,但不执行D.