文章教程

全国计算机等级考试二级C语言5.1关系运算符和关系表达式

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

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码。

教程类别