《C语言第7讲 关系运算与逻辑运算 if 语句》由会员分享,可在线阅读,更多相关《C语言第7讲 关系运算与逻辑运算 if 语句(20页珍藏版)》请在金锄头文库上搜索。
1、第7讲,关系运算与逻辑运算 if 语句,第四章 选择结构程序设计,4.1.1 逻辑值及其在C语言中的表示,关系运算和逻辑运算的运算结果都是一个逻辑值,逻辑值只有两个值,即:“真”和“假”。在C语言中,用数值1来表示“真”,用数值0来表示“假”。 因此逻辑值也可以作为一个整数参与算术运算。反之,对于参与关系运算或逻辑运算的任意一个表达式,如果该表达式的值为零,就代表一个逻辑“假”值;只要表达式的值不是零,无论是正数还是负数,都代表一个逻辑“真”值。,4.1.2 关系运算符与关系表达式,所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。 例如,“a b”
2、中的“”表示一个大于关系运算。如果a的值是8,b的值是5,则这个关系运算的结果为“真”,即数值1,表示条件成立;如果a的值是6,b的值是9,则运算的结果为“假”,即数值0 ,表示条件不成立。,1关系运算符及其优先级,C语言提供了六种关系运算符,如表4.1所示。,注意:有些运算符是由两个字符组合而成的,如:=;其两个字符之间不能有空格。在关系运算符中,前4个优先级相同,后2个也相同,且前4个关系运算符的优先级高于后2个。 所有关系运算符的优先级都比算术运算符的优先级低、但都比赋值运算符的优先级高。,2关系表达式,用关系运算符将两个操作数(常量、变量或表达式)连接起来,进行关系运算的式子,称为关系
3、表达式。例如,假设n1=5,n2=8,n3=10,则: (1)关系表达式n1=n2的值为0。 (2)关系表达式n1n3的值为1。 (4)关系表达式n1= n2n3的值等为0。,注意:由于存在存储误差和转换误差,不能直接用关系运算符“=”来判断两个实型数是否相等。 单精度实数:fabs(x-y)0.000001 双精度实数:fabs(a-b)y)为真的条件下,若a值为10,b值为16,表达式(ab)&(xy)的值为“假”,用数值0来表示;若a值为10,b值为6,表达式(ab)&(xy)的值则为“真”,用数值1来表示。,表4.3 逻辑运算符的运算规则,数学表达式 0x10表示x的值应该在0到10的
4、范围内。但在C语言中不能用0x10这样一个关系表达式来表述以上的数学关系。因为无论x是什么值,按照C语言的运算规则,左边的表达式0x的运算结果只能为0或1,因而表达式0x10的运算结果总是1。 只有用逻辑表达式0x & xn2) max=n1; else max=n2; if (n3max) max=n3; printf(max=%dn,max);,程序运行情况如下:Please input three numbers:11,22,18max=22,例4.1 输入三个整数,求最大值,/*简化形式*/max=n1; if (n2max) max=n2;,例4.2 输入三个整数,在变量a,b,c中
5、排序,main() int a, b, c, t; printf (input a, b, c: ); scanf (%d %d %d , &a, &b, &c ); printf (a=%d, b=%d, c=%dn , a, b, c); if (ab) t=a; a=b; b=t; if (ac) t=a; a=c; c=t; if (bc) t=b; b=c; c=t; printf (a=%d, b=%d, c=%dn , a, b, c); ,程序运行情况如下:input a, b, c: 62 34 24a=62,b=34,c=24a=24,b=34,c=62,if语句中的if子
6、句和else子句可以是任意合法的C语句,当然也可以是另外一个if语句,通常称这种语句为嵌套的if语句。 内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。在运用嵌套的if语句时,应该特别注意else子句和if子句的配套问题。如果在嵌套的if语句中没有用一对花括号强制地结束某个内嵌的不带else子句的if语句,则else子句总是与在它前面的、离它最近的、尚未与其它else子句匹配的if子句相匹配。 以下介绍两种值得关注的嵌套if语句。,2. 嵌套的if语句,在if语句的else子句中嵌套多个具有else子句的if语句语句形式如下:if(表达式1) 语句1else if(表达式2)
7、 语句2 else if(表达式3) 语句3 else if(表达式4) 语句4 . else 语句n 执行过程:从上向下逐一对if后的表达式进行检测,当其中某一个表达式的值为非零时,就执行与之对应的if子句,阶梯形子句中的其余部分就被跳越过去。如果所有表达式的值都为零,则执行最后的else子句,即语句n;如果最内层的if语句没有else子句,那么将不进行任何操作。,(1) 用嵌套的if语句形成多分支语句,例4.3,编写程序,根据输入的学生成绩,给出相应的等级。90分以上的等级为A,60分以下的等级为E,其余每10分为一个等级。,main( ) int g; printf( Enter g:)
8、; scanf( %d , &g); printf( g=%d: , g); if(g=90) printf( An ); else if(g=80) printf( Bn ); else if(g=70) printf( Cn ); else if(g=60) printf( Dn ); else printf( En ); ,程序运行情况如下:Enter g:78g=78:C,(2) 在if子句中嵌套不含else子句的if语句,用花括号把内层if语句括起来后,使得此内层if语句在语法上成为一条独立的语句,从而使得else子句只能与外层的if配对。,例4.4 编写一程序实现符号函数的功能。,main() int x, y ; printf(Enter x:); scanf(%d, &x ); y= -1; if (x!=0) if(x0) y=1; else y=0; printf(x=%d, y=%dn, x, y);,程序运行情况如下:Enter x:8x= 8, y= 1,