你学习C语言的时候,你是否真的了解过三大语句到底是什么吗?就算知道,你能很快回答以下问题吗?今天就由我来为大家拨开心中的疑惑,来见识一下今天的问题吧。
🎈问题 1 : 什么是语句?
🎈问题 2 : 逻辑与或非到底怎样判断?
🎈问题 3 : 条件判断是怎样进行判断的?
🎈问题 4 : 条件判断应该如何书写?
Q1 什么是语句?
C语言中语句可以分为:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
而本次我们所主要认识的就是控制语句,控制语句用于控制语句的执行流程,它们由特定的语句定义符组成,C语言有9种控制语句。
大致可以分为以下三类:
- 条件判断语句:if 语句、switch 语句;
- 循环语句:do while 语句、while 语句、for 语句;
- 转向语句:break 语句、goto 语句、continue 语句、 return 语句。
Q2 逻辑 与或非 到底怎样判断?
在了解这个问题之前,我们首先要了解什么是逻辑 或非
- 逻辑与
&&
- 逻辑或
||
- 逻辑非
!
1 . 逻辑与
在使用 逻辑或 的时候会发生 短路 现象
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
int c = 3;
a = b++ && a++ && ++c;
printf("%d %d %d", a, b, c);
return 0;
}
在上面的运算中,结果是什么呢?
我们可以看到, b = 3, a 与 c 的值并没有变,其实在程序读取到 a 的时候,由于 a 是 后置 ++
(先使用,再自加),所以首先接收到的值为 0 ,判断为假,返回 0 赋值给 a ,而 c 由于短路,并没有计算到。
2 . 逻辑或
在使用逻辑与 的时候也会有 短路 现象发生
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
int c = 3;
a = b++ || ++c;
printf("%d %d %d", a, b, c);
return 0;
}
大家可以猜猜结果是什么?
我们可以看到,b = 3, 而 c 却没有变,是因为这其中遇到了短路现象,而 a = 1 , 是因为结果为真默认返回1。
看到这里,我们是否可以总结一些规律
遇真则真(逻辑或
||
)遇假则假(逻辑与
&&
)
3 . 逻辑非
逻辑非就是将原来的结果转换,真变假,假变真;符号为
!
Q3 条件判断是怎样进行判断的?
我们在进行判断的时候,主要会涉及到以下操作符
运算符 | 名称或含义 | 使用形式 | 结合方向 |
---|---|---|---|
> | 大于 | 表达式1 > 表达式2 | 左到右 |
>= | 大于等于 | 表达式1 >= 表达式2 | 左到右 |
< | 小于 | 表达式1 < 表达式2 | 左到右 |
<= | 小于等于 | 表达式1 <= 表达式2 | 左到右 |
== | 等于 | 表达式1 == 表达式2 | 左到右 |
!= | 不等于 | 表达式1 != 表达式2 | 左到右 |
注意 :
==
是判断判断是否相等的,而=
是赋值。
好了,既然我们已经有了初步的了解,那我们看一下下列问题你是否能回答的上来吧
#include <stdio.h>
int main()
{
char c = 'd';
int ret = 0;
ret = 'm' < c <= 'z';
printf("%d", ret);
return 0;
}
问:ret 的值为多少?
怎么样?你猜对了吗?
我们可以观察到,结果并没有为 0, 而结果确实 1 , 这是为什么呢?
解释:由于运算符
<
和<=
结合方向都是==从左向右==结合,而 c = ’ d ’ ,所以先进行 m < d 的判断,m < d 为假返回 0, 而 0 < ’ z ’ 为真,返回 1 ,由此便得到 ret = 1
现在我们已经知道,这样的书写方式会出现一定的问题,那么,我们应该怎样书写才能避免这样的问题呢?
Q4 条件判断应该如何书写?
在上面语句基本不变的情况下,我们将条件判断改为以下写法:
#include <stdio.h>
int main()
{
char c = 'd';
int ret = 0;
ret = 'm' < c && c <= 'z';
printf("%d", ret);
return 0;
}
结果为:
我们可以观察到,当我加了 &&
符号后,结果就如同我们所想的一样了。
由此推广:
当表达式中有存在判断关系是并列关系的时候,我们应该使用
&&
符号;当表达式关系为两者之一的关系时,我们应该使用
||
符号
总结
本章博客主要目的是为了让大家更加清楚,操作符的左右结合性顺序,认识条件表达式正确的书写方法,学会判别由操作符左右结合性所导致的问题。
如果本章博客对你有帮助,请竖起你尊贵的手指帮我点一下👍吗?😘这对我真的很重要!(o゚v゚)ノ
- 今日份分享
- 今日份点赞ヾ(≧▽≦*)o