C语言第5章 选择结构程序设计

上传人:小*** 文档编号:243139173 上传时间:2024-09-16 格式:PPT 页数:40 大小:384.50KB
返回 下载 相关 举报
C语言第5章 选择结构程序设计_第1页
第1页 / 共40页
C语言第5章 选择结构程序设计_第2页
第2页 / 共40页
C语言第5章 选择结构程序设计_第3页
第3页 / 共40页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第,5,章 选择结构程序设计,关系运算符和关系表达式,逻辑运算符和逻辑表达式,条件运算符和条件运算,if,语句,switch,语句和,break,语句,1,关系运算符,关系运算:对两个运算量进行大小关系比较的运算,运算结果为,1,(逻辑真)或,0,(逻辑假,)。,关系运算符(按从高到低顺序):,、,、,=,、,= =,、,!=,优先级:,低于,算术运算符,,高于,赋值运算符结合性,:,从左到右,xy!=z x= yx+y x=yz,( ),( ),( ),( ),2,用关系运算符连接起来的两个表达式。,表达式 关系运算符 表达式,关系表达式,关系表达式的值:,是逻辑值,“,真,”,或,“,假,”,,用,1,和,0,表示。,int,a=3,b=2,c=1,d,f;,ab,(ab)=c,b+cb,f=abc,/,表达式值1,/,表达式值1,/,表达式值0,/d=1,/f=0,5278,3,关系运算时注意,应避免对,实数,作相等或不等的判断,1.0/3.0*3.0 = =1.0,fabs,(1.0/3.0*3.0-1.0)1e-6,注意区别“,=,”,与“,= =,”,int,a=0,b=1;,if(a,=,b),printf(“a,equal to b”);,else,printf(“a,not equal to b”);,if(a,=,b),4,逻辑运算符和逻辑表达式,逻辑运算符:,&,(逻辑与,也叫逻辑乘),|,(逻辑或,也叫逻辑加),!,(逻辑非),逻辑表达式:,用逻辑运算符连接起来的两个运算量。,运算量 逻辑运算符 运算量,运算量,:,0,代表,“,假,”,, 非零代表,“,真,”,逻辑运算结果,:,0,代表,“,假,”,,,1,代表,“,真,”,;,5,逻辑与的真值表,逻辑与运算:两个运算量都为非,0,,结果才为,1 (,逻辑真,),。,6,逻辑或的真值表,逻辑或运算:两个运算量中只要有一个运算量非,0,,结果就为,1(,逻辑真,),。,7,逻辑非的真值表,逻辑非运算:使运算量的值变反,即非,0,值变,0,值。,X,! X,非0,0,0,1,8,逻辑表达式运算的优先级,优先级(从高到低):,!,算术运算符,关系运算符,&,|,赋值运算符,练习:,6 = ! 0,8,1,1,1,1,1,9,注意,C,程序中某些关系表达式的写法:,axxb,xa & xb & xa,C,程序中一定不要有连续“, ”,的形式!,10,注意,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,a&b&c,只有,a,为真时,才需要判断,b,的值,只有,a,和,b,都为真的情况下才需要判别,c,的值。反之,只要,a,为假,就不必判别,b,和,c,的值。,a|b|c,只要,a,为真,就不必判断,b,和,c,。只有,a,为假,才判别,b,。,a,和,b,都为假才判别,c,。,11,例,#include ,void main( ),int,a=1,b=2,c=3,d=4;,int,m=1,n=1;,int,p;,p=(m=a,b)&(n,=cd);,printf(“m,=%,d,n,=%,d,p,=%,d”,m,n,p,);,12,逻辑表达式的运用,判断闰年:,条件,1,:能被,4,整除,但不能被,100,整除,条件,2,:能被,4,整除,又能被,400,整除,(,year%4= =0,&,year%100!=0,)|,year%400= = 0,判断非闰年:,(year%4= =0&year%100!=0)|year%400= = 0),!,判断非闰年:,(,year%4!=0,)|(,year%100= =0,&,year%400!= 0,),13,条件运算符和条件表达式,条件运算符:,?,:,表达式的一般形式:,表达式,1?,表达式,2:,表达式,3,max =,(ab)?a:b,条件表达式流程图,说明:,条件运算符仅优先于赋值运算符。,条件运算符的结合方向为,“,自右到左,”,。,表达式,1,结果是,表达式,2,的值,结果是,表达式,3,的值,0,=0,14,ch,=,(,ch,=,A&ch,=,A&ch,=Z,ch,=ch+32,#include ,void main( ),char,ch,;,scanf(%c,&ch,);,printf(%cn,ch,);,15,if,语句,if,语句的三种形式:,实现,单分支,选择结构的形式,实现,双分支,选择结构的形式,实现,多分支,选择结构的形式,16,if,语句,单分支选择结构,一般形式:,if,(,表达式)语句,;,单分支选择结构流程图,表达式,语句,0,=0,说明:当表达式的结果为非,0,时,执行后面的语句,否则不执行。,17,#include ,void main( ),float a,b, t;,scanf(%f%f,&a,&b,);,printf(%5.2f,%5.2f,%5.2fn,a,b,c);,【,例,5.1】,输入两个实数,按代数值由小到大的顺序输出这两个数。,if(ab),t=a;a=b;b=t; /*a,、,b,间的较小值存入,a*/,18,#include ,void main( ),float a,b,c,t;,scanf(%f%f%f,&a,&b,&c,);,printf(%5.2f,%5.2f,%5.2fn,a,b,c);,【,例,5.2】,将输入的三个数按照从小到大的顺序输出,if(ab),t=a;a=b;b=t; /*a,、,b,间的较小值存入,a*/,if(ac),t=a;a=c;c=t; /*a,、,c,间的较小值存入,a*/,if(bc),t=b;b=c;c=t;,if ab,将,a,和,b,对换,if ac,将,a,和,c,对换,if bc,将,b,和,c,对换,19,if,语句,双分支选择结构,一般形式:,if(,表达式,),语句,1;,else,语句,2;,表达式,语句,1,语句,2,0,=0,双分支选择结构流程图,说明:,当表达式的值为非,0,时,执行语句,1,,否则执行语句,2,。,20,【,例,】,显示输入的两个整数中绝对值较大的数。,#include ,void main( ),int,x1,y1,x2,y2;,scanf(%d,%d,if(x10)x2=-x1;else x2=x1;,if(y1y2?x1:y1,);,条件表达式,不能取代一般的,if,语句,只有在,if,语句中内嵌的语句为赋值语句(且两个分支都给同一个变量赋值)时才能代替,if,语句。,x2=x10?-x1:x1;,y2=y10 x2=x1,else x2=-x1,21,#include ,#include ,void main( ),float a,b,c,s,area;,scanf(%f,%f,%f,&a,&b,&c,);,s=(a+b+c)/2;,area=,sqrt(s,*(s-a)*(s-b)*(s-c);,printf(area,=%7.2fn,area);,【,例,】,输入三边,求三角形面积,if(a+bc&b+ca&a+cb),else,printf(“input,data error”);,22,if,语句,多分支选择结构,一般形式:,if,(,表达式)语句,1;,else if,(,表达式)语句,2;,else if,(,表达式)语句,3;,else if,(,表达式)语句,n;,else,语句,n+1;,23,多分支选择结构流程图,表达式,1,语句,1,表达式,n,表达式,3,表达式,2,语句,2,语句,3,语句,n,语句,n+1,0,0,0,0,=,0,=,0,=,0,=,0,说明:,各个表达式按顺序求值,如果某个表达式的值为非,0,,则执行与其相关的那条语句,并由此结束整个,if,语句。,24,#include ,void main( ),char c;,printf(Enter,a character:);,c=,getchar,( );,if(c=0,else if(c=A&c=a&c=0&c=A&c=a&c=z,25,if,语句的嵌套,格式一:,if( ),if( ),语句,1;,else,语句,2;,else,if,(),语句,3;,else,语句,4;,格式二,:,if,(),if,(),语句,1;,else,if,(),语句,2;,else,语句,3;,注意,if,与,else,的配对关系。,26,【,例,5.3】,编写程序,输入一个,x,值,输出对应的,y,值。函数为,-1 (x0),在,if,子句中嵌套,在,else,子句中嵌套,if,(x=0),if,(x0) y=-1;,else,y=0;,else,y=1;,if,(x0) y=1;,else y=0;, ,y=0;,if (x=0),if(x0) y=1;,else y= -1;, ,【,例,5.3】,编写程序,输入一个,x,值,输出对应的,y,值。函数为,-1 (x0),28,【,例,5.5】,写程序,判断某一年是否闰年。,算法,29,源程序:,#include ,void main( ),int,year,leap,;,scanf(%d,&year,);,if,(,year%4=0,),if,(,year%100=0,),if,(,year%400=0,) leap=1;,else,leap=0;,else,leap=1;,else,leap=0;,if(,leap,),printf(%d,is, year);,else,printf,(%d is not, year);,printf(“a,leap year.n);,30,【,例,5.6】,解一元二次方程,ax,2,+bx+c=0,。,一元二次方程的解的情况有下列几种可能:,a=0,,,不是二次方程;,b,2,-4ac=0,,,有两个相等实根,:,算法,b,2,-4ac0,,,有两个不等实根,:,b,2,-4ac0,,,有两个共轭实根:,31,一元二次方程,N,S,图,32,#include ,#include ,void main( ),float a,b,c,d,x1,x2,p,q;,scanf(%f,%f,%f,&a,&b,&c,);,printf(The,equation );,if(,fabs(a,)=1e-6,),printf(is,not quadratic.n);,else d=b*b-4*a*c;,if(,fabs(d,)1e-6,),x1=(-b+sqrt(d)/(2*a);,x2=(-b-sqrt(d)/(2*a);,printf(“has,distinct real roots:%8.4f and,8.4fn,x1,x2);,else,p=-b/(2*a);,q=sqrt(-d)/(2*a);,printf(has,complex roots:n);,printf(%8.4f+%8.4fin,p,q);,printf(%8.4f-%8.4fin,p,q);,34,switch,语句和,break,语句,switch,语句:,是专门用于实现多分支选择的语句。,break,语句:,终止,switch,语句的执行。,switch,语句的,一般形式:,switch(,表达式,),case,常量表达式,1,:,语句,1,;,case,常量表达式,2,:,语句,2,;,case,常量表达式,n,:,语句,n,;,default:,语句,n+1,;,break;,break;,break;,35,说 明:,switch,语句中的,“,表达式,”,和,case,后面的,“,常量表达式,”,的结果值的类型应该一致。,每一个,case,的常量表达式的值必须互不相同,否则出现矛盾现象。,各个,case,的出现次序不影响执行结果。,执行完一个,case,后面的语句后,流程控制转移下一个,case,继续执行,除非有,break,语句跳出,switch,。,default,语句为选择项,可有可无。,36,【,例,5.7】,用公式,f=p*w*s*(1-d),计算运输费。,吨公里运价,运输距离,折扣,货重,250(,公里,) d=0,250,s,500 d=0.02,500,s,1000 d=0.05,1000,s,2000 d=0.08,2000,s,3000 d=0.10,3000,s d=0.15,37,要根据运输距离计算折扣,d,,,关键,是要构造,switch,后的表达式,根据,题目,选择,c=s/250,来求,c,的值。,if,(s=3000),c=12,;,else,c=s/250,;,程序中当,c,的值为2,3时,,d,的值都是0.05,则这两,个,case,语句可以共同使用,一个语句。,分析,说明,case 2:,case 3:d=5;break;,38,main( ),int,c,s;,float p,w,d,f;,scanf(“%f, %f, %d”,if(s=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),;,用不带,else,的,if,语句、,else-if,语句完成上述例题, 并做对比。,?,39,作 业,读懂书上例题程序,并上机运行。,笔答:,5.3,编程:,5.4,5.5, 5.6, 5.8,先思考写在作业本上,然后通过上机调试修改。,40,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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