分支结构的介绍

if 语句

if

1.if语句的形式:

if ( 表达式 )
执行语句

表达式成立(为真)执行,表达式不成立(为假)不执行。

2.在c语言中,0为假,非0为真,也就是如果表达式的结果为0不执行,不为0执行。

else

1.else 是经常与if 搭配使用的 组成if else语句
语句的形式如下:

if(表达式)
执行语句1
else
执行语句2

嵌套if

1.在if else语句中,else可以与另外一个if语句连用,构成多重判断
比如:

int main()
{
	int num = 0;
	scanf ("%d", &num);
	if (num == 0)
		printf("输入的数字是0\n");
	else if (num > 0)//这里的if相当于嵌套在else语句中,构成了嵌套结构
		printf("输入的数字是正数\n");
	else
	printf("输入的数字是负数\n");
	return 0;
}

再如:

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
	{
		if (num % 2 == 1)
			printf("奇数");
		else
			printf("偶数");
	}//这个大括号也是嵌套在if语句中,构成了嵌套的if语句
	else
	{
		printf("不是正数");
	}
		return 0;
}

所以嵌套结构既可以在if语句用,也可以在else语句中

注意事项

分支中包含多条语句:
①在if和else语句中默认都只能控制一条语句,例如:
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd12109993414f8a9c66ec9a4432b826.png)

在这里插入图片描述
上面的代码你会发现,无论你输入的值>=18还是<18,“可以谈恋爱了”这句话都会被打印下来

这是因为if语句只控制一条语句,就是

printf(“成年了\n”);

if语句为真则打印这句话,如果为假则不会打印这句话。但是对于

printf(“可以按恋爱了”);

是独立存在的语句,不受if是真是假的影响,都会执行。

所以,如果想要if语句控制两条以上的语句,则就要使用**{}**将代码括起来,else后面也可以加大括号。

悬空else问题

如果有多个if和else,总是记住这样一条规律:else总是跟最近的if匹配
下面看到这样的代码:

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 2;
 if(a == 1)
    if(b == 2)
    	 printf("hehe\n");
 else
    printf("haha\n");
 return 0;
}

这串代码的结果是:
在这里插入图片描述
这是为什么呢?这就是悬空else问题。
原因就是刚刚说过的那条规则,else与最近的if配对。
上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if
语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if
进⾏匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不
成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。
如果代码改成下⾯这样就更加容易理解了:

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 2;
 if(a == 1)
 {
 	if(b == 2)
		 printf("hehe\n");
 	else
		 printf("haha\n");
 }
 return 0;
}

或者我们希望else确实与第一个if配对:

#include <stdio.h>
int main()
{
 	int a = 0;
 	int b = 2;
 	if(a == 1)
 	{
 	if(b == 2)
 		printf("hehe\n");
 	}
 	else
	{
 	printf("haha\n");
 	}
 	return 0;
}

如果想要if与else是按自己的想法匹配,需要添加适当的大括号,大括号能使代码的逻辑更加清晰。
所以,在写代码的时候要注意括号的使用,让可读性增加。

switch 语句

基本概念

  1. Switch语句是c语言中另外一种用来实现分支结构的语句,是一种特殊形式的 if…else结构,用来判断条件有多个结果的情况。简而言之。就是把多重的else if 变得更易用,更可读和清晰。

  2. Switch语句的格式:

switch(expression)
{
case value1: statement
case value2: statement
default: statement
}

表达式(expression)不同的值,执行相应的case分支。如果没有对应,则会执行default语句。

  1. 注意事项:
    ①switch后的expression必须是整型表达式
    ②case后的值,必须是整型常量表达式
    ③case和后边的数字之间必须有空格

switch语句中的break

看到下面一串代码:
在这里插入图片描述
我们发现8除以3的余数为2,但是我们发现程序运行的结果多了一行“余数是0”的打印

原因是什么呢?

原因是switch语句也是分支效果的,只有在switch语句中使用break才能跳出switch语句,如果一个case语句执行了,且后面没有break,代码会继续执行下去,所以有可能执行到其他的case语句中的代码,直到遇到break或者switch语句全部结束。

所以break在switch语句中是非常重要的一部分,能够帮助实现真正的分支。

因此,每一个case语句的代码执行完后,需要加上break,才能跳出switch语句

那么我们完善这个代码:
在这里插入图片描述

switch语句中也可以有几种case输出的内容一样,例如:在这里插入图片描述

default

在使用switch语句的时候,可能会碰到表达式中的值无法匹配到代码中case语句,这个时候要不不做处理,要不就得在switch中加人default语句。
总而言之,如果输入的值不能匹配到case语句中的一个,则会执行default语句

注意事项

default和case的顺序问题

switch语句中case和default是没有顺序要求的,只要你的顺序是满足实际情况的就行。
不过,我们通常会把default语句放在最后面处理。

if语句和switch语句的对比

  1. switch语句将各个情况更加直观的表示出来,便于阅读,但是case后面的形式是整型常量,无语输入关系表达式,局限性大;

  2. if语句虽然形式上没有switch那样简洁明了,甚至如果不合理使用大括号,语句会显得很混乱,不知道执行的顺序,但是他支持的形式不止整型常量,还支持其他多种形式(关系表达式,浮点型等),使用的范围更大更广。

所以,两者都有各自的优势,要具体问题,具体分析,合理选择使用哪种分支语句。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值