收藏 分销(赏)

C语言(第五章If).ppt

上传人:xrp****65 文档编号:13627440 上传时间:2026-04-03 格式:PPT 页数:52 大小:249.50KB 下载积分:10 金币
下载 相关 举报
C语言(第五章If).ppt_第1页
第1页 / 共52页
C语言(第五章If).ppt_第2页
第2页 / 共52页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第五章 分支(选择)结构程序设计,选择结构是三种基本结构之一,,特点:根据指定条件:成立时执行一组操作,不成立时执行另一组操作。,C,中,实现选择结构的语句:,if,语句和,switch,语句,。,条件语句,格式:,if(,表达式)语句;,表达式可以是常量、变量、表达式。,表达式值的类型可以是整、实、字符型。,语句可以是一句或 复合语句。,例:,if(a0)aa;,表达式,语句,假(0),真(非0),1,5.1,关系表达式和逻辑表达式,5.,1.1,关系表达式,1.关系运算符,关系运算是比较运算(判断两个表达式间的关系,),,结果:,逻辑值,“真”,即,true,,用非0表示;,“假”,即,false,,用0表示,关系运算符有6种:,、=:优先级为6级,=、!=:优先级为7级,关系运算符的优先级低于算术运算符,高于赋值运算符;,结合性为从左到右,2,2.优先级,关系运算符和其它运算符优先级的比较:,高 算术运算符:*、/、%(,3,)+、-(,4,),关系运算符:、=(,6,)=、!=(,7,),逻辑运算符:!,(2,)&(,11,)|(,12,),低 赋值运算符:=、+=、-=、*=、/=、%=(,14,),由于存在优先级,因此下面表达式是等价的:,a(a+b)aa+b,(ab)!=c ab!=c,a=(bc)a=bc)a=bc,关系表达式,赋值表达式,3,3.关系表达式,用,关系运算符,将两个,表达式,(算术、关系、逻辑、赋值、字符),连接起来的式子。,如:,a b 、a+b b+c、(a=3)(b=5),a b)(c b,真,a b=c,真,b+c b d,的值为,1,f=a b c f,值为,0,真,:用,1,表示,关系表达式的值是逻辑值,假,:用,0,表示,4,5.,1.2,逻辑表达式,用,逻辑运算符,将,表达式,连接起来的式子。,1.逻辑运算符及其优先次序,逻辑,与,:,&,优先级,11,逻辑,或,:,|,优先级,12,逻辑,非,:,!,优先级,2,结合性,从左到右,双目,结合性,从右向左,单目,a&b:,当,a,b,都为真时,结果为真,否则结果为假,a|b:,当,a,b,都为假时,结果为假,否则结果为真,!,a:,当,a,为真时,结果为假,当,a,为假时,结果为真。,5,下表为逻辑运算的,“,真值表,”,在一个逻辑表达式中如果包含多个逻辑运算符,如,!,a&b|xy&c,(,(,!a,),&b)|(xy)&c),a,b,!a,!b,a&b,a|b,T,T,F,F,T,T,T,F,F,T,F,T,F,T,T,F,F,T,F,F,T,T,F,F,!,a&b|xy&c,6,优先次序:,高,低,!算术运算符关系运算符&|赋值运算符,!,a&b|xy&c ((!a)&b)|(xy)&c),(ab)&(xy),可写成:,ab&xy,(a=b)|(x=y),可写成:,a=b|xy,(,!a ),|,(ab),可写成:!,a|ab,2.,逻辑表达式,在逻辑表达式中参加运算的数据可以是常量、变量、表达式,非0值为真,0值为假。,在一个逻辑表达式中,若包含多个逻辑运算符时,则运算顺序按运算符优先级的高低进行。,逻辑表达式的值:逻辑表达式的值是逻辑量,0或1,0 为假,1 为真,不可能是其他的值,7,例:,5,3&2|8,4-!0,处理过程:表达式自左至右扫描求解。,首先处理,“,5,3,”,(因为关系运算符优先于,&,),结果为,1,。然后进行,”,1&2,”,的运算,此时,1,和,2,均是逻辑运算对象,均作,“,真,”,处理,因此 结果为,1,。再往下进行,“,1|84-!0,”,的运算。根据优先次序,先进行,“,!,0,”,运算得,1,,因此,要运算的表达式变成:,“,1|8,4-1,”,,即,“,1|8 3&2|8=a=65 97=ay),printf,(“x-y=%fn”,x-y);,if(y-100),x+;,y+;,printf,(“x=%d,y=%fn”,x,y);,运行结果:,y=-5.600000,0=48,x-y=5.600000,x=1,y=-4.600000,18,2.第二种形式的条件语句,if(,表达式)语句1;,else,语句2;,例,:,main(),int,x,y;,printf,(“please input x,yn”);,scanf,(“%d%d”,if(xy),printf,(“x=%dn”,x);,else,printf,(“y=%dn”,y);,运行结果:,please input x,y,2 _ 5,输出:,y=5,34 _ 28,x=34,表达式,语句1,语句2,真,假,19,例:,main(),int,x=20;float y=25.6;,if(yx),x+;,printf,(“x=%d,n”,x);,else,x-;,printf,(“x=%d”,x);,20,3.第三种形式的条件语句,if(,表达式1)语句1;,else if(,表达式2)语句2;,else if(,表达式3)语句3;,else if(,表达式,m),语句,m;,else,语句,n;,假定:,m=4,n=5,,所示框图,表达式,1,假,真,表达式2,表达式3,表达式4,语句5,语句4,语句3,语句2,语句1,真,真,真,假,假,假,21,例:商店售货按购物的款数分别给予不同的优惠折扣。,超过500元打8.5折,300-500打9折,100-300打9.25折,50-100打9.5折,50以下不打折,设变量:,n:,购物款数,,c:,优惠折扣百分比,,a:,优惠后的实际款数,输入:,输出:,800,680.000000,480,432.000000,200,185.000000,80,76.000000,30,30.000000,main(),float n,c,a;,scanf,(“%f”,if(n500)c=0.15;,else if(n300)c=0.10;,else if(n100)c=0.075;,else if(n50)c=0.05;,else c=0;,a=n*(1-c);,printf,(“a=%fn”,a);,22,总结说明:,1.执行,if,语句时,先判断表达式的值,为真时(非0),执行其后语句,为假(0)时不执行其后的语句,表达式可以是常量、变量、表达式(关系、逻辑、算术、赋值)。,2.,if,的各内嵌语句用“;”号结束。,3.,if,和,else,后面的内嵌语句若有多句,用 括起构成复合语句。,例,:,输入两个实数,按代数值由小到大输出。,main(),float a,b,t;,scanf,(“%f,%f”,if(ab)t=a;a=b;b=t;,printf,(“%5.2f,%5.2fn”,a,b);,输入:,输出:,3.6,-3.2,-3.20,3.60,2.5,8.9,2.50,8.90,23,例:,输入三个数,按从小到大的顺序输出,t a b c,7 5 3,5,7,3,3,7,5,7 3,5,7,输入:输出:,7,5,3 3.00,5.00,7.00,1,8,6 1.00,6.00,8.00,main(),float a,b,c,t;,scanf,(“%f,%f,%f”,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,(“%5.2f,%5.2f,%5.2fn”,a,b,c);,24,5.2.2,if,语句的嵌套,嵌套(,nested):,在,if,语句中,可以包含多个,if,语句,一般形式:,if(,表达表1),if(,表达表2,),语句1,else,语句2,else,if(,表达表3,),语句3,else,语句4,条件成立时的内嵌语句,条件不成立时的内嵌语句,总体上是哪种形式?,25,使用内嵌的,if,语句时,应区分,表面形式,与,实际作用,如:,if(),if,(),语句1,else,if,(),语句2,else,语句3,编程者希望把中间的,else,与第一行的,if,匹配,虽然书写时排得很整齐,但编译后程序的执行效果如何呢?,26,在,C,语言中,if,与,else,的配对原则是:,从最内层开始,,else,总是与它上面,最近,的,未曾配对的,if,配对,。,因此,上述问题在编译时的真正效果是:,if(),等价于下述表示:当条件成立时执行下面虚框中的内容,if(),if,(),语句1,else,if,(),语句2,else,语句3,是中间,else,的子句,27,为了使程序清晰,不至出错,,采取的方法是:,(1),使,内嵌的,if,也包含,else,,,如上面的问题可进行如下描述:,if(),if,(),else ,else,if,(),else,.,28,(2)若,if,和,else,数目不等,为实现设计者的企图,可用 实现,如上述问题可进行如下描述:,if(),if,(),语句1 ,else,if,(),语句2,else,语句3,29,main(),int,x,y;,scanf,(“%d”,if(x0)y=-1;,else if(x=0)y=0;,else,y=1;,printf,(“x=%d,y=%dn”,x,y);,-1 (,x0),用不同方法编程,判正确与否,输入:-1234,0,756,输出:,x=-1234,y=-1,x=0,y=0,x=756,y=1,例:,有一符号函数,30,例:,main(),int,x,y;,scanf,(“%d”,if(x=0),if(x0)y=1;,else y=0;,else y=-1;,printf,(“x=%d,y=%dn”,x,y);,输入:12,-24,0,输出:,x=12,y=1,x=-24,y=-1,x=0,y=0,-1 (,x0),用不同方法编程,判正确与否,31,main(),int,x,y;,scanf,(%d”,y=-1;/*x0)y=1;,else y=0;/*,此,else,和谁匹配?*/,printf,(“x=%d,y=%dn”,x,y);,输入:,输出:,-5,x=-5,y=0,0,x=0,y=-1,8,x=8,y=1,-1 (,x0),用不同方法编程,判正确与否,32,main(),int,x,y;,scanf,(%d”,y=0;,if(x=0),if(x 0)y=1;,else y=-1;,printf,(“x=%d,y=%dn”,x,y);,输入:,输出:,-5,x=-5,y=0,0,x=0,y=-1,8,x=8,y=1,-1 (,x0),用不同方法编程,判正确与否,33,5.2.3 条件运算符,条件表达式的一般形式:,表达式1,?,表达式2,:,表达式3,其中:,?:,是条件运算符号,在,if,语句中,给同一变量赋值时,可用语句:,if(a b)max=a;,else max=b;,在,C,语言中提供了条件运算符及相应的条件表达式,上述问,题用条件运算符实现如下:,max=a b?a :b,34,说明:,1.条件运算符的优先级为13级,max=(a b)?a :b max=a b?a:b (,=,为,14,级),max=a b?a:(b+1)max=ab?a:b+1 (,+,为,4,级),(,为,6,级,),真:表达式2是整个表达式的值,计算表达式1,假:表达式3是整个表达式的值,条件表达式的执行过程是:,35,2.条件运算符的结合方向:,从右向左,如有表达式:,a b?a :c d?c :d,a,b,c,d,的取值如下:表达式值如下:,a b c d,1 2 3 4 4,5 8 6 2 6,3 2 20 30 3,36,3.若,if,语句内嵌的是赋值语句,且两分支给同一变量赋值时,才可用条件表达式代替,如:,if(ab)c=a;,else c=b;,c=ab?a:b,又如:,if(ab)c=a;,else x=b;,ab?a:b,c=,x=,37,例:,main(),int,a,b;,scanf,(“%d%d”,ab?,printf,(“max=%xn”,a):,printf,(“max=%dn”,b);,输入:3 5,输出:,max=5,38,4.表达式1,2,3类型可以相同,也可不同,不同时,低类型向高类型转换,例,main(),int,x=-1,y=5,z=6;,printf,(“%cn”,x?a:b);,printf,(“%f n”,y=A&,ch,=Z)?(,ch,+32):,ch,;,printf,(“%c n”,ch,);,A,的,ASCII,码值是65 ,Z,的,ASCII,码值是90,输入:,A,输出:,a,a,a,1,1,40,5.3,switch,语句,一种多分支选择结构,可用于统计各种量。,一般形式:,switch(,表达式),case,常量表达式1:语句1;,break;,case,常量表达式2:语句2;,break;,case,常量表达式,n:,语句,n;break;,default :,语句,n+1;,41,说明:,(1),Switch(,表达式),:,表达式,的值可以是,字符,、,整,(,ANSI,新标准规定允许使用实型数据,若是,实型,数据,则将其,转换为整型,数据。),(2),常量表达式,必须是,整型,或,字符型,数据(包括,表达式常量,)。,(3)执行过程:,先计算表达式的值,依次与,case,后的常量表达式比较:,若有,相等,的值,从这点,开始执行,;,若无相等,的值,则,执行,default,后面的语句,若无,default,则无任何操作。,每个常量,表达式的值,不能相等,;,case,出现的顺序无关;,case,中若有,break,语句,则使,控制流程跳出,switch,;,若,无,break,则,顺序执行下一个,case,;,case,后可有多个语句,,,不必加 ,,系统,顺序执行,;,42,多个,case,可用一组执行语句,如:,case a:,case b:,case c:,printf,(ok);,43,例:,从键盘输入不同等级,打印相应的分数段,main(),char n;,scanf,(“%c”,switch(n),case a:,printf,(“85100n”);break;,case b:,printf,(“7084n”);break;,case c:,printf,(“6069n”);break;,case d:,printf,(“0:,有两个不等的实根,b,2,-4ac 0:,有两个共轭复根,47,#,inlude,“math.h”,main(),float a,b,c,disc,x1,x2,re,im,;,scanf,(“%f,%f,%f”,printf,(“The equation ”);,if(,fabs,(a)=1e-6),printf,(“is not quadratic”);,goto,loop;,else disc=b*b-4*a*c;,if(,fabs,(disk)1e-6),x1=(-b+,sqrt,(disk)/(2*a);x2=(-b-,sqrt,(disc)/(2*a);,printf,(“Distinct real roots:%8.4f and%8.4f n”,x1,x2);,else re=-b/(2*a);,im,=,sqrt,(-disk)/(2*a);,printf,(“has complex roots:n”);,printf,(“%8.4f+%8.4fi n”,re,im,);,printf,(“%8.4f-%8.4fi n”,re,im,);,loop:;,48,输入:,0,2,1,1,2,1,2,6,1,1,2,2,输出:,The equation is not quadratic,The equation has two equal roots:-1.0000,The equation has distinct real roots:-0.1771 and -2.8229,The equation has complex roots:,-1.0000+1.0000 i,-1.0000-1.0000 i,49,例:,运输费的计算,设:,s:,距离,w:,货物重量,d:,折扣,p:,基本运费,f:,总运费,f=p*w*s*(1-d),s250km,没有折扣,250=,s500 2%,折扣,500=,s1000 5%,折扣,1000=,s2000 8%,折扣,2000=,s3000 10%,折扣,3000=3000)c=12;,else c=s/250;,switch(c),case 0:d=0;break;,case 1:d=2;break;,case 2:case 3:d=5;break;,case 4:case 5:case 6:case 7:d=8;break;,case 8:case 9:case 10:case 11:d=10;break;,case 12:d=15;break;,f=p*w*s*(1-d/100.0);,printf,(“freight=%15.4f”,f);,C:,公里数/250,,以确定表达式的值,s:,距离,p:,基本运费,w:,货物重量,d:,折扣,总运费,f:p*w*s*(1-d),输入:,100,20,300,输出:,freight=_ _ _588000.0000,51,给一个不多于,5,位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。,1.,程序分析:学会分解出每一位数,如下解释,2.,程序源代码:,main()long a,b,c,d,e,x;,scanf,(%ld,/*,分解出万位*,/,b=x%10000/1000;/*,分解出千位*,/,c=x%1000/100;/*,分解出百位*,/,d=x%100/10;/*,分解出十位*,/,e=x%10;/*,分解出个位*,/,if(a!=0),printf,(there are 5,%ld%ld%ld%ld%ldn,e,d,c,b,a);else if(b!=0),printf,(there are 4,%ld%ld%ld%ldn,e,d,c,b);,else if(c!=0),printf,(there are 3,%ld%ld%ldn,e,d,c);,else if(d!=0),printf,(there are 2,%ld%ldn,e,d);,else if(e!=0),printf,(there are 1,%ldn,e);,52,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服