当前位置:
文档之家› C06第4章 逻辑运算与选择结构程序(1)
C06第4章 逻辑运算与选择结构程序(1)
反之亦然!
逻辑或操作符||
逻辑或操作符||表示“或者”的关系。 a和b只要有一个为真时a || b的值就为真为1,只有a和
b同时为假时,a || b的值才为假为0。
例4-2 用C表达式表示结论“变 量a的绝对值大于5”。
分析:当|a| > 5时有a > 5或者a < -5, 因此相应的C表达式为(a > 5) || (a < -5),当然也可用
大小由其ASCII码的值决定。
3 -5u中-5u为无符号数,故3 -5u的类型也为无符号数。3 -5u不可能等于0,因此大于0,即3 -5u > 0的值为1即真。 -5u即-5先用补码表示再被看做无符号数,两个正数相加的 结果当然不会小于0)。 能用printf函数输出值的方式判断结果是否大于0吗? printf(“?”,3-5u);
== 0 && n % 3 == 0 || n % 7 == 0。(等价于n % 6 ==
0 || n % 7 == 0) (2)x、y中至少有一个小于z 也就是x小于z或者y小于 z,相应的逻辑表达式为x < z || y < z。
分析:
(3) x、y中只有一个小于z,也就是只有x小于z或者 只有y小于z,当只有x小于z时有x小于z且y不小于z,相应
式求值,再由操作符的优先级可知,原表达式等价于((a
= 0) && (a = 5)) || (a += 1)。由于a = 0的值为0,故 子表达式(a = 0) && (a = 5)的值也为0即假,且子表达 式a = 5不会被求值。原表达式变为0 || (a += 1),此时 显然要继续对a += 1求值,求值后变量a的值变为1,结果
例4-3用逻辑表达式表示下面的 结论
1.整型变量n是2、3的公倍数或者是7的倍数 2.整型变量x、y、z中x、y至少有一个小于z
3.整型变量x、y、z中x、y只有一个小于z
4.长度为a、b、c的三边可以构成一个三角形
分析:
(1)n是2、3的公倍数即n是2的倍数,且还是3的倍数, 可表示为(a % 2 == 0 && n % 3 == 0)。n或者又是7的 倍数,则整个表达式为(a % 2 == 0 && n % 3 == 0) || n % 7 == 0。表达式中的括号仅为了提高可读性,由 逻辑操作符的优先级可知该逻辑表达式可直接写作a % 2
return
4.3.1 if结构的作用
编程时常需根据一定的条件有选择的执行一些C语句。 如编写求绝对值的程序时,要考虑用户的输入(f)是
否为负数(f<0),若为负数(真),则绝对值为输入数
的相反数(f = -f)。程序执行时语句f = -f;是否执行 显然与表达式f < 0的值相关。 C语言中用if结构来处理这种情况。
4.2.2 逻辑表达式求值
4.3 简单的if结构
4.3.1 if结构的作用 4.3.2 if结构的语法
4.4 if-else结构
4.4.1 if-else结构的形式与用法
“真”和“假”的编码
C语言中用“0”表示“假”,不为“0”的所有值都被认为是 “真”。
被认为是“假”的“0”可能是整数0,浮点数0也可能是
的逻辑表达式为(x < z && y >= z) || (y < z &&
x >= z)。 (4)构成三角形的三边应满足任意两边之和大于第三 边的条件,这里的“任意”显然是“并且”的关系。相应 的逻辑表达式为a + b > c && a + c > b && b
+ c > a。
return
4.2.2逻辑表达式求值
反映这种关系,即C语言中表达式(x > 99) && (x < 1000)
与代数式99 < x < 1000等价。 逻辑运算符的操作数是逻辑量,而逻辑量只有真和假两 个值,因此常用穷举法来说明逻辑操作符的运算规则,即 所谓的真值表。
表4-1为逻辑与&&的真值表
代数式99 < x < 1000 < 1000)
例4.1 关系表达式求值
(3) a % 2 != 0 (4) 99 < x < 1000 x为2523
(3)当a为奇数时,a % 2值为1,表达式a % 2 != 0的值也为1
即真,当a为偶数时,a % 2值为0,表达式a % 2 != 0的值也
为0即假,显然关系表达式a % 2 != 0用于判断变量a是否为奇 数。 (4) 操作符<是左结合,故表达式99 < x < 1000等价于
(99 < x)< 1000, x为2523时,子表达式99 < x为真即值为1,
原表达式变为1 < 1000,它的值为1即真,因此99 < x < 1000
的值为1即真。
return
4.2.1 逻辑操作符
对于代数式99 < x < 1000,只有99 < x和x < 1000同 时为真时它的值才为真。C语言中的逻辑与操作符&&可以
新编C语言程序设计教程
清华大学出版社
周二强
zeq@
软件学院
计算机科学与工程系
配套视频: 博客:/stunt
第4章逻辑运算和选择结构程序
“用户输入的数是否为三位的正整数?” “变量a是否为正数?”
这类问题的答案只有两个:“是”或者“否”。
先假设一个“结论”,如“变量a是正数”或者“变量a
不是正数”,然后根据事实对结论进行判断从而得到一个
或为真或为假的值。 对结论进行判断,并得出一个或为真或为假的值的过程 也是一种运算即逻辑运算。
第4章逻辑运算和选择结构程序
4.1 关系操作符和关系表达式 4.2 逻辑操作符和逻辑表达式
4.2.1 逻辑操作符
例4-6 求绝对值
程序4-6的流程图
开始
输入 f 输出 f
F
f < 0
T
f = -f
输出f的绝对值
结束
选择结构程序
因为程序中包含了选择结构而有 了多种可执行路径的程序称为选择 结构程序。 只有一种可执行路径的程序称为 顺序结构的程序。顺序结构的程序
开始 输入 f 输出 f
F
执行时自上而下,依次执行每条语
逻辑操作符的优先级
逻辑与&&和逻辑非||的优先级低于关系操作符即先求 (逻辑)值再(逻辑)运算,而逻辑与&&的优先级又高于
逻辑或||的优先级。单目操作符的优先级都比较高,逻辑
非!的优先级不仅高于关系操作符,而且还高于算术运算 符。 本节相关的逻辑表达式也可写作:x > 99 && x < 1000, x > 5 || x < -5, !(a > 5 || a < -5)和 a <= 5 && a
>= -5。
切记值的双重含义
切记C语言中一个值既是逻辑量又是普通的数值,在进 行逻辑运算时要把操作数看作逻辑量;在进行算术运算时
要把操作数理解为普通的数值。
如表达式!'a' * 2.3求值时, 先计算子表达式!'a'的值,'a'非0为真则!'a'的值为假 为0,原表达式变为0 * 2.3,值为0.0也即假。
作符中前4种的优先级相同,后2种也相同,并且前4种高 于后2种。 关系操作符的优先级低于算术运算符(先求值再关系运 算)高于赋值操作符(赋值操作符的优先级仅比逗号操作
符的优先级高)。
例4.1 关系表达式求值
(1)'A' > 'Z' (2) 3 -5u > 0
字符型数据在比较大小时通常被看作整型,字符型数据的
分析
表达式'a' || (a = 1) && (a += 2)中逻辑与&&的优先 级高于逻辑或||的,通常应先计算子表达式(a = 1) && (a = 2)的值,但是,逻辑或||处有序列点,表达式求值 时应先考虑序列点再考虑优先级。序列点的存在使得子表 达式'a'应先于后面的子表达式求值,因此原表达式等价于
也为1即真,故原表达式的值为1即真。
注意:
使用赋值表达式“客串”逻辑量只是为了直观地分析逻 辑表达式的求值过程,实际的程序中不应该也不必出现类
似的表达式。
此外,在应该出现逻辑量的地方,关系表达式a % 2 != 0显然要比等价的算术表达式a % 2有更好的可读性。 由于关系表达式的值为逻辑量1(真)或0(假),因此 有时也称关系表达式为逻辑表达式。
与
逻辑表达式(x > 99) && (x
当代数式99 < x < 1000成立时, x > 99为真且x < 1000也
为真,由真值表可知此时逻辑表达式(x > 99) && (x <
1000)的值为真为1。
表4-1为逻辑与&&的真值表
当代数式99 < x < 1000不成立时,则x > 99和x < 1000至少 有一个为假,由真值表可知此时逻辑表达式(x > 99) && (x < 1000)的值也为假为0。
if结构的形式
if(表达式) 语句
其中,if为C语言关键字,括号中的表达式通常为逻辑表达式, 即使此处出现了其它类型的表达式,表达式的值也会被认为是 逻辑量(即0为假,非0为真);语句为任意的单条C语言语句;