迟来的操作符

引言:接上篇文章,继续介绍操作符(运算符)。

1. 框架

迟来的操作符_第1张图片

2. 关系操作符

2.1 概念:

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称
为“关系运算符”(relational operator)。

2.2 关系操作符有哪些?

> ⼤于运算符
< ⼩于运算符
>= ⼤于等于运算符
<= ⼩于等于运算符
== 相等运算符
!= 不相等运算符
这些操作符都比较容易理解,但需要注意一下 相等运算符 ,其与 赋值操作符= 是两个不一样的操作符,不要混淆。

2.3 使用规范

多个关系操作符不宜连⽤。
x
上⾯⽰例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果,即不是保证变量 y  的值在 x   和 z   之间。因为 关系运算符是从左到右计算 ,所以实际执⾏的是下⾯的表达式。
(x
上⾯式⼦中, x  < y  返回 0 1 ,所以最终是 0 1 与变量 z   进⾏⽐较。如果想要判断变量 y
的值是否在 x   和 z   之间,应该使⽤下⾯的写法。
x

下面我们介绍逻辑操作符:

3. 逻辑操作符

3.1 逻辑操作符是用来干什么的?

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式。

3.2 逻辑操作符有哪些?

主要有下⾯三个运算符:
! :逻辑取反运算符(改变单个表达式的真假)。
&& :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
|| :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语⾔中,⾮0表⽰真,0表⽰假
下面逐个展开介绍:

3.3 逻辑取反运算符 !

迟来的操作符_第2张图片

#include
int main()
{
	int flag = 0;//定义flag为0,即为假。
	if (!flag)//对其取反,变为1,即为真。
//if是如果的意思,是一种选择结构语句,后面会介绍到。当()的表达式为真时,执行下面的语句。
	{
		printf("%s","ture");//语句
	}
    return 0;
}

上面的代码运行结果为:

#include
int main()
{
	int ture = 1;//定义ture为1,即为真。
	if (!ture)//对其取反,变为0,即为假。
	{
		printf("%s", "flag");//上述表达式为假,该语句不执行。
	}
	else//else是其他的意思,if语句不执行,就执行else下的语句。
	{
		printf("上述表达式为假");//执行
	}
	return 0;
}

上面的代码运行结果为:

另外联系一下上篇文章,逻辑取反运算符 !也是一种单目操作符。

3.4 与运算符&&

迟来的操作符_第3张图片

&&,上文提到过,是并且的意思,与上篇文章的算术操作符一样,是一个双目操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假,即全真则真,一假则假。

#include
int main()
{
	int x = 3;//定义x,并初始化为3。
	int y = 4;//定义y,并初始化为4。
	int z = 5;//定义z,并初始化为5。
	if (x < y && y < z)//3<4<5,表达式为真,执行下面语句。
	{
		printf("y大于x,且y小于z");
	}
	return 0;
}

上面的代码运行结果为:

结合现实:

如果我们说⽉份是3⽉到5⽉,是春天,那使⽤代码怎么体现呢?
#include
int main()
{
	int month = 0;//定义month表示月份。
	while (scanf("%d", &month) == 1)//while(scanf("%d", &month)!=EOF)
/*while实现多组输入,因只有month一个变量,故表示为==1,有几个变量,==后就跟数字几,如果感到麻烦,也可写为都写为!=EOF。*/
	{
        //这里再次应用if  else语句,后续会具体讲解。
		if (month >= 3 && month <= 5)
//这⾥表达的意思就是month既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜。
		{
			printf("春季\n");
		}
		else
		{
			printf("该月不属于春季\n");
		}
	}
	return 0;
}

上面的代码运行结果为:

vs编译器上使用三个Ctrl+z结束运行。

3.5 或运算符 ||

迟来的操作符_第4张图片

|| 就是或运算符,也就是或者的意思, || 也是⼀个 双⽬操作符 ,使⽤的⽅式是 a || b || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假,即 一真则真,全假则假。

下面用代码实践:

如果我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天,那么我们怎么使⽤代码体现呢?
#include
int main()
{
	int month = 0;
	while (scanf("%d", &month) == 1)
	{
		if (month == 12 || month == 1 || month == 2)
        //month为12或者为1再或者为2,都执行下面语句。
		{
			printf("冬季\n");
		}
		else//不为这三个月,都执行下面语句。
		{
			printf("该月不属于冬季\n");
		}
	}
	return 0;
}

上面的代码运行结果为:

3.6 特点“短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“ 短路 ”。

对于&&运算符如前⾯的代码:

if(month >= 3 && month <= 5)
表达式中&& 的左操作数是 month >= 3 ,右操作数是 month <= 5 , 当左操作数 month >= 3 的
结果是0的时候,即使不判断 month <= 5 ,整个表达式的结果也是0(不是春季)。
所以,对于&&操作符来说, 左边操作数的结果 是0 的时候,右边操作数就不再执⾏。
对于 || 操作符如前⾯的代码:
if(month == 12 || month==1 || month == 2)
如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。
所以, || 操作符的 左操作数的结果不为0时,就⽆需执⾏右操作数。

4. 结言

本篇文章进一步介绍了操作符,并引入了if  else语句,这是分支与循环的相关知识,后续会进行介绍,下篇文章牛刀小试一下,综合运用&&与||。

你可能感兴趣的:(C语言知识,c#,c语言)