C语言ch041关系、逻辑和条件表达式.ppt
2019/10/12,1,上一节我们学到了,赋值表达式和赋值语句 、、左值 printf d、f scanf cab 等效于cab abc 等效于 abc abc 等效于 abc whilecgetchar EOF while cgetchar EOF,2019/10/12,8,分清 和 ,int a 1; if a 0 printf“OK“; int a 0; if a 0 printf“OK“;,int a 1; if a 0 printf“OK“; int a 0; if a 0 printf“OK“;,2019/10/12,9,分清 和 ,int a; a 0; a 1;,int a; a 0; a 1;,下面用法能起点小作用,int a 0; if 0 a printf“OK“;,int a 0; if 0 a printf“OK“;编译出错2019/10/12,10,4.4 逻辑运算符,逻辑运算,运算结果为1和0 如果a是非0,结果是0 并不改变a的值,2019/10/12,11,修改后的逻辑运算真值表,2019/10/12,12,逻辑运算符的优先级,逻辑运算符的优先次序 (为三者中最高) 与其他运算符的优先次序, (高) 算术运算符 关系运算符 和 赋值运算符 (低),2019/10/12,13,逻辑表达式举例,若a4,则a的值为 0 若a4,b5,则a b的值为 1 a和b值分别为4和5,则ab的值为 1 a和b值分别为4和5,则ab的值为 1 4 0 2的值为 1 5 3 8 4 - 0 0,2019/10/12,14怎么表示“如果分数80小于等于grade且小于90,则五分制分数为A“ if 80 80 grade80 grade90,加括号最好 怎么表示“如果字符型变量c为Y或y“ if c Y y,错 if c Y c y,对,2019/10/12,15,逻辑表达式的自动优化,a mab ncd,2019/10/12,16,判断闰年,判别某一年是否闰年,用逻辑表达式表示 闰年的条件是符合下面二者之一P20 能被4整除,但不能被100整除,如2008 能被400整除,如2000 year 4 0 否则为非闰年,17,4.4.3 逻辑型变量,与C或Java不同, 没有boolean类型 in C89/C90 in C99, 增加_Bool 类型 如果想用bool类型,使用stdbool.h2019/10/12,18,4.5 条件表达式,条件表达式的一般形式为 表达式表达式 表达式 把a和b中的最大值赋值给max if a b max a; else max b; max a b a b; 这种表达式切忌用得过于繁杂,2019/10/12,19,条件运算符的执行顺序,表达式表达式 表达式 求解表达式1 若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值 若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,2019/10/12,20,优先级, - . - * ab printf“d“,a printf“d“,b;,2019/10/12,22,例4.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,include int mainvoid char ch; printf“请输入一个字符,按回车结束“; scanf“c“, ,if,if x 2 0 y x/2; 如果条件为真,执行y x/2; 否则,什么也不做,2019/10/12,23,2019/10/12,24,例4.2 输入两个实数,按数值从小到大的次序输出这两个实数,include int mainvoid float a, b, t; scanf“ff“, ,2019/10/12,25,两整数交换,a和b交换,要求不占用额外内存空间 方法1 a a b; b a - b; a a - b; 方法2 位运算,自己完成,2019/10/12,26,例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。,解题思路可以先用伪代码写出算法 if ab,a和b对换 (a是a、b中的小者) if ac,a和c对换 (a是三者中最小者) if bc,b和c对换 (b是三者中次小者) 顺序输出a,b,c,排序问题,2019/10/12,27,include int mainvoid float a, b, c, t; scanf“f,f,f“, ,独占一行,如果没有这个,会发生什么,2019/10/12,28,else关键字,if x2 0 y x/2; else y x1/2; 可选 如果条件为假,执行第二个分支y x1/2;,2019/10/12,29,else if 关键字,if x2 0 y x/2; else if x4 1 y 2 x3/4; else y x1/2;,2019/10/12,30,这一节我们学到了,关系运算符和表达式 ,,, 和的区别 逻辑运算符和表达式 if,2019/10/12,31,作业,P111 习题3 P112 习题6 P112 习题12,