《C语言ch041关系、逻辑和条件表达式.ppt》由会员分享,可在线阅读,更多相关《C语言ch041关系、逻辑和条件表达式.ppt(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/1/161上一节我们学到了n赋值表达式和赋值语句赋值表达式和赋值语句n=、+=、左值、左值nprintf()n%d、%f.nscanf()n&、%lfngetchar()nputchar()2023/1/162第四章 选择结构程序设计Conditional Operator and ExpressionsBranching2023/1/163To be or not to be,this is a question.2023/1/164n4.1 选择结构和条件判断选择结构和条件判断n4.2 用用if语句语句实现选择结构实现选择结构n4.3 关系关系运算符和关系表达式运算符和关系表达式
2、n4.4 逻辑逻辑运算符和逻辑表达式运算符和逻辑表达式n4.5 条件条件运算符和条件表达式运算符和条件表达式n4.6 选择结构的嵌套选择结构的嵌套n4.7 用用switch语句语句实现多分支选择结构实现多分支选择结构n4.8 选择结构程序综合举例选择结构程序综合举例内容2023/1/165关系运算符和表达式n,=,条件为真条件为真(true)2023/1/166优先级 P3781.()-.2.!+-+(正号正号)-*&(类型类型)sizeof3.*/%4.+-5.6.=7.=!=8.&9.10.|11.&12.|13.?:14.=+=-=*=/=%=&=|=15.,2023/1/167关系、算
3、术、赋值运算符的优先级nint a=3,b=2,c=1;nca+b n等效于等效于c(a+b)nab=c n等效于等效于 (ab)=cna=bc n等效于等效于 a=(bc n等效于等效于 a=(bc)nwhile(c=getchar()!=EOF)nwhile(c=getchar()!=EOF)算术运算符算术运算符 (高高)赋值运算符赋值运算符 (低低)关系运算符关系运算符 2023/1/168分清=和=nint a=1;if(a=0)printf(OK);nint a=0;if(a=0)printf(OK);nint a=1;if(a=0)printf(OK);nint a=0;if(a=
4、0)printf(OK);2023/1/169分清=和=nint a;a=0;a=1;nint a;a=0;a=1;n下面用法能起点小作用:下面用法能起点小作用:nint a=0;if(0=a)printf(OK);nint a=0;if(0=a)printf(OK);编译出错编译出错编译出错编译出错2023/1/16104.4 逻辑运算符n逻辑运算,运算结果为逻辑运算,运算结果为1和和0n&n与运算,只有左右都为真,结果才是真与运算,只有左右都为真,结果才是真n(ab&bc);a大于大于b,并且,并且b大于大于cn|n或运算,只有左右都为假,结果才是假或运算,只有左右都为假,结果才是假n(a
5、b|bc);a大于大于b,或者,或者b大于大于cn!n求反,非求反,非n(!a);如果如果a是是0,结果非,结果非0,即,即1;如果如果a是是非非0,结果,结果是是0n并不改变并不改变a的值的值2023/1/1611修改后的逻辑运算真值表ab!aa&ba|b 非非0非非0011非非000010非非0101001002023/1/1612逻辑运算符的优先级n逻辑运算符的优先次序逻辑运算符的优先次序n!&|(!为三者中最高)为三者中最高)n与其他运算符的优先次序与其他运算符的优先次序 !(高)(高)算术运算符算术运算符关系关系运算符运算符&和和|赋值运算符赋值运算符 (低)(低)2023/1/16
6、13逻辑表达式举例n若若a=4,则,则!a的值为的值为n0n若若a=4,b=5,则,则a&b的值为的值为n1n a和和b值分别为值分别为4和和5,则,则a|b的值为的值为n1na和和b值分别为值分别为4和和5,则,则!a|b的值为的值为n1n4&0|2的值为的值为n1n5 3&8 4-!0n02023/1/1614n怎么表示怎么表示如果分数如果分数80小于等于小于等于grade且小于且小于90,则五则五分制分数为分制分数为A?nif(80=grade=80&grade=80)&(gradeb)&(n=cd)2023/1/1616判断闰年n判别某一年是否闰年,用逻辑表达式表示判别某一年是否闰年,
7、用逻辑表达式表示n闰年的条件是符合下面二者之一:闰年的条件是符合下面二者之一:P20能被能被4整除,但不能被整除,但不能被100整除,如整除,如2008能被能被400整除,如整除,如2000n(year%4=0&year%100!=0)|(year%400=0)n如果表达式值为如果表达式值为1,则闰年,则闰年;否则为非闰年否则为非闰年174.4.3 逻辑型变量n与与C+C+或或JavaJava不同不同,没有没有booleanboolean类类型型(in C89/C90)(in C89/C90)nin C99,in C99,增加增加_Bool _Bool 类型类型n如果想用如果想用boolboo
8、l类型,使用类型,使用stdbool.hstdbool.h2023/1/16184.5 条件表达式n条件表达式的一般形式为条件表达式的一般形式为n表达式表达式?表达式表达式:表达式表达式n把把a和和b中的最大值赋值给中的最大值赋值给maxnif(a b)max=a;else max=b;nmax=(a b)?a:b;n这种表达式切忌用得过于繁杂这种表达式切忌用得过于繁杂2023/1/1619条件运算符的执行顺序n表达式表达式?表达式表达式:表达式表达式n求解表达式求解表达式1n若为非若为非0(真)则求解表达式(真)则求解表达式2,此时表达式,此时表达式2的值就的值就作为整个条件表达式的值作为整
9、个条件表达式的值n若表达式若表达式1的值为的值为0(假),则求解表达式(假),则求解表达式3,表达式,表达式3的值就是整个条件表达式的值的值就是整个条件表达式的值2023/1/1620优先级n()-.n!+-+-*&(类型类型)sizeofn*/%n+-nn =n=!=n&nn|n&n|n?:n=+=-=*=/=%=&=|=n,2023/1/1621n结合方向为结合方向为自右至左自右至左n以下为合法的使用方法:以下为合法的使用方法:nab?(max=a):(max=b);nab?printf(%d,a):printf(%d,b);2023/1/1622n例例4.4 输入一个字符,判别它是否大写
10、字母,如果是,输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母将它转换成小写字母;如果不是,不转换。然后输出最如果不是,不转换。然后输出最后得到的字符。后得到的字符。#include int main(void)char ch;printf(请输入一个字符,按回车结束:请输入一个字符,按回车结束:);scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(%cn,ch);return 0;ifif(x%2=0)y+=x/2;n如果条件为真,执行如果条件为真,执行y+=x/2;n否则,什么也不做否则,什么也不做2023/1/16232023/1/
11、1624例4.2 输入两个实数,按数值从小到大的次序输出这两个实数#include int main(void)float a,b,t;scanf(%f%f,&a,&b);if(a b)t=a;a=b;b=t;printf(%5.2f,%5.2fn,a,b);return 0;2023/1/1625两整数交换na和和b交换,要求不占用额外内存空间交换,要求不占用额外内存空间n方法方法1:na=a+b;nb=a-b;na=a-b;n方法方法2:n位运算,自己完成位运算,自己完成2023/1/1626 例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。n解题思路:可以先用伪代码写出算法:解
12、题思路:可以先用伪代码写出算法:nif ab,a和和b对换对换 (a是是a、b中的小者)中的小者)nif ac,a和和c对换对换 (a是三者中最小者)是三者中最小者)nif bc,b和和c对换对换 (b是三者中次小者)是三者中次小者)n顺序输出顺序输出a,b,c排序问题2023/1/1627#include int main(void)float a,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(a b)/a是是a、b中的小者中的小者 t=a;a=b;b=t;if(a c)/a是三者中最小者是三者中最小者 t=a;a=c;c=t;if(b c)/b是三者中次小者是三者中次
13、小者 t=b;b=c;c=t;printf(%5.2f,%5.2f,%5.2fn,a,b,c);return 0;独占一行独占一行如果没有这个如果没有这个,会发,会发生什么?生什么?2023/1/1628else关键字if(x%2=0)y+=x/2;else y+=(x+1)/2;n可选可选n如果条件为假,执行第二个分支如果条件为假,执行第二个分支y+=(x+1)/2;2023/1/1629else if 关键字if(x%2=0)y+=x/2;else if(x%4=1)y+=2 (x+3)/4);elsey+=(x+1)/2;2023/1/1630这一节我们学到了n关系运算符和表达式关系运算符和表达式n,=,=,=,!=n=和和=的区别的区别n逻辑运算符和表达式逻辑运算符和表达式n&|!n?:nif2023/1/1631作业nP111 习题习题3nP112 习题习题6nP112 习题习题12