C/C++ 语法教程(5)——判断与循环

C/C++ 语法教程(5)——判断与循环

判断语句

if 语句

基本格式

if (condition) statement(s);//单个语句

或者

if (condition) statement(s);//单个语句
else statement(s);//单个语句

或者

if (condition)
{
    statement(s);
}
else
{
    statement(s);
}

(当然其中只有一个是语句块也是可以的)

解释

直接当英语理解即可。

特别的用法

if (a) 可以用于判断 $a \not = 0$。

if (!a) 可以用于判断 $a=0$。

if 之间可以随意嵌套。

switch 语句

基本格式

switch (expression)
{
    case constant-expression  :
       statement(s);
       break; // 可选的
    case constant-expression  :
       statement(s);
       break; // 可选的
    // 您可以有任意数量的 case 语句
    default : // 可选的
       statement(s);
}

规则跟解释

  • switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • caseconstant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。

上面讲的比较清楚,就补充几点:

  1. 枚举类型用处不多,所以前面没有讲,可以忽略。
  2. 注意 break 的含义,没有 break 的话就是可以同时满足之后的条件。
  3. 此处的 statement(s);break; 本身就是一个代码块,不需要特别的大括号,同理也可以进行 switch 的嵌套。
  4. 特别的,可以使用如下用法使得多个 case 进行同一个代码块的执行:
switch (x)
{
    case 1:
    case 2:
        cout<<x<<endl;
        break;
}

循环语句

while 语句

基本格式

while (condition)
{
    statement(s);
}

同样也可以:

while (condition) statement(s);//单个语句

解释

if 语句基本差不多,就是在 condition 为真不断执行后面的语句(块)。

一种死循环

while (1)
{
    statement(s);
}

for 语句

基本格式

for (init;condition;increment)
{
    statement(s);
}

规则跟解释

下面是 for 循环的控制流:

  1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

上面也是讲的很好,我这里通过一种 while 语句的不完全等价(原因见后)变形理解:

init;
while (condition)
{
    statement(s);
    increment;
}

除此之外,注意 init;condition;increment 三个语句均可留空。

一种死循环

for (;;)
{
    statement(s);
}

do…while 语句

基本格式

do
{
    statement(s);
}while (condition);

解释

其实跟 while 的区别就是先判断,还是先执行。

一种等价变形就是:

statement(s);
while (condition)
{
    statement(s);
}

同样也有相似的死循环方式。

循环控制语句

break 语句

除了在 switch 中使用外,break 还可以用于跳出循环。

但是注意,break 只能跳出最内层的循环。

也就是说:

while (condition1)
{
    //do something...
    while (condition2)
    {
        //do something...
        break;
    }
    //do something...
}

这里的 break 只能跳出 while (condition2) 这个循环。

continue 语句

break 语句类似的是,continue 也会跳过当前正在进行的循环,但它接下来会继续下一次循环。

对于 for 语句,continue 语句会执行 incrementcondition 的判断。

对于 whiledo...while 语句来说,continue 会执行 condition 的判断。

从这点上可以看出 forwhile 的一点区别。

goto 语句

goto label;
..
.
label: statement;

goto 的含义应该就跟你所想的基本一样。

但这个看似强大的语句实际上十分不建议使用。

不仅是因为它往往能被其他语句替代,更是因为使用它将使得程序的控制流难以追踪,可能会加大程序的难理解性。

 

点赞 1

Comments: 2

  1. Thorin Thorin说道:

    期待下一期更新QAQ

Add your comment