5.2 逻辑运算符和逻辑表达式
考点2 逻辑运算符和逻辑表达式
真考链接
考点2 比较简单,属于识记内容,主要用于条件判断句中。笔试中对此知识点的考查主要以选择题的形式出现。考核概率为100%。
C语言提供了3种逻辑运算符:
(1)&&:逻辑与。
(2)||:逻辑或。
(3)!:逻辑非。
其中“&&”和“||”是双目运算符,要有两个操作数,而“!”是单目运算符,要求必须出现在运算对象的左边。
◆ 结合性:自左至右。
◆优先级:“!”级别最高,然后是“&&”,“||”级别最低。
◆综合一下:“!”>算术运算符>关系运算符>“&&”>“||”>赋值运算符。
逻辑表达式由逻辑运算符和运算对象组成,其中,参与逻辑运算的对象可以是一个具体的值,还可以是C语言中任意合法的表达式,逻辑表达式的运算结果为1(真)或者为0(假)。若a=5,则!a的值为0,因为a的值为5(是非0值),被认做“真”,对它进行“非”运算后,结果为“假”,即结果为0。当A和B的值结合方式不同时,各种逻辑运算所得到的结果是不同的,见表5.2。
表5.2 逻辑运算表
值得注意的是:在数学中,关系式0<x<10是可以使用的,表示x的值应在大于0且小于10的范围内,但在C语言中却不能用0<x<10这样一个关系表达式来表示上述的逻辑关系,即关系运算符不能连用,但可以借助逻辑运算符来辅助表示,正确的表示方法是0<x&&x<10,在C语言中,由&&或||组成的逻辑表达式,在某些特定情况下会产生“短路”现象,举例如下:
(1)x&&y&&z,只有当x为真(非0)时,才需要判别y的值;只有x和y都为真时,才需要去判别z的值;只要x为假就不必判别y和z,整个表达式的值为0。
(2)x||y||z,只要x的值为真(非零),就不必判别y和z的值,整个表达式的值为1;只有x的值为假,才需要判别y的值;只有x和y的值同时为假才需要判别z的值,因此,如有以下逻辑表达式(m=x>y)&&(n=c>d),其中x=1,y=2,c=3, d=4,若m和n原值为1,由于“x>y”的值为0,因此m=0,而不执行“n=c>d”,所以n的值不是0而是原值1。
小提示
A&&B运算中,只有A、B同为真时才为真,A||B运算中,只有A、B同为假时才为假。
常见问题
在求解逻辑表达式值的过程中应注意什么问题?
同样的逻辑运算符放在一起采用不同的安排顺序能得到不同的结果,但只要抓住逻辑运算符的优先级,则万变不离其宗。
真题精选
【例1】以下选项中,当x为大于1的奇数时,值为0的表达式是( )。
A.x%2==1 B.x/2 C.x%2!=0 D.x%2==0
【答案】 D
【解析】因为x的值为大于1的奇数,所以x除以2的余数等于1。因此,选项A、C中表达式的结果为真,不为0;对于选项B来说,x除以2的商不会等于0;选项D中的表达式结果为假,即等于0。
【例2】执行以下程序段后,w的值为( )。
int w = 'A',x = 14,y = 15;
w =((x || y)&&(w < 'a'));
A.-1 B.NULL C.1 D.0
【答案】 C
【解析】根据题目所给条件可知,x||y为1,w<'a'为1,1&&1结果为1。因此正确答案为C。
【例3】有以下程序:
main()
{ int i=1,j=1,k=2;
if((j++||k++)&&i++)
printf("% d,% d,% d\n",i,j,k);
}
执行后输出的结果是( )。
A.1,1,2 B.2,2,1 C.2,2,2 D.2,2,3
【答案】 C
【解析】在C语言中,执行“||”运算的两个操作数,若有一个值为1,则整个表达式的值都为1。若该运算符左边操作数的值为1,则就不需要继续执行其右边的操作数。
【例4】下列给定程序中函数fun()的功能是:将tt所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。
例如,若输入“Ab,cD”,则输出“AB,CD”。
请在标号处填入正确的内容,使程序得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序
#include <conio.h>
#include <stdio.h>
#include <string.h>
char*fun(char tt[])
{ int i;
for(i=0;tt[i];i++)
if((tt[i]【1】 'a')【2】(tt[i]【3】 'z'))
tt[i] - =32;
return(tt);
}
main()
{ char tt[81];
printf("\nPlease enter a string:");
gets(tt);
printf("\nThe result string is:\n% s",fun(tt));
}
【答案】【1】 >= 【2】&& 【3】 <=
【解析】本题考查:关系运算符、逻辑运算符。
标号【1】:小写字母大于或等于字符a的ASCII码。
标号【2】:分析本题可知,要判断字符是否为小写字母,就需要判断其是否在a~z之间,所以这里需要进行连续的比较,用&&。
标号【3】:小写字母小于或等于字符z的ASCII码。