《C语言ch041关系逻辑和条件表达式课件》由会员分享,可在线阅读,更多相关《C语言ch041关系逻辑和条件表达式课件(31页珍藏版)》请在金锄头文库上搜索。
1、上一节我们学到了n赋值表达式和赋值语句赋值表达式和赋值语句n=、+=、左值、左值nprintf()n%d、%f.nscanf()n&、%lfngetchar()nputchar()2024/9/181C语言ch041关系、逻辑和条件表达式第四章 选择结构程序设计Conditional Operator and ExpressionsBranching2024/9/182C语言ch041关系、逻辑和条件表达式To be or not to be, this is a question.2024/9/183C语言ch041关系、逻辑和条件表达式n4.1 选择结构和条件判断选择结构和条件判断n4.2
2、 用用if语句语句实现选择结构实现选择结构n4.3 关系关系运算符和关系表达式运算符和关系表达式n4.4 逻辑逻辑运算符和逻辑表达式运算符和逻辑表达式n4.5 条件条件运算符和条件表达式运算符和条件表达式n4.6 选择结构的嵌套选择结构的嵌套n4.7 用用switch语句语句实现多分支选择结构实现多分支选择结构n4.8 选择结构程序综合举例选择结构程序综合举例内容2024/9/184C语言ch041关系、逻辑和条件表达式关系运算符和表达式n,=, 条件为真条件为真(true)2024/9/185C语言ch041关系、逻辑和条件表达式优先级 P3781.( ) - .2.! + - +(正号正号
3、) - * & (类型类型) sizeof3.* / %4.+ -5.6. =7.= !=8.&9.10.|11.&12.|13.? :14.= += -= *= /= %= &= = |= =15.,2024/9/186C语言ch041关系、逻辑和条件表达式关系、算术、赋值运算符的优先级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)算术运算
4、符算术运算符 (高高)赋值运算符赋值运算符 (低低)关系运算符关系运算符 2024/9/187C语言ch041关系、逻辑和条件表达式分清= 和 =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 = 0)printf(OK);2024/9/188C语言ch041关系、逻辑和条件表达式分清= 和 =nint a;a = 0;a = 1;nint a;a = 0;a = 1;n下面用法能起点小作用:下面用法能起点小作用:ni
5、nt a = 0;if (0 = a)printf(OK);nint a = 0;if (0 = a)printf(OK);编译出错编译出错编译出错编译出错2024/9/189C语言ch041关系、逻辑和条件表达式4.4 逻辑运算符n逻辑运算,运算结果为逻辑运算,运算结果为1和和0n&n与运算,只有左右都为真,结果才是真与运算,只有左右都为真,结果才是真n(ab & bc);a大于大于b,并且,并且b大于大于cn|n或运算,只有左右都为假,结果才是假或运算,只有左右都为假,结果才是假n(ab | bc); a大于大于b,或者,或者b大于大于cn!n求反,非求反,非n(!a);如果如果a是是0,
6、结果非,结果非0,即,即1;如果如果a是是非非0,结果,结果是是0n并不改变并不改变a的值的值2024/9/1810C语言ch041关系、逻辑和条件表达式修改后的逻辑运算真值表ab! aa & ba | b 非非0非非0011非非000010非非0101001002024/9/1811C语言ch041关系、逻辑和条件表达式逻辑运算符的优先级n逻辑运算符的优先次序逻辑运算符的优先次序n! & | (!为三者中最高)为三者中最高)n与其他运算符的优先次序与其他运算符的优先次序 ! (高)(高)算术运算符算术运算符关系关系运算符运算符 & 和和 |赋值运算符赋值运算符 (低)(低)2024/9/18
7、12C语言ch041关系、逻辑和条件表达式逻辑表达式举例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 - !0n02024/9/1813C语言ch041关系、逻辑和条件表达式n怎么表示怎么表示如果分数如果分数80小于等于小于等于grade且小于且小于90,则五则五分制分数为分制分数为A?nif (80 = grade =80 & grade=80) & (gr
8、adeb) & (n=cd)2024/9/1815C语言ch041关系、逻辑和条件表达式判断闰年n判别某一年是否闰年,用逻辑表达式表示判别某一年是否闰年,用逻辑表达式表示n闰年的条件是符合下面二者之一:闰年的条件是符合下面二者之一:P20能被能被4整除,但不能被整除,但不能被100整除,如整除,如2008能被能被400整除,如整除,如2000n(year % 4 = 0 & year % 100 !=0) | (year % 400 = 0)n如果表达式值为如果表达式值为1,则闰年,则闰年;否则为非闰年否则为非闰年2024/9/1816C语言ch041关系、逻辑和条件表达式4.4.3逻辑型变量
9、n与与C+C+或或JavaJava不同不同, , 没有没有booleanboolean类类型型 (in C89/C90) (in C89/C90)nin C99, in C99, 增加增加_Bool _Bool 类型类型n如果想用如果想用boolbool类型,使用类型,使用stdbool.hstdbool.h17C语言ch041关系、逻辑和条件表达式4.5 条件表达式n条件表达式的一般形式为条件表达式的一般形式为n表达式表达式?表达式表达式: 表达式表达式n把把a和和b中的最大值赋值给中的最大值赋值给maxnif (a b) max = a;else max = b;nmax = (a b)
10、? a : b; n这种表达式切忌用得过于繁杂这种表达式切忌用得过于繁杂2024/9/1818C语言ch041关系、逻辑和条件表达式条件运算符的执行顺序n表达式表达式?表达式表达式: 表达式表达式n求解表达式求解表达式1n若为非若为非0(真)则求解表达式(真)则求解表达式2,此时表达式,此时表达式2的值就的值就作为整个条件表达式的值作为整个条件表达式的值n若表达式若表达式1的值为的值为0(假),则求解表达式(假),则求解表达式3,表达式,表达式3的值就是整个条件表达式的值的值就是整个条件表达式的值2024/9/1819C语言ch041关系、逻辑和条件表达式优先级n( ) - .n! + - +
11、 - * & (类型类型) sizeofn* / %n+ -nn =n= !=n&nn|n&n|n? :n= += -= *= /= %= &= = |= =n,2024/9/1820C语言ch041关系、逻辑和条件表达式n结合方向为结合方向为自右至左自右至左n以下为合法的使用方法:以下为合法的使用方法:nab ? (max=a):(max=b);nab ? printf(%d,a): printf(%d,b);2024/9/1821C语言ch041关系、逻辑和条件表达式n例例4.4 输入一个字符,判别它是否大写字母,如果是,输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母将它转换
12、成小写字母;如果不是,不转换。然后输出最如果不是,不转换。然后输出最后得到的字符。后得到的字符。#include int main(void) char ch; printf(请输入一个字符,按回车结束:请输入一个字符,按回车结束:); scanf(%c, &ch); ch = (ch=A & ch=Z) ? (ch+32) : ch; printf(%cn, ch); return 0;2024/9/1822C语言ch041关系、逻辑和条件表达式ifif (x % 2 =0) y += x/2;n如果条件为真,执行如果条件为真,执行y += x/2;n否则,什么也不做否则,什么也不做2024
13、/9/1823C语言ch041关系、逻辑和条件表达式例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;2024/9/1824C语言ch041关系、逻辑和条件表达式两整数交换na和和b交换,要求不占用额外内存空间交换,要求不占用额外内存空间n方法方法1:na = a + b;nb = a - b;na = a - b;n方法方法2:n位运
14、算,自己完成位运算,自己完成2024/9/1825C语言ch041关系、逻辑和条件表达式 例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。n解题思路:可以先用伪代码写出算法:解题思路:可以先用伪代码写出算法:nif ab,a和和b对换对换 (a是是a、b中的小者)中的小者)nif ac,a和和c对换对换 (a是三者中最小者)是三者中最小者)nif bc,b和和c对换对换 (b是三者中次小者)是三者中次小者)n顺序输出顺序输出a,b,c排序问题2024/9/1826C语言ch041关系、逻辑和条件表达式#include int main(void) float a, b, c, t;
15、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是三者中次小者是三者中次小者 t = b; b = c; c = t; printf(%5.2f,%5.2f,%5.2fn, a, b, c); return 0;独占一行独占一行如果没有这个如果没有这个,会发,会发生什么?生什么?2024/9/1827C语言ch041关系、逻辑和条件表达式else关键字if (x%2 = 0
16、) y += x/2; else y += (x+1)/2; n可选可选n如果条件为假,执行第二个分支如果条件为假,执行第二个分支y += (x+1)/2; 2024/9/1828C语言ch041关系、逻辑和条件表达式else if 关键字if (x%2 = 0) y += x/2; else if (x%4 = 1) y+= 2 (x+3)/4);elsey += (x+1)/2;2024/9/1829C语言ch041关系、逻辑和条件表达式这一节我们学到了n关系运算符和表达式关系运算符和表达式n,=,=,=,!=n=和和=的区别的区别n逻辑运算符和表达式逻辑运算符和表达式n& | !n?:nif2024/9/1830C语言ch041关系、逻辑和条件表达式作业nP111 习题习题3nP112 习题习题6nP112 习题习题122024/9/1831C语言ch041关系、逻辑和条件表达式