第5讲 分支程序设计精选PPT.ppt

上传人:石*** 文档编号:49396000 上传时间:2022-10-08 格式:PPT 页数:27 大小:1.61MB
返回 下载 相关 举报
第5讲 分支程序设计精选PPT.ppt_第1页
第1页 / 共27页
第5讲 分支程序设计精选PPT.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《第5讲 分支程序设计精选PPT.ppt》由会员分享,可在线阅读,更多相关《第5讲 分支程序设计精选PPT.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第5讲讲 分支程序设计分支程序设计第1页,本讲稿共27页分支程序设计分支程序设计选择结构是三种基本结构(顺序、选择、循环)之一。作用是根据所指定的条件是否满足,决定从给定的两组操作选择其中的一种。C语言中的选择结构是用if语句实现的。if语句的常用的形式是:If(关系/逻辑表达式)语句1;else语句2;Switch语句第2页,本讲稿共27页一、关系运算符和关系表达式一、关系运算符和关系表达式关系运算是逻辑运算中比较简单的一种,“关系运算”就是“比较运算”。x0是比较运算,也就是关系运算,“”是一种关系运算符。假如x=4,那么x0条件满足,就是说关系运算x0的结果为“真”。第3页,本讲稿共2

2、7页一、一、关系运算符和关系表达式关系运算符和关系表达式1 关系运算符及其优先次序关系运算符及其优先次序第4页,本讲稿共27页一、一、关系运算符和关系表达式关系运算符和关系表达式关于优先次序:(1)前4种关系运算符的优先级别相同,后两种也相同。前4种高于后两种。(2)关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。例:ca+b等价于c(a+b);关系运算符的优先级低于算术运算符ab=c等价于(ab)=c;“”优先级高于“=”a=bc等价于a=(bc);“c等价于a=(bc);关系运算符的优先级高于赋值运算符。第5页,本讲稿共27页一、一、关系运算符和关系表达式关系运算

3、符和关系表达式2 关系表达式关系表达式用关系运算符将两个表达式(算术、关系、逻辑、赋值表达式等)连接起来所构成的表达式,称为关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”。C语言没有逻辑型数据,以1代表“真”,以0代表“假”。例:假如a=3,b=2,c=1,则:关系表达式“ab”的值为“真”,即表达式的值为:1。关系表达式“b+cb&xy等价于(ab)&(xy)a=b|x=y等价于(a=b)|(x=y)!a|ab等价于(!a)|(ab)第7页,本讲稿共27页二、二、逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 2 逻辑表达式逻辑表达式逻辑表达式:用逻辑运算符(逻辑与、逻辑或、逻辑非)

4、将关系表达式或逻辑量连接起来构成逻辑表达式。逻辑表达式的值是一个逻辑量“真”或“假”。C语言编译系统在给出逻辑运算结果时,以1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”(即认为一个非0的数值是“真”)。例:非0值作为逻辑值参与运算=“真”(此时与1的作用一样)若a=4,则!a值为0(假)。若a=4,b=5,则a&b值为1(真),a|b值为1(真),!a|b值为1(真)4&0|2值为1(真)c(真)&d(真)值为1第8页,本讲稿共27页二、二、逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式从例子还可以看出:系统给出的逻辑运算结果不是0就是1,不可能是

5、其它数值。而在逻辑表达式中作为参与逻辑运算的运算对象可以是0(作为“假”)也可以是任何非0的数值(按“真”对待)。事实上,逻辑运算符两侧的对象不但可以是0和1或者是0和非0的整数,也可以是任何类型的数据(如字符型、实型、指针型)。如果在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象(原值),哪些是作为逻辑运算的对象(逻辑值)。第9页,本讲稿共27页二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式判断某一年是否闰年。(闰年的条件是符合下面两个条件之一:1、能被4整除,但不能被100整除;2、能被4整除,又能被400整除)。因为能够被400整除一定能被4整除所以第二个

6、条件可以简化为能够被400整除。判断闰年的条件可以用一个逻辑表达式表示:(year%4=0&year%100!=0)|year%400=0表达式为“真”,闰年条件成立,是闰年,否则非闰年。注意:a&b如果表达式A为假则b不再运算a|b如果表达式A为真则b不再运算A=1,b=2;A=A+2&b+y)printf(“%d”,x);(2)if(表达式)语句1else语句2例如:if(xy)printf(“%d”,x);elseprintf(“%d”,y);(3)if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式m)语句melse语句m+1第11页,

7、本讲稿共27页三、三、if语句语句 第12页,本讲稿共27页三、三、if语句语句说明:(1)三种形式的if语句中的“表达式”一般为关系表达式或逻辑表达式,但不限于这两种表达式。记住:C语言中需要逻辑值的地方,只有0代表“假”,非0(其它)均代表“真”。例 如:if(a)printf(“%d”,a);-printf()这 条 语 句 一 定 运 行,因 为a=97,即“真”。例如:bit=(mask&n)?1:0。mask,n都是整数,&(位与)后也是整数。(2)else子句不能单独使用,必须是if语句的一部分,与if配对使用。在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句

8、构成的语句块(复合语句)。语句块用括起来,语句块后面不要“;”号。第13页,本讲稿共27页三、三、if语句语句输入两个实数,按数值由小到大的次序输出这两个数。(难点:交换数据算法)main()floata,b,t;/*t-临时变量*/scanf(%f%f,&a,&b);if(ba)t=a;a=b;b=t;/*交换a,b*/printf(%f,%f,a,b);533.000000,5.000000去掉大括号if(ba)t=a;a=b;b=t;结果有什么变化第14页,本讲稿共27页三、三、if语句语句if语句的嵌套:if语句的if块或else块中,由包含一个if语句。注意:应当注意if与else的

9、配对关系。else总是与它上面的最近的未配对的if配对。特别是if/else子句数目不一样时(if子句数量只会大于或等于else子句数量)。利用确定配对关系。将没有else子句的if语句用括起来。if(x60)if(x0)x=0;Elsex=60;第15页,本讲稿共27页三、三、if语句语句main()floatx;scanf(%f,&x);if(x60)if(x0)x=0;/*没有分号*/elsex=60;printf(%f,x);第16页,本讲稿共27页三、三、if语句语句求一元二次方程ax2+bx+c=0的根。第17页,本讲稿共27页三、三、if语句语句#includemath.hmai

10、n()floata,b,c,d,disc,x1,x2,realpart,imagpart;scanf(%f%f%f,&a,&b,&c);printf(Theequation);if(fabs(a)=1e-6)printf(isnotaquadratic);elsedisc=b*b-4*a*c;第18页,本讲稿共27页三、三、if语句语句if(fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(hasdistinctrealroots:%8.4fand%8.4fn,x1,x2);else第19页,本讲稿共27

11、页三、三、if语句语句realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf(hascomPlexrootsn);printf(%8.4f+%8.4fin,realpart,imagpart);printf(%8.4f-%8.4fin,realpart,imagpart);程序中用disc代表b2-4ac,先计算disc的值,以减少以后的重复计算。对于判断b2-4ac是否等于0时,要注意一个问题:由于disc(即b2-4ac)是实数,而实数在计算和存储时会有一些微小的误差,因此不能直接进行如下判断:if(disc=0)因为这样可能会出现本来是零的

12、量,由于上述误差而被判别为不等于零而导致结果错误。所以采取的办法是判别disc的绝对值(fabs(disc)是否小于一个很小的数(例如10-6),如果小于此数,就认为disc=0。程序中以realpart代表实部P,以imagpart代表虚部q,以增加可读性。第20页,本讲稿共27页四、条件运算符四、条件运算符条件运算符(?:)在if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值时,可以使用简单的条件运算符来处理。例如:if(ab)max=a;elsemax=b;可以使用条件运算符来处理:max=ab?a:b;(注:ab关系运算有没有()都一样)。它这样执行,ab为“

13、真”吗?如果为“真”,条件表达式为a,否则为b。条件表达式的一般形式:表达式1?表达式2:表达式3第21页,本讲稿共27页四、条件运算符四、条件运算符说明:(1)条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,表达式2的值就是整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,此时表达式3的值就是整个条件表达式的值。(2)条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。例如:max=ab?a:b等价于:max=(ab)?a:b)(3)条件运算符的结合性“自右向左”。例如:ab?a:cd?c:d。先 考 虑 优 先 级、再 考 虑 结 合 性:上 面

14、表 达 式 等 价 与:(ab)?a:(cd)?c:d)。第22页,本讲稿共27页四、条件运算符四、条件运算符(4)表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式,函数表达式。例如:ab?(a=100):(b=100);ab?prinf(“%d”,a):prinf(“%d”,a);(5)表达式1,表达式2,表达式3的类型都可以不同。条件表达式值的类型是表达式2,表达式3中类型较高的类型。例如:xy?1:1.5整个表达式类型为实型。第23页,本讲稿共27页五、五、switch语句语句多分支可以使用嵌套的if语句处理,但如果分支较多,嵌套的if语句层数多,程序冗长,降低可读性。C语言中

15、switch语句是多分支选择语句。其一般形式:switch(表达式)case常量表达式1:语句1case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1switch语句case中语句的终止可以使用break.第24页,本讲稿共27页五、五、switch语句语句说明:(1)switch括号后面的表达式,允许为任何类型。(2)当“表达式”的值与某个case后面的常量表达式的值相等时,就执行此case后面的语句。如果表达式的值与所有常量表达式都不匹配,就执行default后面的语句(如果没有default就执行跳出switch,执行switch语句后面的语句)。(3)各个常

16、量表达式的值必须互不相同,否则出现矛盾。(4)各个case,default出现的顺序不影响执行结果。(5)执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。此时,“case常量表达式”只是起到语句标号的作用,并不在此处进行条件判断。在执行一个分支后,可以使用break语句使流程跳出switch结构,即终止switch语句的执行(最后一个分支可以不用break语句)。(6)case后面如果有多条语句,不必用括起来。(7)多个case可以共用一组执行语句。(注意break使用的位置)第25页,本讲稿共27页五、五、switch语句语句输入年月求该月天数输入年月求该月天数main()intyear,month,days;scanf(%d%d,&year,&month);switch(month)case1:case3:case5:case7:case8:case10:case12:days=31;break;第26页,本讲稿共27页五、五、switch语句语句case2:if(year%4=0&year%100!=0)|year%400=0)days=29;elsedays=28;break;default:days=30;break;printf(%d,days);第27页,本讲稿共27页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁