C语言程序设计-关系运算符和关系表达式、逻辑运算符和逻辑表达式

目录

第三章 分支结构程序设计

3.1 关系运算符和关系表达式

3.1.1 关系运算符

3.1.2 关系表达式

3.2 逻辑运算符和逻辑表达式

3.2.1 逻辑运算符

3.2.2 逻辑表达式 

传送门-上一章习题:C语言-基础知识练习习题2

传送门-上一节:C语言程序设计-顺序结构、分支语句、循环结构、赋值语句、格式输入输出函数(scanf、printf)、字符输入输出函数(getchar、putchar)

传送门-下一节:C语言程序设计-分支语句:if语句及嵌套(if-else)、switch语句


第三章 分支结构程序设计

3.1 关系运算符和关系表达式

3.1.1 关系运算符

        C语言中提供的关系运算符共有6种,如表3.1所示。

表3.1 关系运算符

         关系运算符>、>=、<、<=的优先级高于==、!=,结合方向是自左至右。关系运算符隐含“是否”的含义,例如,“x>0”隐含x的值是否大于0。

3.1.2 关系表达式

        用关系表达式把两个C语言表达式连接起来的表达式称为关系表达式。x>0和x==0都是关系表达式。关系表达式的判断结果只有两种可能:“真”和“假”。当关系成立时结果为“真”,否则结果为“假”。

【例3.1】假设表3.2中a、b、x为整型变量,y为单精度型变量,请观察输出结果。

表3.2 关系表达式的举例

说明:

1)当关系表达式的判断结果为“真”时,关系表达式的值为1,当判断结果为“假”时,关系表达式的值为0,即关系表达式的值只能是整数0或1.关系表达式能参加数值计算,例如,表达式(5>3)+7的值为8(即1+7)。

2)关系运算符的结合方向为自左至右。计算表达式0<=x<=2的值时,先计算表达式0<=x的值,不管x取什么值,表达式0<=x的值只能是0或1,表达式0<=x<=2相当于0<=2或1<=2,且这两个表达式的值都是1,因此表达式0<=x<=2的值永远是1,这说明表达式0<=x<=2不能代表x的取值范围0\leqslantx\leqslant2,那么,应该如何表示这范围呢?将在3.2节的学习中得到答案。

3)存放在内存中的实型数总是有误差。当把45.3219存放在单精度型变量y中时,y的实际值就会变为45.3219*(*代表若干个不确定的数字),关系表达式y==45.3219总为假,也就是其值永远为0,与预期结果不相符,所以应当避免使用判断“实型数==实型数”这样的关系表达式,可以采用y-45.3219<10^{-6}等形式代替y==45.3219。

3.2 逻辑运算符和逻辑表达式

3.2.1 逻辑运算符

C语言中提供的逻辑运算符共有3种,如表3.3所示。

表3.3 逻辑运算符

注意:逻辑运算符的逻辑量(即运算量)可以是任意一个合法的表达式(可以是常量或变量)。运算符&&和||的结合方向是自左至右,而!的结合方向是自右至左。要输入运算符||,只要输入两次反斜杠(\)的上档键即可。

3.2.2 逻辑表达式 

        逻辑表达式由逻辑运算符连接C语言表达式而构成的表达式,如x>=0&&x<=2、x<-5||x>5等都是逻辑表达式,逻辑表达式的结果只有“真”“假”两种情况。

【例3.2】编写一个含有逻辑表达式的程序。

#include<stdio.h>
int main()
{
	int x = 1;
	printf("%d ", x >= 0 && x <= 2);   //x满足0<=x<=2,输出1
	x = 5;
	printf("%d ", x >= 0 && x <= 2);   //x不满足0<=x<=2,输出0
	printf("%d ", x < -3 || x>3);    //x不满足x<-3但满足x>3,输出1
	x = 0;
	printf("%d ", x < -3 || x>3);    //x不满足x<-3也不满足x>3,输出0
	printf("%d ", !x);		//x的值为0,输出1
	x = 5;
	printf("%d ", !x);		//x的值为非0,输出0
	printf("%d ", 3 && 'A');		//两个运算量为非0数,输出1
	printf("%d ", (x = 2) || 0);		//第1个运算量为非0数,输出1
	printf("x=%d\n", x);
	return 0;
}

运行结果:

1 0 1 0 1 0 1 1 x=2

程序说明:

1)在C语言中,任何一个非零值都表示“真”,零表示“假”。例如:’A‘、5>=0和x=2都表示“真”,因为3项的值分别为65、1、2(均非零)。

2)由程序的运行结果可以看出,逻辑表达式的值也只能是1或0.当逻辑表达式的结果为“真”时值为1,为“假”时值为0。

        逻辑运算符的规则如表3.4所示,表中a和b代表运算量,它们可以是任意表达式。

表3.4 逻辑运算的规则

【例3.3】编写一个含有特殊逻辑表达式的程序。

#include<stdio.h>
int main()
{
	int a = 1, b = 0;
	printf("%d ", 0 && (a = 2));		//0为"假",不执行a=2
	printf("a=%d  ", a);		//a的值仍为1
	printf("%d ", 5 && (a = 2));		//5是非0数,"真",要执行a=2
	printf("a=%d  ", a);		//a的值为2
	b = 1;
	printf("%d ", 5 || (b = 2));		//5是非0数,"真",不执行b=2
	printf("b=%d  ", b);		//b的值仍为1
	printf("%d ", 0 || (b = 2));		//0为"假",要执行b=2
	printf("b=%d\n", b);		//b的值为2
	return 0;
}

运行结果:

0 a=1  1 a=2  1 b=1  1 b=2

 程序说明:

        程序中可以看到,表达式a=2和b=2有时不被处理。在逻辑表达式的求解过程中,并不是所有的表达式都被运算。例如,进行“逻辑与”运算时,如果第一个表达式为“假”,系统就不再对第二个表达式做运算,因此此时已经可以确定逻辑表达式的值为0;进行“逻辑或”运算时,如果第一个运算量为“真”,系统也不再对第二个运算量做运算,因此此时已经可以确定逻辑表达式的值为1.

        算术运算符、赋值运算符、关系运算符、逻辑运算符参加运算的先后顺序是:

逻辑非运算符-->算术运算符-->关系运算符-->逻辑与运算符-->逻辑或运算符-->赋值运算符。

传送门🚪来喽~

传送门-上一章习题:C语言-基础知识练习习题2

传送门-上一节:C语言程序设计-顺序结构、分支语句、循环结构、赋值语句、格式输入输出函数(scanf、printf)、字符输入输出函数(getchar、putchar)

传送门-下一节:C语言程序设计-分支语句:if语句及嵌套(if-else)、switch语句


Life's been full of joy and tears.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值