C/C++ 语法教程(5)——判断与循环
Contents
判断语句
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 后跟一个要比较的值和一个冒号。 case
的constant-expression
必须与switch
中的变量具有相同的数据类型,且必须是一个常量或字面量。- 当被测试的变量等于
case
中的常量时,case
后跟的语句将被执行,直到遇到break
语句为止。 - 当遇到
break
语句时,switch
终止,控制流将跳转到switch
语句后的下一行。 - 不是每一个
case
都需要包含break
。如果case
语句不包含break
,控制流将会 继续 后续的case
,直到遇到break
为止。 - 一个
switch
语句可以有一个可选的default
case
,出现在switch
的结尾。default case
可用于在上面所有case
都不为真时执行一个任务。default case
中的break
语句不是必需的。
上面讲的比较清楚,就补充几点:
- 枚举类型用处不多,所以前面没有讲,可以忽略。
- 注意
break
的含义,没有break
的话就是可以同时满足之后的条件。 - 此处的
statement(s);
跟break;
本身就是一个代码块,不需要特别的大括号,同理也可以进行switch
的嵌套。 - 特别的,可以使用如下用法使得多个
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 循环的控制流:
init
会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。- 接下来,会判断
condition
。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着for
循环的下一条语句。 - 在执行完
for
循环主体后,控制流会跳回上面的increment
语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。 - 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,
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
语句会执行 increment
跟 condition
的判断。
对于 while
和 do...while
语句来说,continue
会执行 condition
的判断。
从这点上可以看出 for
跟 while
的一点区别。
goto 语句
goto label;
..
.
label: statement;
goto
的含义应该就跟你所想的基本一样。
但这个看似强大的语句实际上十分不建议使用。
不仅是因为它往往能被其他语句替代,更是因为使用它将使得程序的控制流难以追踪,可能会加大程序的难理解性。
Comments: 2
期待下一期更新QAQ
可能要咕一段时间了。