-C语言程序设计课件0905选择结构程序设计_第1页
-C语言程序设计课件0905选择结构程序设计_第2页
-C语言程序设计课件0905选择结构程序设计_第3页
-C语言程序设计课件0905选择结构程序设计_第4页
-C语言程序设计课件0905选择结构程序设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、选择结构程序设计课程:程序设计语言教材:谭浩强C程序设计第三版教师:陈小荷本章重点掌握关系运算符、逻辑运算符的优先次序,理解条件表达式的意义。掌握if语句的四种形式,能针对具体问题正确运用。理解switch语句的控制结构,能正确运用。关系运算符 小于 大于 优先级高(6)= 大于或等于= 等于 优先级低(7)!= 不等于关系表达式比较两个运算数,表达式成立则值为1 ( true ) ,否则值为 0 ( false ) : x y / 未知 x + 5 x/ 1 ( true ) x + 5 = x / 1 ( true )关系运算符与算术运算符算术运算符的优先级是3(乘除余)和4(加减)以下两

2、个表达式的值是多少?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 逻辑值表第一行是标题

3、。以第二行为例,读法是:若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 的

4、值未知,请对下列表达式求值:x = y & 10 = y & x != xa 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分及格)判断是否“英文字母”判断是否“小写英文字

5、母或阿拉伯数字”判断是否“能被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, 否则执行 s2sample : 输入g, 0,两个printf 语句的执行情况如何?if ( isletter(c

6、h) ) 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) co

7、st=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 ;elseif ( e2 ) s3 ;else s4 ;写法1if (x0) y = 1 ;语法、逻辑都没有错,运行也正确,但效率低写法2和写法3if (x=0) if (x0) y = 1 ;else y = 0 ;else y = -

8、1 ;if与else的匹配原则就近匹配:嵌套的if语句中,else总是跟离它最近的上一个尚无匹配的if匹配,不管缩进形式是怎样的:if ( e )if ( e1 ) s1 ; else s2 ; /* 跟匹配 */else /* 跟匹配 */if ( e2 ) s3 ; else s4 ; /* 跟匹配 */写法4和写法5y = -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(高于赋值运算

9、符),结合方向是自右至左条件表达式的值是这样计算的:先对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)因此,条件表达式也可以用于多分枝选择不过,为了容易理解,

10、一般应该用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

11、”); 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 : 不是一元二

12、次方程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 运费计算可以有多种写法:如教材所示,用swit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论