C语言程序设计教程_第4章

上传人:小*** 文档编号:243135703 上传时间:2024-09-16 格式:PPT 页数:34 大小:130KB
返回 下载 相关 举报
C语言程序设计教程_第4章_第1页
第1页 / 共34页
C语言程序设计教程_第4章_第2页
第2页 / 共34页
C语言程序设计教程_第4章_第3页
第3页 / 共34页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第四章 选择结构程序设计,4.1,关系运算符与关系表达式,4.2,逻辑运算符与逻辑表达式,4.3 if,语句,4.4 switch,语句,4.5,结构嵌套程序举例,选择结构:,三种基本结构之一,根据所指定的条件是否满足,决定从给定的两组或两组以上操作中选一。,实现方式:,if (,关系表达式),语句1,else,语句2,例如:判定某一年是否为闰年:,if(y%4=0&y%100!=0|y%400=0),printf,(“,是闰年,n”) ;,else,printf,(“,不是闰年,n”);,4.1,关系运算及其表达式,所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。,例如,“,a b”,中的“”表示一个大于关系运算。如果,a,的值是5,,b,的值是3,则大于关系运算“”的结果为“真”,即条件成立;如果,a,的值是2,,b,的值是3,则大于关系运算“”的结果为“假”,即条件不成立。,4.1.1,关系运算符及其优先次序,1关系运算符,2优先级,(1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。,例如:,int,a=1;,表达式,a=30,的值,真,?假?,(2)与其它种类运算符的优先级关系。,算术运算符关系运算符赋值运算符,例如:,a=81+2 a= ?,大于,小于,大于等于,小于等于,等于,不等于,=,b,(2),比较,a+b、c+d,的值,:,a+b,c+d,(3),比较,a=3、b=5,的值,:a=3=b,2,关系表达式的值逻辑值(非“真”即“假”)。,由于语言没有逻辑型数据,所以用整数“”表示“逻辑真”,用整数“”表示“逻辑假”。,例如,假设,a=3,b=4,c=5,,则:,(1),ab,的值为0。,(2)(,ab)!=c,的值为1。,(3),abc,的值为1。,(4)(,ab)+c,的值为6,因为,a=0”。,如果需要描述“0,x=0) & (x5) ,! (x= =0),,(year%4=0)&(year%100!=0)|(year%400=0),(2),运算规则,1)&:,当且仅当两个运算量的值都为“真”时,运算结果为,“真”,否则为“假”。,2),| :,当且仅当两个运算量的值都为“假”时,运算结果为“假”,,否则为“真”。,3) ! :,当运算量的值为“真”时,运算结果为“假”;当运算量,的值为“假”时,运算结果为“真”。,例如,假定,x=5,,则:,x=0&x=0&x=0 | x4 | 1&!0,真,?.假?,(2)与其它种类运算符的优先关系,! 算术运算 关系运算 & | 赋值运算,例如:,a=1&52+!8,a,的值?,C,语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。但是,我们表示的只是,逻辑量,,表达式的值是什么还要根据它的类型而定。假定,a=3, b=4, i=5,。,-23,算术表达式,a=(3.5*2)/2,赋值表达式,a0? 1:0,条件表达式,a+2,b+2,逗号表达式,i+,+,i,增1运算表达式,5(,c45),算术表达式,53,关系表达式,!2,逻辑表达式,4.2.2,逻辑表达式,1逻辑表达式的概念,所谓逻辑表达式是指,用逻辑运算符将一个或多个表达式连接起来,进行逻辑运算的式子。在,C,语言中,用逻辑表达式表示多个条件的组合。,逻辑表达式的值也是一个逻辑值(非“真”即“假”)。,2逻辑量的真假判定和非,语言中,判断一个数据的“真”或“假”时,以和非为根据:如果为,则判定为“逻辑假”;如果为非,则判定为“逻辑真”。但在表示运算结果时,用整数“”表示“逻辑真”、用“”表示“逻辑假”。,例如:假设,a=12,,则:,!,a,的值为 ,,a=1a20,的值为1。,3说明,(1)逻辑运算符两侧的操作数,除可以是和非的整数,外,也可以是其它任何类型的数据,如实型、字符型等。,例如:,a|0、,b&0.01、,c&0,(2)在计算逻辑表达式时,只有在必须执行下一个表达式才,能求解时,才求解该表达式(即并不是所有的表达式都,被求解)。换句话说:,1)对于逻辑与运算,如果第一个操作数被判定为“假”,系,统不再判定或求解第二操作数。,2)对于逻辑或运算,如果第一个操作数被判定为“真”,系,统不再判定或求解第二操作数。,例如,假设,n1=1 、n2=2、n3 =3 、n4=4 、x=1 、y=1,则求解表达式,“(,x=n1n2)&(y=n3n4)”,后,,x,的值变为,而,y,的值不变,仍等于1!,4.3 if,语句,4.3.1 if,语句的三种形式,(1) 第1种基本形式,if (,表达式)语句,流程图如下图所示。,如果表达式计算得到真,那么就执行语句,否则不执行语句。语句可以是简单语句,也可以是由花括号包围起来的复合语句。,例如:,if(x,y) z=x;,if(x,y), z=x;,x+;,printf(%dn,z,);,表达式,语句,假(,0,),真(,1,),输入一个数,如果该数大于等于,0,,则输出它的平方根,如果它小于,0,,则不作任何处理。,分析:,1,)需要一个变量存储输入的数,定义一个变量,x,。,2,)使用选择,if,语句来实现。,例,1,(2) 第2种形式为 :,if else,ifelse,语句的一般形式是: 流程图如下:,if (,表达式 ),语句1,else,语句2,如果“表达式”为真,则执行语句1;,如果“表达式”假,则执行,else,后面的语句2。,例如:,if(xy) z=x;,else z=y;,表达式,语句,1,语句,2,假(,0,),真(,1,),例,3,:输入,2,个数,比较大小,然后将较大的数输出。,分析:,1,)需要定义,2,个变量,a,,,b,来存放输入的,2,个数。,2,)若,a,大于,b,,输出,a,,否则输出,b,。,例,2,:修改例,1,,当输入的数小于,0,时,提示信息错误。,(3),第3种形式为,ifelseif,形式,if else if,语句的一般形式是:,if(,表达式1) 语句1,else if(,表达式2) 语句2,else if(,表达式3) 语句3, ,else if(,表达式,n,)语句,n,else,语句,n+1,表达式,1,语句,1,语句,2,假(,0,),真,1,表达式,2,真,1,表达式,n,假(,0,),语句,n,语句,n+1,0,真,1,例,4,:根据学生成绩划分优、良、中、及格、差等级。,int,score;,if (score=90) grade=“,优”;,else if (score=80) grade=“,良”;,else if (score=70) grade=“,中”;,else if (score=60) grade=“,及格”;,else grade=“,差”;,依次判断表达式的值,当出现某个值为真时,则执行其对应,的语句,然后跳到整个,if,语句之外继续执行程序;如果所有表达,式均为假,则执行最后,else,语句,,,然后继续执行程序。,4.3.2 if,语句的嵌套,在,if,语句中又包含一个或多个,if,语句的情况称为,if,语句的嵌套。当流程进入某个选择分支后又引出新的选择时,就要用嵌套的,if,语句。,嵌套的,if,语句的一般形式是:,if (,),if (,),语句1,else,语句2,else,if (,),语句1,else,语句2,内嵌,if,内嵌,if,例如:求,a、b、c,三数中的最大数,max。,if (ab),if(ac) max=a;,else max=c;,else,if(bc) max=b;,else max=c;,当有许多,if,和,else,时,如何决定哪个,if,与哪个,else,配对呢?,例如:,if(score60) if(score =80),printf,(“,优,n”); else,printf,(“,不及格);,else,应该与第一个,if,配对,还是第二个?,答案是:,else,与第二个,if,配对。,else,与,if,配对的规则:,else,语句总是与在它上面、距它最近、且尚未匹配的,if,配对,除非用花括号表示出其它选择。如果确实希望,else,与第一个,if,匹配,那就得加花括号。例如:,if(score60) if(score =80),printf,(“,优,n”); ,else,printf,(“,不及格);,例,4.3,有一函数: -1 (,x0) ,编写一程序,输入一个,x,,输出,y,值。,main(),int,x,y;,scanf(“%d”,&x,);,printf(“x,=%d,y=%dn”,x,y);,请判断以下几个,if,语句那个正确,那个不正确?,if (x0) y=1;,if (x=0) y=0;,if (x0) y=1;,if (x=0) y=0;,if(x=0),if (x0) y=1;,else y=0;,else y=-1;,y=-1;,if(x!=0),if(x0) y=1;,else y=0;,y=0;,if(x=0),if(x0) y=1;,else y=-1;,if (x0) y=1;,if (x=0) y=0;,if (x0) y=1;,if (x=0) y=0;,(,正确),if(x=0),if (x0) y=1;,else y=0;,else y=-1;,(,正确),y=-1;,if (x!=0),if(x0) y=1;,else y=0;,y=0;,if (x=0),if(x0) y=1;,else y=-1;,4.3.3,条件运算符,(1)由运算符“ ?”和“ :”组合而成,(2)运算规则:对,e1,?,e2,:,e3,如果,e1,的值为非0(即逻辑真), 则运算结果等于,e2,的值;,否则,运算结果等于,e3,的值,。,(3)优先级:,算术运算符 关系运算符 条件运算符 赋值运算符,例如:,max=(ab)? a:b (a=2,b=1),max=ab? a:b,max=(ab?a:b)+1,max=ab?a:b+1,(4)结合性: 从右到左(即右结合性),例如:,ab ? a:cd ? c:d (,假如:,a=1,b=2,c=3,d=4),从右至左结合,相当于:,ab ? a,:,(,cd ? c:d),(5)对于,e2 、e3,,不仅可以是算术表达式,还可以是赋值表达式或函数表达式。例如:,ab? max=a :,printf(“%d”,b,),相当于:,if(ab) max=a ;,else,printf(“%d”,b,) ;,完整程序:,main(),int,a=3,b=2 ;,ab? max=a,:,printf(“%d”,b,),;,4.3.3 switch,语句,当程序面临多重选择时,ifelseif,语句能够满足需要,但在大多数情况下, 使用,switch,语句则更为方便。,switch,的一般形式:,switch (,表达式),case,常量表达式1:语句1,case,常量表达式2:语句2, ,case,常量表达式,n:,语句,n,default:,语句,n+1,表达式可以是数值型或者字符型的,表达式的值为开关值。语句中各个,case,后面的常量表达式值必须不相同,否则将会出现矛盾。,switch,语句控制流程:,首先计算,switch,语句括号中的表达式值,然后依次与每一个,case,中的常量进行比较,一旦发现了某个能匹配的值,就执行该,case,后面的语句组,如果没有相匹配的值,则执行,default,后面的语句组。执行完一个,case,后面的语句后,流程控制转移到下一个,case,继续执行。如果执行完一个,case,后面的语句后,想退出,switch,结构,可以用,break,语句实现。,例如:要求按照考试成绩的等级打印出分数段。,switch (grade), case A :printf(“85100n”) ;,case B :printf(“7084n”) ;,case C :printf(“6069n”) ;,case D :,printf,(“60n”) ;,default:printf(“errorn,”) ;,若,grade,的值为,B,,则执行结果为,:,7084,6069,60,error,因此,应该在每一个,case,分支后加,break,语句,使流程跳出,switch,结构,switch (grade), caseA :printf(“85100n”) ; break;,caseB :printf(“7084n”) ; break;,caseC :printf(“6069n”) ; break;,caseD :,printf,(“=90,为,A,等,,70=score90,为,B,等,,60=score70,为,C,等, score0,有两个不等的实根;,(4),b2-4ac0,有两个共轭复根。,例,4.8,输入年号,判断它是否为闰年。,闰年就是可以被,400,整除或者能被,4,整除不能被,100,整除的年份。,开始,输入,year,year%400=0,?,Year%4=0,&year%100!=0,leap=1,leap=1,leap=0,0,0,非,0,leap=1?,是闰年,不是闰年,结束,非,0,0,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!