文章目录
1 选择语句
1.1 选择语句语法图
1.2 选择语句的特点
通过语法图,可以看到选择语句分为2种:if语句、switch语句。选择语句中的表达式,我们又称之为控制表达式。因为,选择语句的执行效果是由它的值来决定的。
每个选择语句及其子语句各自形成一个块。
2 if选择语句
2.1 if语句的执行效果
控制表达式的值 != 0 : 执行第1个子语句,然后跳转到if语句的后面,继续向下执行。
int main (void)
{
int a = 0;
if(3) a = a + 100; else a = a + 100;
a = a + 100;
}
控制表达式的值 = 0:
- 没有else分支:跳转到if语句的后面,继续向下执行。
int main (void)
{
int a = 0;
if(0)
a = a + 100; //为了使程序更加易读,子语句一般放至下一行并缩进
a = a + 100;
}
- 有else分支:执行第2个子语句,然后跳转到if语句的后面,继续向下执行。
int main (void)
{
int a = 0;
if(0)
a = a + 100;
else
a = a + 50;
}
2.2 子语句一般使用复合语句
子语句使用复合语句的原因:
- 程序更加易读。
- 避免了子语句是一条语句的尴尬。
int main (void)
{
int a = 0;
if(0)
{
a = a + 100;
a = a + 100;
}
else
{
a = a + 50;
a = a - 50;
}
}
2.3 else if语句的出处
当if语句中子语句也是if语句(if语句的嵌套)时:
int main (void)
{
if(0)
{
a = a + 100;
a = a - 100;
}
else
{
if(0)
{
a = a + 100;
a = a - 100;
}
}
}
此时由于嵌套的if也是语句,我们可以把它变成如下的形式:
int main (void)
{
if(0)
{
a = a + 100;
a = a - 100;
}
else
if(0)
{
a = a + 100;
a = a - 100;
}
}
然后整理一下格式,就得到else if:
int main (void)
{
if(0)
{
a = a + 100;
a = a - 100;
}
else if(0)
{
a = a + 100;
a = a - 100;
}
}
2.4 if语句的多重嵌套
else分支与离它最近的if是配对的。
int main (void)
{
if(0)
{
a = a + 100;
a = a - 100;
}
else if(0)
{
a = a + 100;
a = a - 100;
}
else if(0)
{
a = a + 100;
a = a - 100;
}
else
{
a = a + 100;
a = a - 100;
}
}
2.5 if语句中零值比较的注意点
if语句中零值比较有如下几点需要注意:
- bool型变量应该直接出现于条件中,不要进行比较。
- 变量和0值比较时,0值应该出现在比较符号左边。
- float型变量不能直接进行0值比较,需要定义精度。
3 switch语句
3.1 case标号语句
case 常量表达式 : 语句;
// 只有前两句是case标号语句
case 20 :
a = a + 20;
a = a + 20;
3.2 default标号语句
default : 语句;
// 只有前两句是default标号语句
default :
a = a + 100;
a = a + 100;
3.3 break跳转语句
break;
3.4 switch语句
switch语句的常用用法及其执行效果:
- 控制表达式的值 = 某个(case)标号语句的表达式的值,跳转到该(case)标号语句处执行,然后继续向下执行。
int main (void)
{
int a = 20;
switch(a+20)
{
case 20 :
a = a + 20;
case 40 :
a = a + 40;
case 60 :
a = a + 60;
default :
a = a + 100;
}
a = a + 200;
}
- 控制表达式的值 != 所有(case)标号语句中表达式的值:
- 没有(default)标号语句,跳转到switch语句的后面,继续向下执行。
- 有(default)标号语句,跳转到该(default)标号语句处开始执行,然后继续向下执行。
int main (void)
{
int a = 20;
switch(a+20)
{
case 20 :
a = a + 20;
default :
a = a + 100;
case 40 :
a = a + 40;
case 60 :
a = a + 60;
}
a = a + 200;
}
- 在switch语句中,(break)跳转语句的执行效果,跳转到switch语句的后面,继续向下执行。
int main (void)
{
int a = 20;
switch(a+20)
{
case 20 :
a = a + 20;
break;
case 40 :
a = a + 40;
break;
case 60 :
a = a + 60;
break;
default :
a = a + 100;
}
a = a + 200;
}
switch语句的细节:
- 控制表达式的值必须是整数类型(整型或者字符型)。
- (case)标号语句中的表达式,必须是整型常量表达式。
- 不允许2个及其以上的(case)标号语句的表达式的值相等。
- (case)标号语句和(default)标号语句只能出现在switch语句中。
- (case)标号语句和(default)标号语句在switch语句中的出现顺序没有要求:
- 标号语句本身并不会影响代码的执行效果。
- 它仅仅用于标识一个跳转目标。
- 只能有一个(default)标号语句(default语句有必要加上,以处理特殊情况,并且只用来处理真正的默认情况)。
- case语句的排列顺序尽量遵守如下规则:
- 按字母或数字顺序排列各条语句。
- 正常情况放在前面,异常情况放在后面。
if语句和switch语句的对比:
- if语句和switch语句在功能上可以相互替换。
- if语句适用于复杂逻辑进行判断的情形中,if语句对于按片分支判断的情形更加简洁。
- switch语句适用于对离散值进行判断的情形中,switch语句对于多分支判断的情形更加简洁。
参考资料: