您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > C语言-ch04-1-关系、逻辑和条件表达式
2020/3/31上一节我们学到了赋值表达式和赋值语句=、+=、左值printf()%d、%f......scanf()&、%lfgetchar()putchar()2020/3/32第四章选择结构程序设计ConditionalOperatorandExpressionsBranching2020/3/33Tobeornottobe,thisisaquestion.2020/3/344.1选择结构和条件判断4.2用if语句实现选择结构4.3关系运算符和关系表达式4.4逻辑运算符和逻辑表达式4.5条件运算符和条件表达式4.6选择结构的嵌套4.7用switch语句实现多分支选择结构4.8选择结构程序综合举例内容2020/3/35关系运算符和表达式,=,,=,==,!=大于,大于等于,小于,小于等于,等于,不等于关系表达式(和逻辑表达式)的结果为0和10,表示假,即该关系不成立1,表示真,即该关系成立在所有涉及到真假判断的地方,0表示假,非0表示真表达式非0=条件为真(true)2020/3/36优先级P3781.()[]-.2.!~++--+(正号)-*&(类型)sizeof3.*/%4.+-5.6.==7.==!=8.&9.^10.|11.&&12.||13.?:14.=+=-=*=/=%=&=^=|===15.,2020/3/37关系、算术、赋值运算符的优先级inta=3,b=2,c=1;ca+b等效于c(a+b)ab==c等效于(ab)==ca==bc等效于a==(bc)a=bc等效于a=(bc)while(c=getchar()!=EOF)while((c=getchar())!=EOF)算术运算符(高)赋值运算符(低)关系运算符2020/3/38分清==和=inta=1;if(a==0)printf(OK);inta=0;if(a==0)printf(OK);inta=1;if(a=0)printf(OK);inta=0;if(a=0)printf(OK);2020/3/39分清==和=inta;a=0;a==1;inta;a==0;a=1;下面用法能起点小作用:inta=0;if(0==a)printf(OK);inta=0;if(0=a)printf(OK);编译出错2020/3/3104.4逻辑运算符逻辑运算,运算结果为1和0&&与运算,只有左右都为真,结果才是真(ab&&bc);a大于b,并且b大于c||或运算,只有左右都为假,结果才是假(ab||bc);a大于b,或者b大于c!求反,非(!a);如果a是0,结果非0,即1;如果a是非0,结果是0并不改变a的值2020/3/311修改后的逻辑运算真值表ab!aa&&ba||b非0非0011非000010非0101001002020/3/312逻辑运算符的优先级逻辑运算符的优先次序!&&||(!为三者中最高)与其他运算符的优先次序!(高)算术运算符关系运算符&&和||赋值运算符(低)2020/3/313逻辑表达式举例若a=4,则!a的值为0若a=4,b=5,则a&&b的值为1a和b值分别为4和5,则a||b的值为1a和b值分别为4和5,则!a||b的值为14&&0||2的值为153&&84-!002020/3/314怎么表示如果分数80小于等于grade且小于90,则五分制分数为A?if(80=grade90),错if(grade=80&&grade90),对if((grade=80)&&(grade90)),加括号最好怎么表示如果字符型变量c为‘Y’或‘y’?if(c=='Y'||'y'),错if(c=='Y'||c=='y'),对2020/3/315逻辑表达式的自动优化a&&b&&c只有a为真(非0)时,才需要判断b和c的值a||b||c只要a为真(非0),就不需要判断b和c的值例inta=1,b=2,c=3,d=4,m=1,n=1;(m=ab)&&(n=cd)2020/3/316判断闰年判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:P20①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year%100!=0)||(year%400==0)如果表达式值为1,则闰年;否则为非闰年174.4.3逻辑型变量与C++或Java不同,没有boolean类型(inC89/C90)inC99,增加_Bool类型如果想用bool类型,使用stdbool.h2020/3/3184.5条件表达式条件表达式的一般形式为表达式1?表达式2:表达式3把a和b中的最大值赋值给maxif(ab)max=a;elsemax=b;max=(ab)?a:b;这种表达式切忌用得过于繁杂2020/3/319条件运算符的执行顺序表达式1?表达式2:表达式3求解表达式1若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值2020/3/320优先级()[]-.!~++--+-*&(类型)sizeof*/%+-====!=&^|&&||?:=+=-=*=/=%=&=^=|===,2020/3/321结合方向为自右至左以下为合法的使用方法:ab?(max=a):(max=b);ab?printf(%d,a):printf(%d,b);2020/3/322例4.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#includestdio.hintmain(void){charch;printf(请输入一个字符,按回车结束:);scanf(%c,&ch);ch=(ch='A'&&ch='Z')?(ch+32):ch;printf(%c\n,ch);return0;}ifif(x%2==0)y+=x/2;如果条件为真,执行y+=x/2;否则,什么也不做2020/3/3232020/3/324例4.2输入两个实数,按数值从小到大的次序输出这两个实数#includestdio.hintmain(void){floata,b,t;scanf(%f%f,&a,&b);if(ab){t=a;a=b;b=t;}printf(%5.2f,%5.2f\n,a,b);return0;}2020/3/325两整数交换a和b交换,要求不占用额外内存空间方法1:a=a+b;b=a-b;a=a-b;方法2:位运算,自己完成2020/3/326例4.3输入3个数a,b,c,要求按由小到大的顺序输出。解题思路:可以先用伪代码写出算法:ifab,a和b对换(a是a、b中的小者)ifac,a和c对换(a是三者中最小者)ifbc,b和c对换(b是三者中次小者)顺序输出a,b,c排序问题2020/3/327#includestdio.hintmain(void){floata,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(ab)//a是a、b中的小者{t=a;a=b;b=t;}if(ac)//a是三者中最小者{t=a;a=c;c=t;}if(bc)//b是三者中次小者{t=b;b=c;c=t;}printf(%5.2f,%5.2f,%5.2f\n,a,b,c);return0;}独占一行如果没有这个{},会发生什么?2020/3/328else关键字if(x%2==0)y+=x/2;elsey+=(x+1)/2;可选如果条件为假,执行第二个分支y+=(x+1)/2;2020/3/329elseif关键字if(x%2==0)y+=x/2;elseif(x%4==1)y+=2∗((x+3)/4);elsey+=(x+1)/2;2020/3/330这一节我们学到了关系运算符和表达式,=,,=,==,!==和==的区别逻辑运算符和表达式&&||!?:if2020/3/331作业P111习题3P112习题6P112习题12
本文标题:C语言-ch04-1-关系、逻辑和条件表达式
链接地址:https://www.777doc.com/doc-4128513 .html