您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 大学课件 > 第7讲双路分支程序设计
主讲教师:葛日波第7讲分支程序设计-1邮箱:ececity@dlut.edu.cn电话:0411-62786172知识回顾1.副作用与表达式求值3.常用库函数隐式类型转换强制类型转换2.混合表达式与数据类型转换4.简单程序设计问题引出1.简单的程序设计情况比较简单、顺序执行2.现实问题不可能如此简单试回顾上次课最后的程序,如果用户在运行程序后输入一个负数,会发生什么事情呢?回答是:程序仍将执行,并给出了一个错误的结果,显然程序是存在缺陷的解决的办法:在设计程序时,应该考虑输入的是正数还是负数的不同情况有选择地进行不同处理这就是本次课要研究的——分支程序设计主要内容3.1关系与逻辑运算3.1.1逻辑数据3.1.2关系运算3.1.3逻辑运算目的要求复习思考题3.2两路分支3.2.1if…else语句3.2.2if语句3.2.3if语句的嵌套3.2.4条件表达式3.1关系与逻辑运算3.1.1逻辑数据1.用来表示“真”和“假”的数据称为逻辑数据2.C中没有逻辑类型,它用其它类型来表示逻辑型数据3.1.1逻辑数据3.C中规定,0值表示“假”,非0值表示“真”图3-1C中的逻辑数据表示(1)也叫比较运算,用来比较两个值的大小,结果是逻辑值3.1.2关系运算3.1.2关系运算1.关系运算概述1.关系运算概述(2)C中有6种关系运算表3-1关系运算符举例(1)关系运算是二元运算,对两个值进行大小比较2.注意事项2.注意事项(2)任意类型的表达式都可以参加比较运算若有下面的定义:intm,n;inta=1,b=2;floaty=5,z;则下列的表达式都是合法的:53/*两个初级表达式(常量)比较*/y=3/*两个初级表达式(变量和常量)比较*/2*a==y+3/*两个二元表达式进行比较*/--a=b++/*一元表达式与后缀表达式进行比较*/(m=4)=(n=3)/*两个赋值表达式进行比较*/(y3)(a5)/*两个关系表达式进行比较*/举例(3)关系运算的结果是逻辑值——“真”或“假”(4)若结果为“真”则值是1;若结果为“假”则值是0若有下面的定义:inta=3,b=2,x=5;则下列的表达式:53结果为“真”→值为1x=3结果为“假”→值为0--a=b++结果为“真”→值为1(5)前四个的优先级高于后两个,结合性都是左结合举例a==bc等价于a==(bc)abc等价于((ab)c)(6)不可以简单地通过几个连续的关系运算来构建复杂的条件举例3x5不能表示x∈(3,5)(1)逻辑运算是对逻辑值进行的运算,结果还是逻辑值3.1.3逻辑运算1.逻辑运算概述(2)C中有3种逻辑运算3.1.3逻辑运算1.逻辑运算概述表3-2逻辑运算符(1)逻辑运算是对逻辑值实施的运算,结果还是逻辑值2.注意事项2.注意事项x非0值0!x的结果假真!x的值01逻辑非(!)y0非0值0非0值x&&y的结果假假假真逻辑与(&&)x00非0值非0值x&&y的值0001y0非0值0非0值x||y的结果假真真真逻辑或(||)x00非0值非0值x||y的值0111x非0值0!x的结果假真!x的值01逻辑非(!)y0非0值0非0值x&&y的结果假假假真逻辑与(&&)x00非0值非0值x&&y的值0001y0非0值0非0值x||y的结果假真真真逻辑或(||)x00非0值非0值x||y的值0111x非0值0!x的结果假真!x的值01逻辑非(!)y0非0值0非0值x&&y的结果假假假真逻辑与(&&)x00非0值非0值x&&y的值0001y0非0值0非0值x||y的结果假真真真逻辑或(||)x00非0值非0值x||y的值0111x非0值0!x的结果假真!x的值01逻辑非(!)y0非0值0非0值x&&y的结果假假假真逻辑与(&&)x00非0值非0值x&&y的值0001y0非0值0非0值x||y的结果假真真真逻辑或(||)x00非0值非0值x||y的值0111举例(2)任意类型的表达式都可以参加逻辑运算若有下面的定义:inta=0,b=13;floaty=-3.14;charc=‘A’;则下列的表达式都是合法的:!5结果为“假”→值为0!a结果为“真”→值为1!y结果为“假”→值为0!(b%2)结果为“假”→值为0a=0&&a3结果为“真”→值为1(c=‵a‵&&c=‵z‵)||(c=‵A‵&&c=‵Z‵)结果为“真”→值为1(3)逻辑短路问题:只要表达式的值已经确定逻辑运算就终止图3-2逻辑短路思考若有以下定义:inta=1,b=2,c=3,d=4,m=2,n=2;问:执行以下的语句后,m和n的值各是多少?(m=ab)&&(n=cd);(4)关系运算的互补问题关系运算之间存在互补存在互补关系的运算,只要对一个取非运算就和另一个等价编程时应尽量选择简单的格式基本原则是:能用关系运算表示的,就不要再进行逻辑运算图3-3关系运算间的互补3.2两路分支1.分支又叫选择,它是一种程序结构2.两路分支是根据某一条件,有选择地执行两部分代码的一个图3-4两路分支的逻辑结构3.2.1if…else语句1.语句结构和流程图3.2.1if…else语句1.语句结构和流程图图3-5if…else语句2.注意事项2.注意事项(1)if后的括号不能省略,括号后不能有分号(2)expression可以是任意类型的表达式(3)s1和s2是语句,它们可以是一条语句、空语句或多条语句,若为多条语句就必须使用{}括起来图3-6if…else后跟多条语句(4)由于存在互补关系,用不同的表达式就有不同的程序格式图3-7if…else两种不同的编码格式3.2.2if语句1.语句结构3.2.2if语句图3-8if语句的两种格式1.语句结构(1)if语句是if…else语句的特例(2)等价于条件为“假”时什么也不做2.注意事项(1)if语句同样可以利用互补关系表示为不同格式(2)编程时要尽量使用简单的格式2.注意事项图3-9if语句的等价格式3.2.3if语句的嵌套1.语句结构与流程图if...else语句中又含有其它if...else语句3.2.3if语句的嵌套1.语句结构与流程图图3-10if语句的嵌套(1)C对嵌套的层数没有要求,但一般不要超过三层2.注意事项2.注意事项(2)在嵌套结构中,一定要注意if与else的配对关系配对原则:任何一个else中是与其上方距离其最近的还没有其它else与之配对的if配对图3-11if与else的配对(3)可以通过加{}来改变if与else的配对关系图3-11通过加{}改变if与else的配对3.2.4条件表达式(1)由两个运算符(?和:)把三个操作数连接而成的式子1.条件表达式概述3.2.4条件表达式1.条件表达式概述(2)它是C中唯一一个三元表达式(3)表达式的一般形式表达式1?表达式2:表达式3x=5?y=x*x:y=x+x(4)条件表达式的值是表达式2或表达式3中一个的值处理过程是:先计算表达式1,若非0(真),则求表达式2的值;否则求表达式3的值,并把求得的值作为整个表达式的值图3-13条件表达式(1)优先级是3,比赋值运算高2.注意事项2.注意事项(2)三项条件表达式可以嵌套flag=x%2?1:0;表达式1表达式2表达式3表达式31表达式32表达式33flag=x0?1:x0?-1:00x10x00x1flag目的要求1.理解C中逻辑数据的表示方法2.掌握关系运算和逻辑运算种类和处理方法4.掌握if…else语句,if语句和嵌套结构的用法3.理解逻辑短路的概念和意义5.掌握条件表达式及其处理方法复习思考题**6.在if…else嵌套结构中,if与else的配对原则是什么?说明:题目前面的*代表问题的重要程度**1.什么是逻辑数据?在C中如何表示逻辑数据?**2.在C中,关系运算有哪些?使用中应注意什么?**3.在C中,逻辑运算有哪些?使用中应注意什么?**4.逻辑短路是什么?**5.在if(e)s;和if(!e)s;中,s被执行的条件是什么?**7.什么是条件表达式?如何处理?
本文标题:第7讲双路分支程序设计
链接地址:https://www.777doc.com/doc-8686893 .html