C语言分支语句
我们知道,分支语句是编程中的一种重要控制结构,它允许程序根据条件的不同执行不同的代码块。在大多数编程语言中,分支语句主要包括
if
语句、
switch
语句以及与它们相关的控制流程语句,如
break
、
continue
和
return
等。
下面我来介绍C语言中的分支语句:
一、if语句
if语句是最基本的分支语句,它根据条件的真假执行不同的代码块。
if语句的语法如下:
1. if (表达式)
2. 语句
表达式成立(为真),则执行语句,表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
\
下面给出一个例子:输入一个整数,判断其是否为奇数
二、if…else语句
1.else
就上面那个例子而言,如果一个数不是奇数,那么它就一定是一个偶数,这时候想要输出它是偶数时就需要有另一个选择(分支),这个时候就要用到else了,这时候就组成了if…else语句:
2.if else
if else 语句中,else 可以与另⼀个if 语句连⽤,构成多重判断,也叫作嵌套if。
例如:判断一个数是0、正数还是负数。
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
printf("输入的数字是0");
else if (num > 0)
printf("输入的数字是正数");
else
printf("输入的数字是负数");
return 0;
}
上面“else if”的代码中的“if”就是嵌套在前⾯的else 子句中的,构成了嵌套的if语句。
\
再比如:输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num > 0)
{
if (num % 2 == 0)
printf("是偶数\n");
else
printf("是奇数\n");
}
else
printf("不是正数\n");
return 0;
}
上面的代码中第一个if语句里的代码也是嵌套在if 语句中的,构成了嵌套的if语句。
以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
3.悬空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;
}
这个程序运行的结果是什么呢?
我相信很多初学者认为输出结果是“haha”,其实程序什么也不输出。这又是为什么呢?
这就是悬空else的问题,如果有多个的if匹配,可以记住这样⼀条规则:else 总是跟最接近的if相匹配。
上面代码的排版,让else与第一个 if 语句对齐,会让我们以为 else 是和第一个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;
}
如果代码改成这样就更加容易理解了。
三、switch语句
switch 是“开关”的意思,它也是一种“选择”语句,但它的用法非常简单。switch 是多分支选择语句。说得通俗点,多分支就是多个 if。
从功能上说,switch 语句和 if 语句完全可以相互取代。但从编程的角度,它们又各有各的特点,所以至今为止也不能说谁可以完全取代谁。
当嵌套的 if 比较少时(三个以内),用 if 编写程序会比较简洁。但是当选择的分支比较多时,嵌套的 if 语句层数就会很多,导致程序冗长,可读性下降。因此C语言提供 switch 语句来处理多分支选择。所以 if 和 switch 可以说是分工明确的。在很多大型的项目中,多分支选择的情况经常会遇到,所以 switch 语句用得还是比较多的。
switch语句的一般表示形式如下:
switch语句的使用说明:
- switch后面()里的表达式必须是整型表达式。也就是说可以是 int 型变量、char 型变量,也可以直接是整数或字符常量,哪怕是负数都可以。
- case 后的值,必须是整形常量表达式。
- switch 下的 case 和 default 必须用一对大括号{}括起来。
- switch语句必须含有default,当程序执行时没有执行到所属的语句,就会执行default这条语句。
- default在switch语句的位置不是固定的,可写在任意位置。
switch语句中的break:
用以下一个例子来说明break的作用:
输入任意一个整数值,计算除3之后的余数:
需要注意的是:
- case及后面的数字之间要有空格
- 每⼀个case 语句中的代码执行完成后,需要加上break才能跳出这个switch语句
上面的代码中,如果我们去掉case语句中的break,会出现什么情况呢?
我们来运行一下程序
这里我们可以看出,7除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印。
这是为什么呢?
原因是switch 语句也是分支效果的,只有在switch语句中使用break才能跳出switch语句,如果某⼀个case 语句的后边没有遇到break,代码会继续执行下去,有可能执行其他case语句中的代码,知道遇到break或者直到执行完整个switch语句。
所以switch语句中的break就显得尤为重要了,能实现真正的分支效果。
当然,break 也不是每个case 语句都得有,这就得根据实际情况来看了。
好了!这次的分享就到这了,感谢你的阅读,咱们下一篇博客再见!