4.1引例
例4.1
4.2例
4.2关系运算符,逻辑运算符,条件运算符
4.2.1关系运算符和关系表达式
1,关系运算符
关系运算符用于判断两个操作数的大小关系。
>大于,<小于,==等于,>=大于等于,<=小于等于,!=不等于
注意:
(1)关系运算符都是双目运算符,其结合方向是左结合。
(2)关系运算符的优先级低于算术运算符但高于赋值运算符。
(3)关系运算符中,>,<,>=,<=的优先级相同,==,!=的优先级别相同,前者的优先级高于后者,即>=的优先级高于==。
2,关系表达式
用关系运算符将两个表达式连接起来的式子称为关系表达式。
表达式1关系运算符表达式2
功能:比较两个表达式的大小,放回一个逻辑值
例如:a+b>=c-d,x<=3/2,'a'+1!=c,-i-5*j==k+1都是合法的关系表达式
关系表达式中允许出现嵌套的情况如:a>(b>c),a!=(c==d)
注意:
(1)注意分区运算符=和==。=是赋值运算符,==是关系运算符。
(2)对实数进行相等判断可能得不到正确的结果,例如1.0/3*3.0==1.0的结合为0.
(3)关系表达式中可以出现赋值运算符如a>(b=0),但不能写成a>b=0,因为关系表达式的优先级高于赋值运算符,表达式a>b=0,可以写成(a>b)=0.
关系表达式主要用于分支结构的判断。关系表达式的结果是一个逻辑值真或假,0或1。
例4.3
4.22逻辑运算符和逻辑表达式
1,逻辑运算符
关系表达式只能描述单一的条件。
非假既真,非真既假
逻辑非!,逻辑与&&,逻辑或||
逻辑非>逻辑与>逻辑或
!>&&>||
注意
与运算符&&和或运算符||都是双目运算符,非运算符!为单目运算符。
2,逻辑表达式
逻辑运算符将两个表达式连接起来的式子称为逻辑表达式。
表达式1 逻辑运算符 表达式2
或
逻辑运算符 表达式1
逻辑表达式的结果也是一个逻辑值真或假,即1或0
x y !x x&&y x||y
0 0 1 0 0
0 1 1 0 1
1 0 0 0 1
1 1 0 1 1
逻辑表达式的说明:
(1)参与逻辑运算的数据可以是0和1,也可以是非零值和0,还可以是任何类型的数据,但最终都是以非0和0来判断他们是真或者假
(2)在逻辑表达式中也可以使用赋值运算符,如a&&(b=0)不能写成a&&b=0的形式。逻辑运算符的优先级高于赋值运算符,表达式a&&b=0相当于(a&&b)=0,赋值运算符左边不是变量,会出现编译错误。
(3)
C语言规定,只对决定整个表达式值所需的最少数目的子表达式进行运算。
1,对于逻辑与(&&)运算,若&&左边的值为假,则可以得出整个表达式的值为假,那么&&右边的表达式将不再进行计算;只能当&&左边的表达式值为真时才计算右边表达式的值。
2,对于逻辑或||运算,若||左边的值为真,则可以得出整个表达式的值为真,那么||右边的表达式将不再进行计算;只能当||左边的表达式值为假时才计算右边表达式的值。
4.4例
4.5例
各种运算符的优先级从高到低的顺序
赋值运算符<&&和||<关系运算符<算术运算符<!
4.2.3条件运算符和条件表达式
1,条件运算符
条件运算符由?和:两个符号组成,用于条件求值,它是一个三目运算符,需要三个操作数。条件运算符的优先级低于逻辑运算符,高于赋值运算符,它是右结合的。
2,条件表达式
表达式1?表达式2:表达式3
条件表达式的执行顺序是:先计算表达式1的值,若值为非0,表示条件为真,表示条件为真,则将表达式2的值作为整个条件表达式的值,否则,将表达式3的值作为整个条件表达式的值。
关于条件表达式的说明:
(1)条件表达式中表达式1的类型可以与表达式2和表达式3不同,表达式2和表达式3的类型也可以不同,此时系统自动进行转换,结果为表达式2和表达式3中级别类型较高的,并将其作为条件表达式的类型。
(2)条件表达式中表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。
(3)条件表达式允许嵌套。
例4.6
4.3使用if-else实现分支结构
4.3.1if-else语句
1,双分支if语句
if(表达式)
语句1:
else
语句2:
例4.7
4.8例
双分支if语句可以用条件表达式替换
if(a>0)
y=a
else 等价于y=(a>0)?a;(-a)
y=-a
2,单分支if语句
if(表达式)
语句:
4.9例
4.10例
4.11例
4.3.2if语句的嵌套
if语句的基本形式
if(表达式)
语句1
else
语句2
如:
if(表达式1)
if(表达式2)
语句1; 语句1嵌套的if语句
else
语句2;
else
if(表达式1)
语句3; 语句2嵌套的if语句
else
语句4;
if语句嵌套结构流程
在if语句嵌套的结构中一定要注意else与if之前的对应关系
4.12例
4.13例
if(x>=0)
if(x>0)
y=1;
else
y=0;
else
y=-1;
4.3.3多分支if语句
多分支if语句是最常用的实现多路分支的办法
if(表达式1)
语句1;
else if(表达式2)
语句2;
........
else if(表达式n-1)
语句n-1;
else
语句n;
多分支结构流程
4,14例
4.15例
4.4使用switch语句实现分支结构
switch(表达式)
{
case常量表达式1:语句1;break;
case常量表达式2:语句2;break;
...........
case常量表达式n:语句n;break;
default:语句n+1;break;
}
switch语句的几点说明:
(1)switch后的表达式可以是任何表达式,其值只能为整理,字符 型,枚举型之一
(2)每个case后面的常量表达式的值互不相同,否则就会出现互相矛盾的现象
(3)各个case和default的出现次序不影响执行结果
(4)可以让多个case共用一组执行语句
(5)switch语句允许嵌套使用
在switch语句格式中的每个语句后面都使用bresk语句
4.16例
在switch语句格式中的部分语句后面使用break语句
4.17
4.18例
3,在swich语句格式中不使用break语句
4.5分支结构程序设计示例
4.19例
例4.20
4.21例