所谓分支,就是在不同情况下输出不同结果。下面我们来学习分支语句:
1. if 语句
1.1 if
if语句的书写方法如下:
if (表达式)
语句
如果表达式值为真,那么我们就执行语句,若表达式值不为真(为假),就不执行。在C语言中,我们说 非0 为真,0 为假。我们举一个判断奇偶数的例子:
我们可以看到,当输入 3 时,因为 3 是奇数,所以 if 中的表达式值为真,所以执行 if 下面的语句,当输入 6 时,因为 6%2 != 1 if中表达式的值为假,所以不执行 printf() ;
如果我们想输出 6 是偶数呢?这就要用到 else。
1.2 else
我们可以用 if...else... 来完成这个代码,if...else... 的形式如下
if (表达式)
语句1
else
语句2
让我们完成判断奇偶数的完整代码:
当我们加上 else 后,如果输入 6,首先从 if 开始执行,6%2==1 的值为假,则跳过 if 下面的语句,从 else 执行,则输出”6是偶数“。
1.3 分支中包含多条语句
C语言中默认 if...else... 只能控制一条语句,但如果我们想控制多条语句呢?这时我们就需要用大括号括起来,if 和 else 后面都可跟上大括号 {}。
上大学一般都满足十八岁,我们假设满足十八岁的人都上了大学,小于18岁的人没有上大学,如果在输入年龄后我们既要判断他有没有成年,也要判断他有没有上大学,代码该怎么写呢?如图:
在加了一个 {} 后我们就可以在判断后执行多条语句。
1.4 关于嵌套
在 if...else... 语句中,else 可以和另一个 if 连用,构成多重判断。例如我们要判断一个数是正数、0、负数,我们可以写如下代码
其中上图中蓝色背景的代码就是嵌套在前⾯的 else ⼦句中的,构成了嵌套的if语句。
注意:如果有多个 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 匹配,因为 a=0,第一个表达式的值为假,所以不会继续执行。什么也不输出。
2.关系操作符
C语⾔⽤于⽐较的表达式,称为“关系表达式”,⾥⾯使⽤的运算符就称 为“关系运算符”,主要有下⾯6个:
> :大于运算符;
< :小于运算符;
>= :大于等于运算符;
<= :小于等于运算符;
== :等于运算符;
!= :不等于运算符。
注意:== 和 = ,是不一样的,= 是赋值运算符(比如 a=3 就是将3赋给a)( a == 3 是判断 a 与 3 是否相等)
而且关系操作符尽量不要连用,比如尽量写成(a>b && a<c) 而不是(b<a<c)。(&&后面逻辑操作符会介绍)
3.条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,其形式如下:
exp1 ? exp2 : exp3
它的意思是:如果 exp1 为真,那么计算 exp2;如果 exp1 为假,则计算 exp3;当我们要输出两个数中大的那个数时,我们看看以前的代码和用上此操作符的代码:
我们可以发现代码量明显减少了。
4. 逻辑操作符 &&,||,!
!:逻辑取反运算符(改变单个表达式的真假);
&&:逻辑与运算符,就是并且的意思.。当 && 两边表达式都为真时,该整体才值为真;
||:逻辑或运算符,就是或者的意思。当 || 两边表达式都为假时,该整体值才为假;
一个小练习
让我们写一个判断闰年的代码。我们知道被4整除而不被100整除或者能直接被400整除的年份就是闰年。让我们用逻辑操作符来实现这个代码:
我们其实可以用 || 将两个条件连在一块,如下:
#include <stdio.h>
int main()
{
int year;
scanf("%d", &year);
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
printf("%d是闰年", year);
}
return 0;
}
关于逻辑操作符的短路问题
我们要知道,计算机在执行逻辑运算时,是从左到右计算的,计算机会先算出左侧的真假后再算操作符右侧的真假。但是如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。如下举例:
如图大家可能认为a,b,c,d 分别是1,3,3,5,但结果并不是这样。首先 a++ 是对 a 使用后 +1 ,所以 a 的值一定为 1 ,但是 a 传入该表达式的值为 0 ,因此 i = 0 && ++b && ++c ;0已经使得第一个 && 左侧的值为假,后面不管是什么该表达式也一定为假。因此计算机在计算完 a++ 后就直接结束计算跳到下一个语句,因此输出的 a,b,c,d 应为 1,2,3,4 。那我如果把 && 改成 ||呢,大家可以思考一下(答案是 1,3,3,4)。
5. switch 语句
除了 if 语句外,C语言还提供了 switch 语句来实现分支结构。witch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。其形式如下:
switch (expression) {
case value1: statement
case value2: statement
...
default: statement
}
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分支,如果找不到对应的值,就执⾏ default 分⽀。注意: expression 必须是整型表达式 ;case 后的值必须是整形常量表达式。
5.1 if 和 switch 的比较
我们再以判断奇偶数为例,其 switch 代码如下:
上述的代码中,我们要注意的点有:
1. case 和后边的数字之间必须有空格;
2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。不然会继续执行下面的语句。
5.2 braek 的说明
如果我们没有 braek 时,会发生什么呢?我们来看下图:
因此在进入符合条件的 case 时,会一直执行,知道执行完 switch 或遇到 break 时才能跳出switch 语句。
5.3 default的说明
如果我们在 switch 语句中没有找到符合条件的 case 语句怎么办呢?这时候我们就会用到 default 语句,我们以工作日和休息日来举例,如下图:
当输入8时,我们在 case 中每日找到复合的条件,就会执行 default 语句
注意 :switch 语句中的 case 和 default 语句是没有顺序要求的。default 可以放在前面和后面。
相信看到这,你对分支语句有了深刻的了解。
标签:语句,...,else,运算符,case,详解,C语言,表达式 From: https://blog.csdn.net/2402_87092155/article/details/145238627