文章教程

全国计算机等级考试二级C语言5.2逻辑运算符和逻辑表达式

8/22/2020 10:24:52 PM 人评论 次浏览

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的值;只有xy都为真时,才需要去判别z的值;只要x为假就不必判别yz,整个表达式的值为0。

(2)x||y||z,只要x的值为真(非零),就不必判别yz的值,整个表达式的值为1;只有x的值为假,才需要判别y的值;只有xy的值同时为假才需要判别z的值,因此,如有以下逻辑表达式(m=x>y)&&(n=c>d),其中x=1,y=2,c=3, d=4,若mn原值为1,由于“xy”的值为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码。

教程类别