零基础自学C语言 06|关系,条件,逻辑操作符的介绍

一,关系操作符

 C语言中用于比较的表达式叫做“关系表达式”,里面的操作符就被称为关系运算符,关系运算符主要有下面六个:

> 大于运算符

< 小于运算符

>= 大于等于运算符

<= 小于等于运算符

== 等于运算符

!= 不相等运算符

下面试一些运用的举例:

a>b

a<b

a>=b

a<=b

a==b

a!=b

关系表达式的返回值通常为0或1,如果关系表达式正确,那么会返回一,否则返回0。

ps:在写相等运算符时可能会不小心写成赋值操作符“==”和“=”是两个不同的操作符,不要混淆了哦。

另外还有一个错误是,关系运算符不宜连用,连用编译器不会报错,但是通常不会达到想要的效果,例如a<b<c:

int main()
{
	int a = 4;
	int b = 3;
	int c = 2;
	if (a < b < c)
		printf("haha");
	return 0;
}

初学者可能认为没有结果,但是结果会打印haha,这是为什么呢?

因为连用时的运算法则是从左到右,也就是:(a<b)<c

先计算a<b是否正确,结果是不正确的,返回0,再计算返回值<c是否正确,因为返回值为0,所以结果正确,返回值为1,1为真,所以执行if语句。

那么如果想要达到我们想象的结果,应该怎么写a<b<c呢?可以用后面的逻辑操作符。

二,条件操作符

条件操作符也叫三目操作符,是需要接受三个操作数的,形式如下:

exp1?exp2:exp3

计算逻辑是先计算exp1,如果exp1为真,那么计算exp2,计算的结果为整个表达式的结果;如果exp1为假,那么计算exp3,计算的结果为整个表达式的结果。

练习:输入两个整数,输出两个整数中的最大值

参考代码:

int main()
{
	int a = 0, b = 0;
	scanf("%d %d", &a, &b);
	int m = a > b ? a : b;
	printf("%d", m);
	return 0;
}

三,逻辑操作符:!,&&,||

!:逻辑取反运算符(改变单个表达式的真假)

&&:与运算符,就是并且的意思(&&两边都是真,则为真,否则为假)。

||:或运算符,就是或者的意思(||两边都为假,则为假,否则为真)。

ps:C语言中0为假非0为真

(1)逻辑取反运算符

例如,有一个变量flag,如果flag为假,就要做什么事情:

int main()
{
	int flag = 0;
	if (!flag)
		printf("do something\n");
	return 0;
}

如果flag为真,那么!flag就为假,如果flag为假,那么!flag就为真。而上面的flag为0,是假,所以!flag就为真,所以执行if语句后面的代码。

(2)与运算符

&&就是与运算符,也就是并且的意思,是一个双目操作符,使用方法是a&&b,&&两边都是真时,表达式才为真,如果有一边是假,那么表达式就为假。

例如:输入一个月份,判断是否为春季就可以用与运算符实现

参考代码:

int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month >= 3 && month <= 5);
		printf("是春季");
	return 0;
}

这里与运算符表达了要month大于3并且小于5才能执行if语句。

(3)或运算符

||就是或运算符,也就是或者的意思,也是一个双目操作符,使用方法是a||b,||两边都是假试,表达式才为假,如果有一边为真,那么表达式的结果就为真。

比如,我们要判断,一年中只有12月,1月,2月为冬天,怎么通过代码实现呢?

参考代码:

int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month == 12 || month == 1 || month == 2);
		printf("是冬季");
	return 0;
}

(4)练习:闰年的判断

输入一个年份year,判断是否为闰年,如果是,打印“是闰年”,如果不是,打印“不是闰年”。

闰年的判断规则:

1.能被4整除,并且不能被100整除的是闰年。

2.能被400整除的是闰年。

参考代码1:

int main()
{
	int year = 0;
	scanf("%d", year);
	if (year % 4 == 0 && year % 100 != 0)
		printf("是闰年");
	else if (year % 400 == 0)
		printf("是闰年");
	else
		printf("不是闰年");
	return 0;
}

参考代码2:

int main()
{
	int year = 0;
	scanf("%d", year);
	if ((year % 4 == 0 && year % 100 != 0)||(year%400==0))
		printf("是闰年");
	else
		printf("不是闰年");
	return 0;
}

(5)短路

C语言的逻辑运算符还有一个特点,就是优先对左边的表达式求值,再对右边的表达式求值,这个顺序是保证的。
当左边的表达式满足逻辑运算条件,右边的表达式不再计算,这种现象被称为短路。
例如:
                                                if(month >= 3 && month <= 5)
如果month为1,先判断左边的表达式,month不大于等于3,所以左边的表达式求的值为0,这样对于&&来说,不管右边的表达式是对是错,结果都不影响,所以就,发生了短路,不计算右边的表达式。
那么对于||操作符又是怎样的呢?我们结合之前的代码:
                                        if(month == 12 || month == 1 || month == 2)
当month为12时,还是优先计算最左边的表达式,month为12,表达式为真,这时不管后面的表达式是真是假,都不会影响最后的结果,所以也发生了短路,不计算右边的表达式。

练习:阅读代码,计算输出的结果:

int main()
{
	int a = 0, b = 2, c = 3, d = 4, i = 0;
	i = a++ && ++b && d++;
	printf("%d %d %d %d %d", a, b, c, d, i);
	return 0;
}

上一篇:if语句

下一篇:while、for、do while循环

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值