目录

  • 1 第一章  C语言概述
    • 1.1 第一节  C语言的产生和发展
    • 1.2 第二节  C语言的特点
    • 1.3 第三节  两个简单的C程序
    • 1.4 第四节  C程序的上机步骤
    • 1.5 第五节  Dev-C++介绍
    • 1.6 第六节  VC2010学习版介绍
    • 1.7 第七节  宏定义和文件包含
    • 1.8 本章小结
    • 1.9 本章单元测试
  • 2 第二章  基本数据类型与简单程序设计
    • 2.1 第一节  C语言的基本数据类型
    • 2.2 第二节  常量
    • 2.3 第三节  变量
    • 2.4 第四节  赋值语句
    • 2.5 第五节  数据输出
    • 2.6 第六节 数据输入
    • 2.7 第七节  运算符
    • 2.8 第八节  常用的数学函数
    • 2.9 第九节  顺序结构程序设计
    • 2.10 本章小结
    • 2.11 本章单元测试
  • 3 第三章  分支结构程序设计
    • 3.1 第一节  关系表达式和逻辑表达式
    • 3.2 第二节  if单分支语句
    • 3.3 第四节  if双分支语句
    • 3.4 第五节  if多分支语句
    • 3.5 第六节  case多分支语句
    • 3.6 第七节  分支结构程序设计实例
    • 3.7 本章小结
    • 3.8 本章单元测试
    • 3.9 书中本章习题答案
  • 4 第四章  循环结构程序设计
    • 4.1 第一节  为什么需要循环控制
    • 4.2 第一节  while循环
    • 4.3 第二节  do ... while循环
    • 4.4 第三节  for循环
    • 4.5 第四节  多重循环
    • 4.6 第五节  break语句和continue语句
    • 4.7 第六节  循环结构程序设计实例
    • 4.8 本章小结
    • 4.9 书中本章习题答案
  • 5 第五章 数组
    • 5.1 第一节  一维数组的定义和使用
    • 5.2 第二节  二维数组的定义和使用
    • 5.3 第三节  字符数组的定义和使用
    • 5.4 第四节  数组的应用举例
  • 6 第六章  函数
    • 6.1 第一节  函数的定义
    • 6.2 第二节  函数的调用
    • 6.3 第三节 数组作为函数参数
    • 6.4 第四节  变量的作用域
    • 6.5 第五节 变量的存储类别
    • 6.6 第六节 函数应用实例
  • 7 第七章 结构体和共用体
    • 7.1 第一节  概述
    • 7.2 第二节  定义结构体变量的方法
    • 7.3 第三节 结构体变量的引用
    • 7.4 第四节 结构体数组
    • 7.5 第五节 共用体
    • 7.6 第六节  结构体和共用体应用实例
  • 8 第八章 指针
    • 8.1 第一节  指针的概念
    • 8.2 第二节  指向简单变量的指针
    • 8.3 第三节 指向数组的指针变量
    • 8.4 第四节  指向字符串的指针变量
    • 8.5 第五节 指针作为函数参数
    • 8.6 第六节  指向结构体的指针变量
    • 8.7 第七节 指针应用实例
  • 9 第九章  文件
    • 9.1 第一节  文件概述
    • 9.2 第二节  文件的打开和关闭
    • 9.3 第三节 文件的读/写函数
    • 9.4 第四节  文件定位函数
    • 9.5 第五节  文件应用实例
  • 10 附录
    • 10.1 附录A  基本字符ASCII码表(0~127)
    • 10.2 附录B  运算符优先级表
    • 10.3 附录C 常用C库函数表
    • 10.4 附录D  编译常见错误提示
    • 10.5 附录E  常见C语言英语单词
    • 10.6 附录F  如何从十进制转换为二进制
    • 10.7 附录G  如何把二进制数转化为十进制数
    • 10.8 附录H  什么是编译器
    • 10.9 附录I  与编译器相关的几个知识点
第一节  关系表达式和逻辑表达式
  • 1 文字讲解
  • 2 视频讲解
  • 3 过关测试

一、关系运算符

1、关系运算符的定义

     关系运算符:指对两个同类型的数据按它们值的大小进行比较的运算,判断它们是否符合给定条件。

2、关系运算符运算的结果

     关系运算符运算结果如下所示。

      

3、关系运算符优先级与结合方向

表3-1  C语言中的关系运算符
运算符含义优先级结合方向
<小于6从左往右
<=小于或等于
>大于
>=大于或等于
==等于7
!=不等于

关系运算符优先级说明如下:

     ① 关系运算符被分为两组不同的优先级,“==”、“!=”的优先级低于“<”、“<=”、“>”、“>=”。

     ② 关系运算符的优先级低于算术运算符。

     ③ 关系运算符的优先级高于赋值运算符。看下面的例子。

       a>b+3  等价于   a>(b+3)

       a=b>3   等价于   a=(b>3)

       a != b >3  等价于   a != ( b >3 )

      当相同优先级的关系运算符同时出现时,从左向右进行运算。也就是说,结合性是从左向右。例如:

         a != b == c 等价于 ( a !=b ) == c

      用关系运算符连接两个表达式组成的式子称为关系表达式下面都是合法的关系表达式:

      ① a>b  ② (a+b)<=(b+c)   ③ 'a'<'b'   ④ 1==1  ⑤  1 == 0

     在C语言中,当表达式的值为真时,其值为1;而当表达式的值为假时,其值为0.1熟练达式中,除了1表示“真”以外,所有非0值也都表示“真”,只有0表示“假”,如:

       x=(3>2);        x的值为1

       x=(3<2);        x的值为0

二、关系表达式

1、关系表达式的定义

     关系表达式是指用关系运算符将两个数值或数值表达式连接起来的式子。

2、关系表达式的值

      关系表达式的值是一个逻辑值,即“真”或“假”。在C语言的逻辑运算中,以“1”代表“真”,以“0”代表“假”

注意:在C语言中非0表示真,0表示假。只要进行关系运算后,结果只有0或1。

三、逻辑表达式

逻辑表达式是指用逻辑运算符连接若干个表达式组成的式子

1、逻辑运算符的含义

      &&(逻辑与)    || (逻辑或)   !(逻辑非)

说明:

     ① 逻辑运算的值应该是逻辑量“真”或“假”

     ② 编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”

     ③ 但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”

     ④ 注意:将一个非零的数值认作为“真”

     ⑤  逻辑运算真值表


逻辑运算真值表
ab!a!ba && ba || b
 非0 非00011
 非000101
0 非01001
00110

0

说明: 

       ● a && b   若a,b均为真,则“a && b”值为真,否则为假。

       ● a || B   若a、b均为假,则“a || b”值为假,否则为真

       ● !a    若a为真,则“a”值为假,否则为真

      ● 与运算只要有一个为0,则结果为0,全1才为1。

     ●  或运算只要有一个为1,则结果为1,全0才为0。

     ●  与运算前一操作数为0,则后一个不算

     ●  或运算前一操作数为1,则后一个不算

2、逻辑运算符的优先级与结合方向

      如表3-2所示。

表3-2  C语言中的逻辑运算符
运算符含义优先级结合方向
!逻辑非2
&&逻辑与11
||逻辑或12

 说明:

     ① 逻辑运算符中,“&&”和“”是双目运算符要求有两个运算对象:“1”是单目运算符。

     逻辑运算符的优先次序

             !  → && → ||           (!为三者中最高)

      ③ 与其他运算符的优先次序,如下图所示。

  

3、逻辑表达式优先级使用案例

      例1  x > y && m > n  等价于  ( x >y ) && ( m > n )

      例2  a != b || x == y   等价于   (a != b) || (x == y )

      例3  ! x || x > y    等价于  ( ! x ) || ( x > y )

4、逻辑表达式运算案例

     例1   ( 3 < 2 ) && ( 7 > 5 ) 值为 0     只有“&&”右边的子表达式为真

     例2    ( 3 < 2 ) || ( 7 > 5 )    值为 1     只要求有一个子表达式为真

      例3    !( 3 < 2 )                   值为1      子表达式为假    

       逻辑表达式的值为1或0。因为任何类型的表达式都有真假,所以逻辑运算符可以连接任何类型的数据。如果逻辑表达式太复杂,则需要注意比较运算符优先级的大小。看下面的例子。

       x > 7 && x + y != 20  等价于  ( x>7 ) && ( ( x+y ) != 20 )

       3 + 2 && 5 > 40  等价于  ( 3 + 2 ) && ( 5 > 4 ) || ( !0 )

     熟练掌握关系运算和逻辑运算是运用分支结构编程的关键。

四、拓展资料

案例1  判别某一年是否为润年,用逻辑表达式表示

问题分析:

      如果是年,则为1(真),否则为0(假)

是否为闰年应符合下面二者之一:

      ① 能被4整除,但不能被100整除,如2008

      ② 能被400整除,如2000

      “应符合下面二者之一”这句话表明两个条件是或的关系,不是与的关系。“能被4整除,但不能被100整除这句话表明是与的关系,不是或的关系。

逻辑表达式如下:

     (year % 4 == 0 && year 100 !=0) || year % 400 == 0

分析验证:

      ① 当年份(year)为 2008、2020、2000年时,计算结果为真(1)

      ② 当年份(year)为 2002、2100、2010年时,计算结果为假(0)

     通过上面两组数据分析,得出判别“某年是否为润年”的逻辑表达式是正确的。

案例2  已知三边a,b,c均大于0,判断三边是否构成三角形,用逻辑表达式表示。

问题分析:

      如果是任意两边的和大于第三边,则为1(真),否则为0(假)

      判断三边是否构成三角形的定理是:任意两边的和大于第三边。三边a,b,c的所有组合有三种情况,分别为: ① a+b>c,② a+c>b,③ b+c>a,这三种情况任何一种情况都必须成立,则可以构成三角形,应是与的关系,不是或的关系。

逻辑表达式如下:

        a+b>c && a+c>b && b+c>a

分析验证:

     ① 当 a=3,b=4,c=5 或  a=4,b=3,c=5 或 a=5,b=4,c=3时,计算结果为真(1),  表明可以构成三角形。

     ② 当 a=3,b=1,c=1 或  a=1,b=3,c=1 或 a=1,b=1,c=3时,计算结果为假(0),表明不可以构成三角形。


写逻辑表达式

例1:判断整数x是否为奇数

    如果是奇数,则为真,否则为假

         x % 2==1

         或  x % 2

         或  x/2*2!=x

    多用几个具体的数去算一下

    如:3,5,11,4,10去算一下


例2:判断整数x是否为偶数

    如果是偶数,则为真,否则为假

         x % 2==0

         或  !(x % 2)

         或  x/2*2==x

    多用几个具体的数去算一下

    如:3,5,11,4,10去算一下



例3:判断整数x是否能被3整除

    

    如果能被3整除,则为真,否则为假

         x % 3==0

         或  !(x % 3)

         或  x/3*3==x

    多用几个具体的数去算一下

    如:3,5,11,4,10去算一下



例4:判断整数x是否既能被3整除,又能被5整除

    

    如果能,则为真,否则为假

         x % 5==0  && x % 3==0

         或  !(x % 3)

         或  x/3*3==x

    多用几个具体的数去算一下

    如:3,5,11,15,10去算一下



设a=6,b=4,写出下列运算表达式的结果。


a>=5 && b<=3  1 && 0   0



设a=2,b=4,写出下列运算表达式的结果。


a>=5 && b<=3 

  0  && b<=3 与运算前一操作数为0,则后一个不算


设a=2,b=4,写出下列运算表达式的结果。

a>=5 && (b+=2)    

  0  && (b+=2)

 与运算前一操作数为0,则后一个不算

  设a=5,b=4,写出下列运算表达式的结果。

a>=5 || (b+=2)    

  0  || (b+=2)

 或运算前一操作数为1,则后一个不算

 设a=5,b=4,写出下列运算表达式的结果。

a>5 || (b+=2)    

  0  || (b+=2)

 或运算前一操作数为1,则后一个不算