条件判断
在 C 语言中有两种条件判断语句,if 语句
和 switch 语句
,if 语句
实现的是双分支
的选择结构,swicth 语句
实现的是多分支
的选择结构。
if 语句
if 语句是一个双分支选择结构,通过条件表达式的结果
判断程序是执行 if 语句模块还是 else 语句模块。
一般形式
if (表达式)语句1
[else 语句2]
- 这里的
表达式
可以是关系表达式、逻辑表达式或者数值表达式。 - 上面的方括号中的
else 和 语句2
为可选内容,可以有也可以没有。
- 语句 1 和语句 2 可以是一个简单语句、复合语句或者是另一个 if 语句,即在此 if 语句中包含另一个 if 语句。
常见形式
一般形式
1
2
3
4
5
6int age = 23;
if (age >= 18){
printf("年龄为%d 岁,可以考取驾照。",%d);
} else {
printf("年龄不满18岁,不可以考取驾照。")
}
这就是一个简单的 if…else 语句,通过判断年龄是否大于等于18岁,来判断能否考取驾照。
省略 else 部分
1 | int age = 23; |
我们可以只写 if 模块,省略掉 else 部分。
if 语句的多行条件判断
我们可以通过多个 if...else...
组合的形式,来进行更加详细的判断。
1 | int age = 23; |
我们通过对年龄的多次判断,判断出了当前年龄是成年人、儿童或者是婴儿。
当然了,我们也可以直接在 else 里面包含一个新的 if 语句。
1 | int age = 23; |
这样把 if 语句包含在 else 中虽然合法,但是影响可读性
,所以我们建议把 if 语句的多行判断,用 else if 来写。
简写
在 C 语言中,整个 if 语句也可以写成1行。
1 | if (x>0) y=1; else y=-1; |
注意
上面的 if 和 else 中间为什么有分号呢?
因为这个不是 if 和 else 的分号,而是 y=1这个语句结束的分号。
几种逻辑变量和表达式
关系运算符和关系表达式
关系运算符
在 C 语言中,比较符号称为关系运算符
,可以将关系运算理解为比较运算。
例如:>
、<
、==
、>=
等等
关系表达式
在 C 语言中,用关系运算符将两个数值
或者数值表达式
连起来的式子,称为关系表达式。
例如:a>b
0<1
逻辑运算符
逻辑运算符
共有三种逻辑运算符:
与(AND)、或(OR)、非(NOT)
在 C 语言中,这些逻辑运算符表示为
与(AND):&&
例子:A && B
解释:如果 A 和 B 同时成立,则成立,有一个不成立,则该式子都不成立。
或(OR):||
例子:A || B
解释:如果 A 和 B 其中有一个成立、或者都成立,则该式子成立,如果都不成立,则该式子不成立。
非(NOT):!
例子:! A
解释:取反, 如果 A 成立,则非 A
就是不成立,反之亦然。
逻辑表达式
逻辑表达式的值应该是一个逻辑量,即真或假
,我们将 0 看做假,1 看做真。
常见逻辑表达式
a=4,!a 逻辑值等于假,因为所有非0数都是真,取反为假。
a=4,b=5,a&&b 逻辑值等于假,因为4和5都是假,假假为假。
a=4,b=5,a||b 逻辑值等于假,因为4和5都是假,没有真。
a=4,b=5,!a||b 逻辑值为真,因为非!级别最高,!a 为真,有一真,式子为真。
符号权限
!非为最高
算术运算符
关系运算符
先&&后||
赋值运算符
例题1:
1 | 5>3 && 8<4-!0 |
这个题非常经典
最高权限的是!0,!0等于1
然后就是算术运算符,4-1,等于3
然后是关系运算符,5>3为真,8<3为假
最后是逻辑逻辑运算符,真 AND 假,为假,因为其一为假都为假。
注意
实际上,所有的逻辑运算符两侧的运算对象,不但可以是0和1
,也可以是字符型、浮点型、枚举型或指针型的纯量数据
,系统最终以0或者非0
来判断他们的真假。
例题2:
1 |
|
我们看到,一开始 m 和 n 都为1,经过逻辑表达式的转换,两个关系表达式中间用&&
相连接,先算左边,>号的权限大于=号
,所以我们先算关系表达式,a>b 结果是假,值为0,所以 m 为1,此时&&
左边为1,所以&&
不可能成立,所以&&
右边的关系表达式没有运算,所以结果出来之后,n=1没有变化。
逻辑型变量
逻辑型变量是存储逻辑运算和关系运算结果的一种逻辑变量。
一般形式
_Bool 变量名;
使用
1 |
|
因为在文件开头引入了stdbool.h
文件,所以我们的逻辑性变量值从0和1变成了 true 和 false ,这是从 C++ 引入的特性,这样增加了文件的可读性。
条件运算符和条件表达式
有一种 if 语句,当判断为真或假时,都执行一个赋值语句,并且想同一个变量赋值。
定义
1 | int result; |
显然这么写太啰嗦了,所以条件运算符
和条件表达式
,应运而生。上面的语句可以改写成一句话。
1 | result = (a>b) ? a:b; |
在 result 的右侧,是条件表达式
,里面的 ?是条件运算符
。这句代码的意思是,如果条件为真,则返回 a,result = a ,如果条件为假,那么返回 b,result=b。
注意
1.条件运算符由两个符号组成,(?和:)必须一起使用。
2.要求有三个操作对象,C 语言中唯一的三目运算符。
一般形式
表达式 1 ? 表达式 2 :表达式 3
即先计算表达式1的值,如果为真,就执行表达式2,如果为假则跳过表达式2,执行表达式3。
条件运算符的优先级
条件运算符的优先级
赋值运算符 < 条件运算符
< 关系运算符 < 算术运算符
例题
1 | a>b ? a : b+1; |
可以把上式转换为a>b ? a : (b+1);
因为算术运算符最大,所以先计算 b+1,然后计算 a>b,如果是假的,那么返回的值是 b+1,不是 b。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。