在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()中的配对。

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

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

}

写于2016年12月12日. "->"称为间接成员运算符. 总体注解:这个运算符与指向结构(sturct)或联合(union)的指针一起使用,用来指明结构或联合的的成员.假设ptrstr是一个指向结构的指针,member是由该结构模板指定的一个成员. 那么 ptrstr->member 这个表达式表示被指向的结构的成员.间接成员运算符也可以用同样方式用于联合.

关键字 数据类型修饰相关 auto按照自动的方式进行变量的存储 const定义常量或常参数 extern声明外部变量或函数 register指定变量的存储类型是寄存器变量 static指定变量的存储类型是静态变量,或指定函数是静态函数 volatile变量的值可能在程序的外部被改变 数据类型相关 char字符型数据 short定义短整型变量或指针 int整型数据 long长整型数据 signed有符号的整型数据 unsigned定义无符号的整型变量或数据 float单精度浮点型数据 double…

Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道java语言在面向对象编程方面有何独特的特点吗? 难点: 1. 理解方法重载和方法重写,不要混淆了两者的使用. 2. 类变量和类方法的使用. 3. 接口的使用. 3.1 面向对象技术基础 3.1.1 面向对象的基本概念 面向对象的基本思想 面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(pa…

1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成.这就是程序设计的基本分化方法: (1) 写一个函数的关键: 函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能: 函数声明:函数声明也称函数原型声明,函数的原型…

->在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符".".用法:p->a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员.表达式p->a引用了指针p指向的结构体的成员a.例如:struct T{int a;char b;}s;struct T*

用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: Struct 结构体名 { 成员列表 }: 1.  定义结构体类型变量 前面的也只是搭建了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元. 可以采取以下三种方法定义结构体类型的变量: (1).先声明结构体类型,再定义该类型的变量 (2).在声明类型的同时…

1.auto 修饰局部变量,编译器默认所有局部变量都是用auto来修饰的,所以在程序中很少见到. 2.static 它作用可大了,除了可以修饰变量,还可以修饰函数,修饰变量,改变其作用域和生命周期,修饰函数,改变作用域. (1)修饰变量:如果该变量是局部变量,那么生命周期会变化,作用域限定在本文件中被使用,如果该变量是全局变量,生命周期没变化,作用域限定在本文件中被使用. (2)修饰函数:该函数只能在当前文件下被调用. 3.register (1)寄存器变量的处理速度是最快的,适合频繁使用的变量…

}

要注意的是,在连接 PC 串行口调试时。发送数字时,发送完一个数字后还要发送一个回车符,以使 scanf 函数确认有数据输入。

逻辑符 符所能反映的是两个之间的大小等于,那逻辑符则是用于求条

件式的逻辑值,用逻辑运算符将或逻辑量连接起来就是逻辑了。也许你会 对为什么“逻辑运算符将关系表达式连接起来就是逻辑表达式了”这一个描述有疑惑的地方。 其实之前说过“要注意的是用关系运算符的运算结果只有 0 和 1 两种,也就是逻辑的真与假”, 换句话说也就是逻辑量,而逻辑运算符就用于对逻辑量运算的表达。逻辑表达式的一般形式 为:

逻辑与:条件式 1 条件式 2 逻辑或:条件式 1 || 条件式 2 逻辑非: ! 条件式 2

逻辑与,说白了就是当条件式 1“与”条件式 2 都为真时结果为真(非 0 值),不然为 假(0 值)。也就是说运算会先对条件式 1 进行判断,如果为真(非 0 值),则继续对条件式

2 进行判断,当结果为真时,逻辑运算的结果为真(值为 1),如果结果不为真时,逻辑运算 的结果为假(0 值)。如果在判断条件式 1 时就不为真的话,就不用再判断条件式 2 了,而 直接给出运算结果为假。

逻辑或,是指只要二个运算条件中有一个为真时,运算结果就为真,只有当条件式都不 为真时,逻辑运算结果才为假。

逻辑非则是把逻辑运算结果值取反,也就是说如果两个条件式的运算值为真,进行逻辑 非运算后则结果变为假,条件式运算值为假时最后逻辑结果为真。

同样逻辑运算符也有优先级别,!(逻辑非)→(逻辑与)→||(逻辑或),逻辑非的 优先值最高。

按逻辑运算的优先级别来分析则得到(True 代表真,False 代表假)

下面我们来用程序去有表达,如下:

}

我要回帖

更多关于 c语言三个逻辑运算符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信