第5章选择结构程序设计
1 第5章 选择结构程序设计
在第四章中已学习过的表达式语句、赋值语句等都 是顺序执行的语句,用它们编出的程序一定是顺序执行 的。然而,要解决一个较为复杂的问题仅有这类顺序执 行的语句是不够的。例如要求任一实数的绝对值: X当X<0 X X当X≥0
2 在第四章中已学习过的表达式语句、赋值语句等都 是顺序执行的语句,用它们编出的程序一定是顺序执行 的。然而,要解决一个较为复杂的问题仅有这类顺序执 行的语句是不够的。例如要求任一实数的绝对值:
下面是求一个实数绝对值的一种算法: 读入x x≥0 X<0 x<0? X→zabs abs 输出x与xabs
3 下面是求一个实数绝对值的一种算法:
很明显,仅使用顺序执行的语句实现这种处理就比较 困难,因为它需要根据x的值,选择不同的分支处理。 为了解决这类程序设计问题,计算机程序设计语言 一般都提供相应的程序流程控制语句,用于控制程序执行 的顺序。 用程序设计语言按上述处理流程编出求x绝对值的程 序需要解决两个问题:首先,条件x<0的表示及判定;其 次,如何根据x<0的判断结果实现程序的控制转移。这正 是在本章中要讨论的内容。 在程序设计语言中,根据某个条件判断的结果,决定 程序的控制转移方式,称之为程序的选择控制方式
4 很明显,仅使用顺序执行的语句实现这种处理就比较 困难,因为它需要根据x的值,选择不同的分支处理。 为了解决这类程序设计问题 , 计算机程序设计语言 一般都提供相应的程序流程控制语句,用于控制程序执行 的顺序。 用程序设计语言按上述处理流程编出求x绝对值的程 序需要解决两个问题:首先,条件x<0的表示及判定;其 次,如何根据x<0的判断结果实现程序的控制转移。这正 是在本章中要讨论的内容。 在程序设计语言中,根据某个条件判断的结果, 决定 程序的控制转移方式,称之为程序的选择控制方式
51关系运算符与关系表达式 关系运算是对兩个操作数进行大小等同的比较运算, 比较的结果为成立不成立 在程序中,两个量之间的大小关系通常作为某种条件, 以决定程序执行的顺序或执行的操作。 、关系运算符 C语言定义的关系运算符有:
5 5.1 关系运算符与关系表达式 关系运算是对两个操作数进行大小等同的比较运算, 比较的结果为成立不成立。 在程序中,两个量之间的大小关系通常作为某种条件, 以决定程序执行的顺序或执行的操作。 1、关系运算符 C语言定义的关系运算符有:
>(大于) <(小于) (大于等于 (小于等于 (等于) !=(不等于) 注意 等于运算符==为连续两个等于号,主要为区别赋值 运算符=。在作相等判断时经常只写一个=,把相等判断 作为赋值运算,且不易发现。如i(x=7)错写成if(x-7), 原因是赋值会产生一个值
6 > (大于) = (大于等于) <= (小于等于) == (等于) != (不等于) 注意: 等于运算符 = = 为连续两个等于号,主要为区别赋值 运算符 = 。 在作相等判断时经常只写一个 = ,把相等判断 作为赋值运算, 且不易发现。如 if ( x==7 ) 错写成if ( x=7) , 原因是赋值会产生一个值
2、关系运算符的优先级和结合性 优先级: (高) 相同 (低)==! 相同 它们的优先级高于赋值运算符,低于算术运算符。 结合性:自左向右 3、关系表达式 由关系运算符、操作数(各种表达式)及小括号 组成的运算式
7 2 、关系运算符的优先级和结合性 优先级: (高) = 相同 (低) = = != 相同 它们的优先级高于赋值运算符, 低于算术运算符。 结合性: 自左向右 3、关系表达式 由关系运算符 、操作数(各种表达式)及小括号 组成的运算式
例如: a>3“ab!=ba=bb=c(错误)应写成a>(b=c) 关系表达式的值 关系表达式的值是逻辑值(真或假)。 条件成立时其值为1 条件不成立时其值为0 结果类型为:int C语言无逻辑型数据,非0为真,0为假。所以任 何表达式都可作条件,因它们都有值 两个操作数的类型不同时,自动转换成相同类型后 再进行比较
8 例如: a>3 ‘a’b!=b a==bb=c (错误) 应写成 a>(b=c) 关系表达式的值: 关系表达式的值是逻辑值(真或假)。 条件成立时其值为 1 条件不成立时其值为 0 结果类型为: int 两个操作数的类型不同时 , 自动转换成相 同类型后 再进行比较。 C语言无逻辑型数据 , 非0 为真 , 0 为假。所以任 何表达式都可作条件,因它们都有值
例 已知intx=2,y=1,z=0;判断以下关系表达式的值: X>V+1 >=y+1x>(y=2) 值0) (值1) 值0) (x=0,y=1,z2) (语法错)(值1) (值0) ≥y>x/语法正确,语义错误* (值0)
9 例: 已知 int x=2 , y=1 , z=0; 判断以下关系表达式的值: x>y+1 x>=y+1 x>(y=2) (值0) (值1) (值0) x>y=2 x>y==1 x==(x=0 , y=1 , z=2) (语法错) (值1) (值0) z>y>x /*语法正确,语义错误 */ (值0)
因浮点数的近似表示与计算误差问题,所以应避免对 浮点数做“—″、“!=″运算,理论上相等的两个数,可 能获得不等的比较结果。 若有 float x,a;需要判断:x=a时,通常用: fabs(x-a)0) 计算两个实数根} else 计算两个复数根}
10 因浮点数的近似表示与计算误差问题,所以应避免对 浮点数做“==”、“!=”运算,理论上相等的两个数,可 能获得不等的比较结果。 若有 float x , a ; 需要判断: x==a 时, 通常用: fabs(x-a)0 ) { 计算两个实数根 } else { 计算两个复数根 }