5.1 关系运算符和关系表达式
考点1 关系运算符和关系表达式
真考链接
考点1构成算法的基本元素,主要用于条件判断语句。在选择题中的考核概率为70%,在操作题中的考核概率为30%。该知识点比较简单,但需要重点识记。
C语言提供了6种关系运算符,见表5.1。
表5.1 关系运算符
(1)结合性:自左向右。
(2)优先级:前4种关系运算符(<,<=,>=,>)的优先级别相同,后两种关系运算符(==,!=)优先级别相同,且前4种优先级高于后两种。关系运算符的优先级低于算术运算符,高于赋值运算符。
由关系运算符连成的表达式,称为关系表达式。关系运算符的两边可以是C语言中任意合法的表达式。
关系运算符的结果是一个整数值——“0 或者1”,正如前面所说,在 C语言中,用非零值来表示“真”,用零值来表示“假”。因此,对于任意一个表达式,如果值为零时就代表一个假值;只要值是非零,无论是正数还是负数,都代表一个真值。
当关系运算符两边值的类型不一致时,如一边是整型,另一边是实型,系统将自动把整型数转化为实型数,然后再进行比较。
小提示
关系运算符中,由两个字符组成的运算符之间不可以加空格,而且关系运算符都是双目运算符,具有自左向右的结合性。
常见问题
复合语句中有关系表达式和算术表达式,如何判断其结果?
因为算术运算符的优先级高于关系运算符,所以应该先算出算术表达式的值再去判断关系表达式的值。按照运算符的优先级依次运算,再复杂的复合语句也可以很好地理解。
真题精选
【例1】已知字母 A的 ASCII码为65,若变量 kk 为 char型,以下不能正确判断出 kk 中的值为大写字母的表达式是( )。
A.kk>='A'&&kk<='Z' B.! (kk >='A'||kk <='Z')
C.(kk +32) >='a'&&(kk +32) <='z' D.isalpha(kk) &&(kk<91)
【答案】 B
【解析】C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在A和Z之间就可以了,选择A和C符合要求。函数isalpha用来确定一个字符是否为字母,大写字母的ASCII码值的范围为65~90,所以如果确定一个字母的ASCII码小于91,那么就能确定它是大写字母。本题答案选B。
【例2】有以下程序:
main()
{ int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("% d\n",d);
else if((c-1> =d)==1)
printf("% d\n",d+1);
else
printf("% d\n",d+2);
}
执行后输出结果是( )。
A.2 B.3
C.4 D.编译时有错,无结果
【答案】 B
【解析】第二个if语句中的表达式“c-1>=d”的值为逻辑值1,所以该条件成立。
【例3】当整型变量c的值不为2、4、6时,值也为“真”的表达式是( )。
A.(c==2)||(c==4)||(c==6) B.(c>=2 &&c<=6)||(c!=3)||(c!=5)
C.(c>=2 &&c<=6) &&!(c% 2) D.(c>=2 &&c<=6) &&(c% 2 !=1)
【答案】 B
【解析】满足表达式(c>=2 &&c<=6)的整型变量c的值是2、3、4、5、6。当变量c的值不为2、4、6时,其值只能为3或5,所以表达式c!=5中至少有一个为真,即不论c为何值,表达式B都为真。正确答案为B。
【例4】为表示关系:x≥y≥z,正确的C语言表达式是( )。
A.(x>=y)&&(y>=z) B.(x>=y)AND(y>=z)
C.(x>=y>=z) D.(x>=y)&(y>=z)
【答案】 A
【解析】选项D中,表达式(x>=y)&(y>=z)中的运算符“&”是一个位运算符,不是逻辑运算符,因此不可能构成一个逻辑表达式。选项B中,表达式(x>=y)AND(y>=z)中的运算符“AND”不是C语言中的运算符,因此这不是一个合法的C语言表达式。选项C中,(x>=y>=z)虽然在C语言中是合法的表达式,但在逻辑上,它不能代表x≥y≥z的关系。
【例5】以下程序段中与语句“k=a>b? (b>c? 1:0):0;”功能等价的是( )。
A.if((a>b)&&(b>c))k=1; elsek=0; B.if((a>b)||(b>c))k=1; elsek=0;
C.if(a<=b)k=0; elseif(b<=c)k=1; D.if(a>b)k=1; elseif(b>c)k=1; elsek=0;
【答案】 A
【解析】本题考查了条件运算和运算优先级的综合知识。需要注意,在C语言中,条件运算优先于赋值运算,但低于逻辑运算、关系运算和算术运算,再根据条件运算的运行机理,就可以得到,只有选项A与题中语句的功能是等价的(先算括号内的条件运算,然后再使表达式的值参与外部的条件运算)。
【例6】给定程序中,函数fun()的功能是:统计形参s所指的字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,若形参s所指的字符串为"abcdef35adgh3kjsdf7",则输出结果为4。
请在标号处填入正确内容,使程序得出正确的结果。
注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。
试题程序
#include <stdio.h>
void fun(char *s,int *t)
{ int i,n;
n=0;
for(i=0;s[i]【1】0;i++)
if(s[i]【2】 '0'&&s[i]【3】 '9')n++;
*t=n;
}
main()
{ chars[80] ="abcdef35adgh3kjsdf7";
int t;
printf("\nThe original string is:% s\n",s);
fun(s,&t);
printf("\nThe result is:% d\n",t);
}
【答案】【1】!= 【2】 >= 【3】 <=
【解析】本题考查关系运算符和关系表达式。
标号【1】:遇到字符串结束则退出循环。
标号【2】:数字是大于或等于字符0的ASCII码。
标号【3】:数字是小于或等于字符9的ASCII码。