C语言程序设计课件0905选择结构程序设计

上传人:xue****ang 文档编号:245342852 上传时间:2024-10-08 格式:PPT 页数:35 大小:219.99KB
返回 下载 相关 举报
C语言程序设计课件0905选择结构程序设计_第1页
第1页 / 共35页
C语言程序设计课件0905选择结构程序设计_第2页
第2页 / 共35页
C语言程序设计课件0905选择结构程序设计_第3页
第3页 / 共35页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,选择结构程序设计,课程:程序设计语言,教材:谭浩强C程序设计第三版,教师:陈小荷,本章重点,掌握关系运算符、逻辑运算符的优先次序,理解条件表达式的意义。,掌握if语句的四种形式,能针对具体问题正确运用。,理解switch语句的控制结构,能正确运用。,关系运算符,小于,大于 优先级高(6),=大于或等于,=等于 优先级低(7),!=不等于,关系表达式,比较两个运算数,表达式成立则值为,1(true),否则值为 0(false):,x y /未知,x+5 x/1(true),x+5=x /1(true),关系运算符与算术运算符,算术运算符的优先级是3(乘除余)和4(加减),以下两个表达式的值是多少?,10+(20 10)*100,以下四个表达式,如果要加括号,并且不能改变原来的优先次序,应该怎么加?,10+20 z,z=x y,z!=x y z 的值是多少?如果它们的值分别是 1、3、5 呢?,数学书上 x y z 的意思是 x大于y,y大于z,这个意思用C语言来表达,应该是:,x y&y z,关系运算符和赋值运算符,重温:赋值运算符的优先级低(14),x=y z 等价于下面哪个表达式?,(x=y)z,x=(y z),若 x,y,z 的初值分别是 5,3,1,下面表达式的值是多少?,x=y z,逻辑值表,第一行是标题。以第二行为例,读法是:,若a真b真,则非a和非b均假,a&b 为真,a|b 亦为真。,逻辑表达式求值是自左至右的,一旦发现已经可以根据一个运算数求值,就不会再对第二个运算数求值。例如,在 a&b 中,如果已知a假,则整个逻辑表达式为假,不必再考虑b的值,逻辑运算符的优先级和结合方向,逻辑反的结合方向是自右至左,其他逻辑运算符的结合方向均为自左至右,逻辑非!,优先级2,算术运算符,优先级3和4,关系运算符,优先级6和7,逻辑与&,优先级11,逻辑或|,优先级12,赋值运算符,优先级14,表达式求值,假定以下变量 a,b,c,d 的值分别是 0,1,2,3,变量 x 和 y 的值未知,请对下列表达式求值:,x=y&10=y&x!=x,a b|3 1,a x-1,a&b|c&d,a&(b|c)&d,表达式求值,假定 a,b,c 的值分别是 3,4,5,a+b c&b=c,(a+b)c)&(b=c),a|b+c&b c,!(a b)&!c|1,!(x=a)&(y=b)&0,!(a+b)+c 1&b+c/2,练习写一些表达式,判断是否“及格”(60分及格),判断是否“英文字母”,判断是否“小写英文字母或阿拉伯数字”,判断是否“能被4整除”,判断是否“能被4整除但不能被100整除”,判断是否“闰年”,形式1:if(e)s;,是否执行s,取决于e的值,sample:输入g,0,两个printf语句的执行情况如何?,#include,if(isletter(ch)/*判断ch是否字母*/,printf(“%c is a letter n”,ch);,printf(“thank you.n”);,形式2:if(e)s1;else s2;,e的值非 0,执行 s1,否则执行 s2,sample:输入g,0,两个printf 语句的执行情况如何?,if(isletter(ch),printf(“%c is a letter n”,ch);,else,printf(“%c is not a letter n”,ch);,s 可以是一个复合语句,sample:三个变量的排序(升序),if(ab)tmp=a;a=b;b=tmp;,if(ac)tmp=a;a=c;c=tmp;,if(bc)tmp=b;b=c;c=tmp;,形式3:多分枝的if语句,注意下面语句的逻辑关系:,if(n500)cost=0.15;,else if(n300)cost=0.10;,else if(n100)cost=0.075;,else if(n50)cost=0.05;,else const=0.0;,例如,第二行相当于说:,if(n300)cost=0.10;,如果按n值从小到大的顺序来写多分枝的if语句,应该怎么写?,形式4:嵌套的if语句,if(e)s1;else s2 中,s1或s2本身又是一个if语句,形式3也是嵌套的if语句,但它总是在s2中嵌套,if(e),if(e1)s1;,else s2;,else,if(e2)s3;,else s4;,写法1,if(x0)y=1;,语法、逻辑都没有错,运行也正确,但效率低,写法2和写法3,if(x=0),if(x0)y=1;,else y=0;,else y=-1;,if与else的匹配原则,就近匹配:,嵌套的if语句中,else总是跟离它最近的上一个尚无匹配的if匹配,不管缩进形式是怎样的:,if(e),if(e1)s1;,else s2;/*,跟,匹配*,/,else /*,跟,匹配*,/,if(e2)s3;,else s4;/*,跟匹配*,/,写法4和写法5,y=-1;,if(x!=0),if(x0)y=1;,else y=0;,y=0;,if(x=0),if(x0)y=1;,else y=-1;,条件表达式,e1?e2:e3,其中,?:是一个条件运算符,三目的,优先级为13(高于赋值运算符),结合方向是自右至左,条件表达式的值是这样计算的:,先对e1求值,如果e1的值非0,则条件表达式的值为e2,否则,条件表达式的值为e3,条件表达式的应用,用于二分枝的选择结构,例如:,if(ch 128)return 0;else return 1;,可写成以条件表达式为宾语的返回语句:,return,ch=60)grade=Y;,else grade=N;,条件表达式的应用,条件运算符是自右至左结合的,例如:,y=,x=0?0:x 0?1:-1,相当于y=,x=0?0:(x 0?1:-1),因此,条件表达式也可以用于多分枝选择,不过,为了容易理解,一般应该用if语句来表达,switch 语句,多分枝选择:,switch,(grade),case,A:printf(“85100”n”);,break;,case,B:printf(“7084n”);,break;,case,C:printf(“6069”n”);,break;,case,D:printf(“60 n”);,break;,default,:printf(“error n”);,switch语句与多分枝if语句的关系,一般来说,能用switch语句的也能用多分枝if语句来表达,例如:,if,(grade=A)printf(“85100”n”);,else if(grade=B)printf(“7084n”);,else if(grade=C)printf(“6069”n”);,else if(grade=D)printf(“b),if(ac)return a;,else return c;,else,if(bc)return b;,else return c;,int m=a;,if(bm)m=b;,if(cm)m=c;,return m;,你喜欢哪种写法?,例5.6 求一元二次方程的根,输入:系数a,b,c,过程和输出:,a=0:不是一元二次方程,disc=b*b 4*a*c;,if(disc绝对值近乎0)打印两个相等实根,if(disc绝对值大于0)打印两个不等实根,else 打印两个共轭复根,例5.6 教材分析,程序的主体是一个嵌套的if语句,共有3层,层数多了,理解起来比较困难,第一层的if只带一个语句,而else却带了多层多个语句,不太般配,第二层的if也只带一个语句,而else却带了多层多个语句,不太般配,第三层的if和else,在层次和语句数量上比较均衡,例5.6 程序修改,基本思路:,减少层次,尽量不用嵌套的if语句,void函数中可以有多个return语句,因此,如果已经处理了某种情况,就可以及时返回,程序其余部分再处理其他情况,例如,第一种情况,打印了“不是一元二次方程”之后,即可return,这样就省掉了一个层次,请自行修改这个程序,例5.7 运费计算,可以有多种写法:,如教材所示,用switch语句来写,用多分枝if语句来写,请比较两种写法,哪一种更好?(用简洁性、可读性等标准来衡量),本章小结,关系运算和逻辑运算是理解选择结构和循环结构的基础,四种if语句由简到繁:单分枝、二分枝、多分枝、嵌套,应尽量使用简单的形式,switch语句用于多分枝选择,case和default都是入口标号,一旦进入则顺流而下,除非遇到return语句和break语句,条件表达式在许多情况下可替代if语句,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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