在C语言中关系运算符有什么作用?

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

C语言有完整的一组关系运算符,用于比较两个运算分量间的大小关系。这组运算符有六个,即

前4种关系运算符的相同,后两种运算符的优先级相同。前4种的优先级高于后两种。例如,“〈”优先于“==”;而“〉”和“〈”优先级相同。

用关系运算符将两个分量连在一起构成的表达式称为关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”。根据运算符所作用的两个运算分量之间的指定关系是否成立,得到关系表达式的值。例如:

  a〉b 如果a大于b,则结果为真;否则为假。

  a〉=b 如果a大于或等于b,则结果为真;否则为假。

  a〈b 如果a小于b,则结果为真;否则为假。

  a〈=b 如果a小于或等于b,则结果为真;否则为假。

  a==b 如果a等于b,则结果为真;否则为假。

  a!=b 如果a不等于b,则结果为真;否则为假。

例如,a为10,b为80,那么

三个关系表达式的结果都为“假”。

怎样表示关系表达式的“真”、“假”逻辑值呢?由于C语言中没有逻辑型数据,因而借用数值来表示。C语言中规定:以数值0表示“假”,以非0表示“真”。对于关系表达式来说,结果的真、假分别用1和0表示。因此,在a为10,b为80的情况下,表达式a〈b的值(即结果)是1,而a==b的值是0。

关系运算只判定两个运算分量是否满足指定的关系,而不管二者具体数值相差多少。

的结果都是1。并且,执行关系运算之后,其分量(如这里的a,b,c)的值都不发生变化。

应注意,号“=”与相等比较运算符“==”的区别。例如,关系表达式i==500是检查i的值是否等于500;而赋值表达式i=500是把值500赋给i。

关系运算符的优先级低于算术运算符,高于赋值运算符。其结合性是按照自左至右的顺序进行,即左结合性。例如,a=50,b=30,c=68,d=100,则下列表达式:

  a+b〈c+d     相当于(a+b)〈(c+d),其值为1。

  a〈b〉c      相当于(a〈b)〉c,a〈b的结果为0,0〉c的结果为0,整个表达式的值为0。

  x=a〈b〈c     先进行a〈b〈c ,结果为1,然后再将1赋值给x。

例2-1 分析下面程序的运行结果。

第1行 //2-1.cpp运算符的优先级示例是注释行。

每个程序的开始都应该有一个注释,描述这个程序的目的、作者、日期和时间(在本书的程序中,我们没有说明这些信息,是因为这些信息对教学示例程序来说没有太多实际的意义)。

第2行 #include 〈stdio.h〉是预处理命令,详细内容请参考本书7.8节。

在需要从键盘输入数据或者输出数据到屏幕的程序中,如果忘记包含〈stdio.h〉头文件,那么会导致编译错误。

第3行是空行。为了易于阅读程序,常使用空行、空格和制表符来增加程序的可读性。

使用空格和空行来增加程序的可读性。

第4行 //main函数开始程序的运行,是一个单行注释,指出程序从下一行开始执行。

第8行分别对变量i、j、k赋值为60。

第10行,按照运算符优先级关系,表达式“i= j==k;”等价于i=(j==k)。所以,先执行j与k是否相等的比较,其结果是1;再执行i=1,把1赋值给变量i。所以,这条语句执行后,i的值是1,而j和k的值保持不变,仍然是原来的值60。

第11行printf()语句执行后输出结果是:

第12行,圆括号括起来的表达式“(j=k++*2);”包含三个运算符,即:=、++和*,其中“++”的级别最高,“*”次之,“=”最低。所以,这个表达式就等价于j=((k++)*2)。由于k++是后缀形式,所以,先取出k的当前值(即60)乘以2,得到120,赋给变量j;然后k的自身增1,变为61。这个表达式是关系运算符“==”的右分量,其左分量是i,利用“==”,判别i的值(是1)是否等于右分量的值(即120),很显然两者不相等。但应注意,这个比较的结果(数值0)并没有赋予任何变量,从而不会影响运算分量的原有值。

第13行的printf()函数调用语句执行后输出结果是:

第14行的语句中有三个运算符,即=、〉和〉=。按照优先级的高低,“〉”和“〉=”是同一级,且高于“=”的优先级;按照结合性——关系运算符的结合性是自左至右,所以,表达式

等价于i=((j〉k)〉=100);j〉k的结果为1,1〉=100的结果是0,最后把0赋给i。

第15条语句执行后输出结果是:

上述程序运行之后的输出结果是:

另外,在以上示例中关系运算符的运算分量都是整型量。其实,它们的两个运算分量既可以是整型的,也可以是浮点型的,还可以都是型的(将在第5章中介绍),但它们运算结果的类型都是int型(即1或0)。

遗漏了main()后面的括号对。

遗漏或不正确地键入了开始大括号{,{表示函数体的起点。

遗漏或不正确地键入了结束大括号},}表示函数体的终点。

函数名拼写错误,例如把printf()误写成print()。

忘记printf()中的配对。

遗漏了每一条语句结束后的分号。

在限定函数体的花括号之间把整个函数体缩进一级。使程序可读性增强、函数结构清晰,使程序更易于纠错。

“==”是C语言关系操作符中的等于操作符。

关系运算符用于两个数值之间的比较运算。C语言提供6种关系运算符:

>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)和 !=(不等于)。

关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。

下面的代码会将关系运算符的结果输出:

对于含多个关系运算符的表达式,如 k==j==i+5,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。

需要提醒的是,==才表示等于,而=表示赋值,大家要注意区分,切勿混淆。

1.1 C语言基础知识

1.【2011年9月选择题第11题】以下叙述中错误的是________。

A)C语言编写的函数源程序,其文件名后缀可以是.C

B)C语言编写的函数都可以作为一个独立的源程序文件

C)C语言编写的每个函数都可以进行独立的编译并执行

D)一个C语言程序只能有一个主函数

【解析】C语言编写的每个函数可以被独立编译,但是除主函数外不能独立执行。

2.【2011年3月选择题第11题】计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是

A)C语言程序仅可以编译执行

B)C语言程序仅可以解释执行

C)C语言程序既可以编译执行又可以解释执行

【解析】解释程序是将源程序(如BASIC)作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。编译程序是把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机执行这个目标程序,得到计算结果。

3.【2011年3月选择题第12题】以下叙述中错误的是

A)C语言的可执行程序是由一系列机器指令构成的

B)用C语言编写的源程序不能直接在计算机上运行

C)通过编译得到的二进制目标程序需要连接才可以运行

D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件

【解析】C语言的可执行程序是由一系列机器指令组成的,用C语言编写的源程序必须经过编译生成二进制目标代码,再经过连接才能运行,并且可以脱离C语言集成开发环境。故答案为D)。

1.2 常量、变量和数据类型

4.【2011年9月选择题第13题】以下选项中关于C语言常量的叙述错误的是。

A)所谓常量,是指在程序运行过程中,其值不能被改变的量

B)常量分为整型常量、实型常量、字符常量和字符串常量

C)常量可分为数值型常量和非数值型常量

D)经常被使用的变量可以定义成常量

【解析】常量是其值不可变化的量。常量分为数字常量和字符常量。在C语言中,常量多是通过符号常量来表示的。数字常量又包括整形常量和浮点型常量,浮点型常量又称实数。在程序中不希望被改变的变量才定义为常量,而不是经常使用的变量。

我要回帖

更多关于 c语言关系运算符有几种类型 的文章

 

随机推荐