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