《C语言ch关系逻辑和条件表达式.pptx》由会员分享,可在线阅读,更多相关《C语言ch关系逻辑和条件表达式.pptx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/4/131To be or not to be,this is a question.第1页/共30页2023/4/1324.1 选择结构和条件判断4.2 用if语句实现选择结构4.3 关系运算符和关系表达式4.4 逻辑运算符和逻辑表达式4.5 条件运算符和条件表达式4.6 选择结构的嵌套4.7 用switch语句实现多分支选择结构4.8 选择结构程序综合举例内容第2页/共30页2023/4/133关系运算符和表达式,=,条件为真(true)第3页/共30页2023/4/134优先级 P3781.()-.2.!+-+(正号)-*&(类型)sizeof3.*/%4.+-5.6.=7.=
2、!=8.&9.10.|11.&12.|13.?:14.=+=-=*=/=%=&=|=15.,第4页/共30页2023/4/135关系、算术、赋值运算符的优先级int a=3,b=2,c=1;ca+b 等效于c(a+b)ab=c 等效于 (ab)=ca=bc 等效于 a=(bc 等效于 a=(bc)while(c=getchar()!=EOF)while(c=getchar()!=EOF)算术运算符算术运算符 (高高)赋值运算符赋值运算符 (低低)关系运算符关系运算符 第5页/共30页2023/4/136分清=和=int a=1;if(a=0)printf(OK);int a=0;if(a=0)
3、printf(OK);int a=1;if(a=0)printf(OK);int a=0;if(a=0)printf(OK);第6页/共30页2023/4/137分清=和=nint a;a=0;a=1;nint a;a=0;a=1;下面用法能起点小作用:nint a=0;if(0=a)printf(OK);nint a=0;if(0=a)printf(OK);编译出错编译出错编译出错编译出错第7页/共30页2023/4/1384.4 逻辑运算符逻辑运算,运算结果为1和0&与运算,只有左右都为真,结果才是真(ab&bc);a大于b,并且b大于c|或运算,只有左右都为假,结果才是假(ab|bc);
4、a大于b,或者b大于c!求反,非(!a);如果a是0,结果非0,即1;如果a是非0,结果是0并不改变a的值第8页/共30页2023/4/139修改后的逻辑运算真值表ab!aa&ba|b 非非0非非0011非非000010非非010100100第9页/共30页2023/4/1310逻辑运算符的优先级逻辑运算符的优先次序!&|(!为三者中最高)与其他运算符的优先次序 !(高)(高)算术运算符算术运算符关系关系运算符运算符&和和|赋值运算符赋值运算符 (低)(低)第10页/共30页2023/4/1311逻辑表达式举例若a=4,则!a的值为0若a=4,b=5,则a&b的值为1 a和b值分别为4和5,则
5、a|b的值为1a和b值分别为4和5,则!a|b的值为14&0|2的值为15 3&8 4-!00第11页/共30页2023/4/1312怎么表示如果分数80小于等于grade且小于90,则五分制分数为A?if(80=grade=80&grade=80)&(gradeb)&(n=cd)第13页/共30页2023/4/1314判断闰年判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:P20能被4整除,但不能被100整除,如2008能被400整除,如2000(year%4=0&year%100!=0)|(year%400=0)如果表达式值为1,则闰年;否则为非闰年第14页/共30页15
6、4.4.3 逻辑型变量n与C+或Java不同,没有boolean类型(in C89/C90)nin C99,增加_Bool 类型n如果想用bool类型,使用stdbool.h第15页/共30页2023/4/13164.5 条件表达式条件表达式的一般形式为表达式?表达式:表达式把a和b中的最大值赋值给maxif(a b)max=a;else max=b;max=(a b)?a:b;这种表达式切忌用得过于繁杂第16页/共30页2023/4/1317条件运算符的执行顺序表达式?表达式:表达式求解表达式1若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值若表达式1的值为0(假),则
7、求解表达式3,表达式3的值就是整个条件表达式的值第17页/共30页2023/4/1318优先级()-.!+-+-*&(类型)sizeof*/%+-=!=&|&|?:=+=-=*=/=%=&=|=,第18页/共30页2023/4/1319结合方向为自右至左以下为合法的使用方法:ab?(max=a):(max=b);ab?printf(%d,a):printf(%d,b);第19页/共30页2023/4/1320例4.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#include int main(void)char ch;printf
8、(请输入一个字符,按回车结束:请输入一个字符,按回车结束:);scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(%cn,ch);return 0;第20页/共30页ifif(x%2=0)y+=x/2;如果条件为真,执行y+=x/2;否则,什么也不做2023/4/1321第21页/共30页2023/4/1322例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,
9、b);return 0;第22页/共30页2023/4/1323两整数交换a和b交换,要求不占用额外内存空间方法1:a=a+b;b=a-b;a=a-b;方法2:位运算,自己完成第23页/共30页2023/4/1324 例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排序问题第24页/共30页2023/4/1325#include int main(void)float a,b,c,t;scanf(%f
10、,%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是三者中次小者 t=b;b=c;c=t;printf(%5.2f,%5.2f,%5.2fn,a,b,c);return 0;独占一行独占一行如果没有这个如果没有这个,会发,会发生什么?生什么?第25页/共30页2023/4/1326else关键字if(x%2=0)y+=x/2;else y+=(x+1)/2;可选如果条件为假,执行第二个分支y+=(x+1)/2;第26页/共30页2023/4/1327else if 关键字if(x%2=0)y+=x/2;else if(x%4=1)y+=2(x+3)/4);elsey+=(x+1)/2;第27页/共30页2023/4/1328这一节我们学到了关系运算符和表达式,=,=,=,!=和=的区别逻辑运算符和表达式&|!?:if第28页/共30页2023/4/1329作业P111 习题3P112 习题6P112 习题12第29页/共30页2023/4/1330感谢您的欣赏!第30页/共30页