在C语言中,条件语句和控制语句有什么区别吗?

3

我的朋友正在准备银行考试,题目如下:

What are the control statement below?

Options
1. `if` and `switch`
2. `break` and `if`
3. `if` and `while`
4. `break` and `continue`

正确答案标记为1

我相信所有选项都是正确的?

我的选择是否正确?

它们之间有什么区别吗?


请不要将C语言问题标记为C++。 - Lightness Races in Orbit
@NeilKirk:我不明白这怎么可能是语言障碍,因为这些术语在C语言中已经有了明确定义,而且是用英语表述的。如果银行将标准C术语翻译成其他语言进行考试,那就更糟糕了!不过你说得对,最终这很可能是银行的责任(请看我的回答)。 - Lightness Races in Orbit
对我来说,“以下是什么控制语句?”没有任何意义。 - Neil Kirk
@NeilKirk:是的,这就是这个SO问题的全部意义。 - Lightness Races in Orbit
6个回答

4
看起来设置考试的人发明了自己的术语。 "控制语句" 在 C 或 C++ 中都不是官方术语。 ifswitch 是 "选择语句"。 while 是 "迭代语句"(与 dofor 一起)。 breakcontinue 是 "跳转语句"(与 returngoto 一起)。

  1. "if, switch, while" 是基于条件进行工作并根据该条件进行选择的语句。
  2. "break, continue" 是控制语句,可以改变执行流程,而 "goto" 也是同样的作用,所有这些都被称为跳转语句。
  3. 对于问题1和2,我可以说答案应该是(4)-> break 和 continue。
- Vinod Patidar

3
你的朋友所面临的问题基本上是有缺陷的,因为C语言没有定义“控制语句”的概念。即使它定义了,我的直觉是它应该涵盖所有这些关键字。
因此,试图分析什么属于或不属于该范畴是愚蠢的行为。
考虑到他们期望答案#1是正确的,似乎他们指的是“选择语句”,即你所说的“条件语句”。while、break和continue显然不属于该类别。
你可以在C99(或其他版本中相应的章节)的§6.8中阅读有关各种语句的信息。
坦率地说,在被给予那样的混乱之后,我会去为另一家银行工作。

1
当然。那个提出这个问题的银行面试官们似乎来自另一个世界。 - CPlusPlus OOA and D

3
术语不正确,因为标准没有定义“控制语句”的术语,但既然指定了1作为正确答案,那么他们应该说的是“选择语句”。 C99 draft standard定义了以下一组语句,涵盖了你问题中列出的那些语句,“选择语句”包括第6.8.4节“选择语句”中的ifswitch
selection-statement:
  if ( expression ) statement
  if ( expression ) statement else statement
  switch ( expression ) statement

breakcontinue是跳转语句,位于第6.8.6跳转语句中:

jump-statement:
  goto identifier ;
  continue ;
  break ;
  return expressionopt ;

while 是一个迭代语句,其定义在 迭代语句 章节的 6.8.5 小节中。

 iteration-statement:
   while ( expression ) statement
   [...]

C语言标准没有定义条件语句,但它在选择和迭代语句中使用术语控制表达式,这并不使它们成为控制语句 - chqrlie

0

你的问题中不同“语句类型”的定义似乎有些问题。实际上,我必须从问题中估计它们,而不能根据“控制”和“条件”语句的确切含义理解你的问题。

不,控制语句是改变程序执行流程的语句。

条件语句是基于某个条件来执行这种操作的语句。

我认为正确答案应该是(4)。


1
关于您提供的“控制语句”定义,请提供引用资料。 - Lightness Races in Orbit
@LightnessRacesinOrbit 您是对的,我让我的回答更清晰了。 - peterh

0
根据Java文档,控制流语句分为两种类型:
  • 条件语句(if/else;switch);
  • 循环语句(for;do-while;while);
  • 分支语句(在循环或条件语句内部嵌套使用的条件语句或循环语句)
虽然这两种控制流语句都涉及条件,但执行过程不同。 每种类型都用于特定的程序例程。

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html

更新:

C语言在处理语句时采用了另一种方法https://learn.microsoft.com/en-us/cpp/c-language/statements-c?view=vs-2019

我发现将Java的知识与C结合起来理解很容易,或许楼主也会这样认为。


有趣的是:C标准和Microsoft C文档都没有使用“控制语句”这个术语。 - chqrlie

0

控制语句是一种会重复执行直到循环结束的语句。重复执行意味着一旦语句块执行完毕,它将返回循环以检查条件。

例如:

for(i=0;i<=5;i++)
{
  COUT<<"THIS IS CONTROL STATEMENT";
}

条件语句是一次性执行的语句,不像for循环那样重复执行。在执行后,它不会再次检查循环条件。

例如:

 int i = 5;
 if(i==5)
 {
   COUT<<"THIS IS CONDITIONAL STATEMENT";
 }

if、if...else、switch 是条件语句,而 for、while、do...while 则是控制语句。


C标准既不定义也不使用“条件语句”或“控制语句”这些术语,因此该问题无效。其他规范指定其他语言使用这些术语来表示选择、迭代和有时跳转语句。根据您对“控制语句”的定义以及C++中提供的示例,该问题中没有一个答案是正确的。 - chqrlie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接