您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C语言第讲关系运算与逻辑运算if语句
4.1关系运算和逻辑运算4.2if语句第四章选择结构程序设计4.1.1逻辑值及其在C语言中的表示关系运算和逻辑运算的运算结果都是一个逻辑值,逻辑值只有两个值,即:“真”和“假”。在C语言中,用数值1来表示“真”,用数值0来表示“假”。因此逻辑值也可以作为一个整数参与算术运算。反之,对于参与关系运算或逻辑运算的任意一个表达式,如果该表达式的值为零,就代表一个逻辑“假”值;只要表达式的值不是零,无论是正数还是负数,都代表一个逻辑“真”值。4.1.2关系运算符与关系表达式所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。例如,“ab”中的“”表示一个大于关系运算。如果a的值是8,b的值是5,则这个关系运算的结果为“真”,即数值1,表示条件成立;如果a的值是6,b的值是9,则运算的结果为“假”,即数值0,表示条件不成立。1.关系运算符及其优先级C语言提供了六种关系运算符,如表4.1所示。注意:有些运算符是由两个字符组合而成的,如:=;其两个字符之间不能有空格。在关系运算符中,前4个优先级相同,后2个也相同,且前4个关系运算符的优先级高于后2个。所有关系运算符的优先级都比算术运算符的优先级低、但都比赋值运算符的优先级高。表4.1关系运算符及其优先级1092.关系表达式用关系运算符将两个操作数(常量、变量或表达式)连接起来,进行关系运算的式子,称为关系表达式。例如,假设n1=5,n2=8,n3=10,则:(1)关系表达式n1==n2的值为0。(2)关系表达式n1=n3的值为1。(3)关系表达式n1+n2n3的值为1。(4)关系表达式n1==n2n3的值等为0。注意:由于存在存储误差和转换误差,不能直接用关系运算符“==”来判断两个实型数是否相等。单精度实数:fabs(x-y)0.000001双精度实数:fabs(a-b)1e-141.逻辑运算符及其优先级C语言提供了三种基本的逻辑运算符。逻辑代数的其它逻辑运算都可以转化为这三种逻辑运算的组合。4.1.3逻辑运算符与逻辑表达式优先级次序:!(逻辑非)14算术运算符13/12关系运算符10/9&&(逻辑与)5||(逻辑或)4赋值运算符2表4.2逻辑运算符及其优先级14右结合452.逻辑表达式由逻辑运算符和运算对象所组成的表达式称为逻辑表达式。逻辑运算的对象可以是C语言中任意合法的表达式。例如:在关系表达式(xy)为真的条件下,若a值为10,b值为16,表达式(ab)&&(xy)的值为“假”,用数值0来表示;若a值为10,b值为6,表达式(ab)&&(xy)的值则为“真”,用数值1来表示。表4.3逻辑运算符的运算规则数学表达式0x10表示x的值应该在0到10的范围内。但在C语言中不能用0x10这样一个关系表达式来表述以上的数学关系。因为无论x是什么值,按照C语言的运算规则,左边的表达式0x的运算结果只能为0或1,因而表达式0x10的运算结果总是1。只有用逻辑表达式0x&&xl0才能正确地表述以上数学关系。用逻辑表达式来表示多个条件的组合如判断一个年份是否是闰年的逻辑表达式为:(year%4==0)&&(year%100!=0)||(year%400==0)“非完全求解”法:当求出某个逻辑运算符的左边的运算量的值就能够明确地确定这个逻辑运算的结果时,就结束求解过程,直接给出运算结果。例如:(1)a&&b&&c若a为“假”,直接求得a&&b及整个表达式的值为“假”;若a为“真”,b为“假”,a&&b及整个表达式的值为“假”。只有当a为“真”时,才需要判别b的值;只有当a&&b的值为“真”时,才需要判别c的值。(2)a||b||c若a为“真”,直接求得a||b及整个表达式的值为“真”;若a为“假”,b为“真”,a||b及整个表达式的值为“真”;只有当a为“假”时,才需要判别b的值;只有当a||b的值为“假”时,才需要判别c的值。逻辑表达式的“非完全求解”法例:“非完全求解”#includestdio.hvoidmain(){intx,a,b,c;a=1;b=2;c=3;x=(a-1)&&(++b)&&(++c);printf(1:a=%d,b=%d,c=%d,x=%d\n,a,b,c,x);a=1;b=2;c=3;x=a&&(b-2)&&(++c);printf(2:a=%d,b=%d,c=%d,x=%d\n,a,b,c,x);a=1;b=2;c=3;x=a&&(++b)&&(++c);printf(3:a=%d,b=%d,c=%d,x=%d\n,a,b,c,x);}4.2if语句1.if语句的一般形式if(表达式)语句1[else语句2]if语句可以根据给定的条件进行判断,决定执行某个分支程序段,以实现选择结构的程序设计。表达式可以是任何类型的C表达式语句1、语句2都可以是复合语句else子句不能单独使用(可选)if语句的执行过程:先求表达式的值main(){intn1,n2,n3,max;printf(Pleaseinputthreenumbers:);scanf(%d,%d,%d,&n1,&n2,&n3);if(n1n2)max=n1;elsemax=n2;if(n3max)max=n3;printf(max=%d\n,max);}程序运行情况如下:Pleaseinputthreenumbers:11,22,18CRmax=22例4.1输入三个整数,求最大值/*简化形式*/max=n1;if(n2max)max=n2;例4.2输入三个整数,在变量a,b,c中排序main(){inta,b,c,t;printf(inputa,b,c:);scanf(%d%d%d,&a,&b,&c);printf(a=%d,b=%d,c=%d\n,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=%d\n,a,b,c);}程序运行情况如下:inputa,b,c:623424CRa=62,b=34,c=24a=24,b=34,c=62if语句中的if子句和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)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式4)语句4...else语句n执行过程:从上向下逐一对if后的表达式进行检测,当其中某一个表达式的值为非零时,就执行与之对应的if子句,阶梯形子句中的其余部分就被跳越过去。如果所有表达式的值都为零,则执行最后的else子句,即语句n;如果最内层的if语句没有else子句,那么将不进行任何操作。(1)用嵌套的if语句形成多分支语句例4.3编写程序,根据输入的学生成绩,给出相应的等级。90分以上的等级为A,60分以下的等级为E,其余每10分为一个等级。main(){intg;printf(Enterg:);scanf(%d,&g);printf(g=%d:,g);if(g=90)printf(A\n);elseif(g=80)printf(B\n);elseif(g=70)printf(C\n);elseif(g=60)printf(D\n);elseprintf(E\n);}程序运行情况如下:Enterg:78CRg=78:C(2)在if子句中嵌套不含else子句的if语句用花括号把内层if语句括起来后,使得此内层if语句在语法上成为一条独立的语句,从而使得else子句只能与外层的if配对。注意:if子句中的花括号if(表达式1)if(表达式2)语句1else语句2语句形式如下:if(表达式1){if(表达式2)语句1}else语句2例4.4编写一程序实现符号函数的功能。main(){intx,y;printf(Enterx:);scanf(%d,&x);y=-1;if(x!=0){if(x0)y=1;}elsey=0;printf(x=%d,y=%d\n,x,y);}程序运行情况如下:Enterx:8CRx=8,y=1
本文标题:C语言第讲关系运算与逻辑运算if语句
链接地址:https://www.777doc.com/doc-7230652 .html