选择语句

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:

  1. 没有else分支:跳转到if语句的后面,继续向下执行。
int main (void)
{
	int a = 0;
	
	if(0) 
		a = a + 100;   //为了使程序更加易读,子语句一般放至下一行并缩进
	
	a = a + 100;
}
  1. 有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语句的常用用法及其执行效果:

  1. 控制表达式的值 = 某个(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; 
}
  1. 控制表达式的值 != 所有(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; 
}
  1. 在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语句对于多分支判断的情形更加简洁。

参考资料:

  1. 深度学习:C/C++、计算机体系
  2. C语言进阶剖析教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值