C07第4章 逻辑运算与选择结构程序(2)_第1页
C07第4章 逻辑运算与选择结构程序(2)_第2页
C07第4章 逻辑运算与选择结构程序(2)_第3页
C07第4章 逻辑运算与选择结构程序(2)_第4页
C07第4章 逻辑运算与选择结构程序(2)_第5页
已阅读5页,还剩30页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、新编C语言程序设计教程 清华大学出版社周二强 软件学院 计算机科学与工程系配套视频:配套视频: 博客:博客: 选择结构的嵌套 4.5 4.5 条件操作符条件操作符4.6 switch 4.6 switch 结构结构4.6.1 基本的switch结构 4.6.2 有break语句的switch结构 4.7 4.7 典型例题典型例题4.4.2 4.4.2 选择结构的嵌套选择结构的嵌套ifif结构或结构或if-elseif-else结构中的语句可以是任意的结构中的语句可以是任意的C C语句,当语句,当然也可以是被看作一条语句的然也可以是被看作一条语句的ifif结构或结构或if-elseif-else

2、结构本身,结构本身,出现这种情况时称之为选择结构的嵌套。出现这种情况时称之为选择结构的嵌套。例例4-12 4-12 输入成绩,若数据合法时判断成绩是否及格。输入成绩,若数据合法时判断成绩是否及格。分析:当输入成绩合法(分析:当输入成绩合法(0 0100100)时,若成绩不小于)时,若成绩不小于6060分则输出及格,否则输出不及格。分则输出及格,否则输出不及格。例例4-124-12例例4-134-13例例4-134-13有函数:有函数:编程,输入编程,输入x x值,输出值,输出y y值。值。 分析:输入分析:输入x x; 若若x 0 x 0则则y = x + 1y = x + 1; 否则否则 /

3、意味着意味着x 0 x 0的逻辑非,即的逻辑非,即x0 x0 若若x x = 0 0则则y = xy = x; 否则否则 /此时此时 x 0 x 0 x 0 y = x - 1 y = x - 1;y =x + 1 (x 0)例例4-134-13y =x + 1 (x 0)例例4-134-13的另一种算法的另一种算法elseelse的配对的配对 使用复合语句可以影响使用复合语句可以影响elseelse的配对,因为复合语句是一的配对,因为复合语句是一个封闭的整体,外面的个封闭的整体,外面的elseelse不会和里面的不会和里面的ifif配对。正确的配对。正确的代码应为:代码应为:return4.

4、54.5条件操作符条件操作符条件操作符?:是条件操作符?:是C C语言中唯一的一个三目操作符,需语言中唯一的一个三目操作符,需要三个操作数。条件表达式的一般形式为:表达式要三个操作数。条件表达式的一般形式为:表达式1 1?表?表达式达式2 2:表达式:表达式3 3 。 确定条件表达式的值时,先要求表达式确定条件表达式的值时,先要求表达式1 1的值,若表达的值,若表达式式1 1的值是真(非的值是真(非0 0),则条件表达式的值为表达式),则条件表达式的值为表达式2 2的值;的值;若表达式若表达式1 1的值是假(的值是假(0 0),则条件表达式的值为表达式),则条件表达式的值为表达式3 3的值。的

5、值。条件表达式可看作是简单的条件表达式可看作是简单的if-elseif-else结构的简写形式。结构的简写形式。 条件操作符的优先级条件操作符的优先级 如如if-elseif-else结构结构ifif(a ba b) max = a; max = a;elseelse max = b; max = b;可用条件表达式改写为可用条件表达式改写为(a ba b)?()?(max = amax = a) :(:(max = bmax = b)或)或max =max =(abab)?)?a a :b b)。)。条件操作符的条件操作符的? ?处有一个序列点处有一个序列点条件表达式条件表达式i j ? +

6、i : +ji j ? +i : +j中,自增操作符的优先中,自增操作符的优先级最高,求值时会先进行自增操作吗?不会!级最高,求值时会先进行自增操作吗?不会!C C语言规定:条件操作符的?处有一个序列点,而序列语言规定:条件操作符的?处有一个序列点,而序列点左边的子表达式先于右边的求值,也就是说上式中子表点左边的子表达式先于右边的求值,也就是说上式中子表达式达式i ji j先求值,然后再根据先求值,然后再根据i ji j的结果选择右边的一的结果选择右边的一个子表达式求值,即个子表达式求值,即+i+i和和+j+j只可能有一个被执行,与相只可能有一个被执行,与相应的应的if-elseif-else

7、结构执行过程相同。结构执行过程相同。条件表达式条件表达式a b ? a : c a b ? a : c d ? + c : +dd ? + c : +d求值求值条件操作符的结合性为右结合。条件表达式条件操作符的结合性为右结合。条件表达式a b ? a : a b ? a : c d ? +c : +dc d ? +c : +d相当于相当于a b ? a : (c d ? +c : a b ? a : (c d ? +c : +d),+d),但是由于序列点的存在,该表达式中右边子表达式但是由于序列点的存在,该表达式中右边子表达式不能先于左边子表达式不能先于左边子表达式a ba b求值。如果求值。

8、如果a = 1a = 1、b = 0b = 0、c c = 2= 2、d = 3d = 3,则该表达式的值等于则该表达式的值等于1 1,并且子表达式,并且子表达式(cd ? +c : (cd ? +c : +d)+d)不会被求值,表达式求值结束后不会被求值,表达式求值结束后a a、b b、c c、d d的值都不的值都不变。变。从程序的可读性考虑,条件操作符一般只用于替换形式从程序的可读性考虑,条件操作符一般只用于替换形式简单的简单的if-elseif-else结构,最好不要嵌套。结构,最好不要嵌套。条件表达式的值的类型条件表达式的值的类型条件表达式的值的类型为子表达式条件表达式的值的类型为子表

9、达式2 2和子表达式和子表达式3 3的类型的类型中较高的类型。例如中较高的类型。例如3 2 ? 1 : 3 2 ? 1 : a a + 2.3 + 2.3的值的值为为1.01.0,类型为双精度,因子表达式,类型为双精度,因子表达式a a + 2.3 + 2.3的类型为的类型为双精度高于整型。(双精度高于整型。(sizeof(3 2 ? 1 : sizeof(3 2 ? 1 : a a + 2.3) + 2.3)等于等于8 8)。)。注意:条件表达式多用于替代简单的注意:条件表达式多用于替代简单的if-elseif-else结构,其结构,其值与类型有时并不被关心。例如条件表达式值与类型有时并不被

10、关心。例如条件表达式a b a b ?printf(printf(%d%d, a) : , a) : printf(printf(%d%d, b), b)。例例4-144-14求绝对值(用条件表达求绝对值(用条件表达式改写例式改写例4-84-8)return4.6.1 4.6.1 基本的基本的switchswitch结构结构switchswitch结构包含一系列结构包含一系列casecase标号和一个可有可无的标号和一个可有可无的defaultdefault子句,它的一般形式为:子句,它的一般形式为:其中,常量表达式通常是指表其中,常量表达式通常是指表达式中操作数的值不会改变从达式中操作数的值

11、不会改变从而整个表达式的值固定不变的而整个表达式的值固定不变的表达式,如表达式,如20 * 5为一个常量为一个常量表达式,而表达式,而20*i就不是一个常就不是一个常量表达式。量表达式。一般地常量表达式中的操作数一般地常量表达式中的操作数为字面量。为字面量。语句序列为一组任意的语句序列为一组任意的C语句。语句。switchswitch的结构执行的结构执行switchswitch结构执行时,首先计算表达式的值,然后将表达结构执行时,首先计算表达式的值,然后将表达式的值依次与常量表达式的结果比较,有相等的,则从与式的值依次与常量表达式的结果比较,有相等的,则从与该该casecase语句相对应的语句

12、序列处开始执行;没有相等的,语句相对应的语句序列处开始执行;没有相等的,如有如有defaultdefault子句则从与子句则从与defaultdefault相对应的语句序列处开始相对应的语句序列处开始执行,没有执行,没有defaultdefault子句时子句时switchswitch结构执行完毕此时任何结构执行完毕此时任何语句序列都没有执行。语句序列都没有执行。开始执行语句序列后将不再进行判断,位于下面的全部开始执行语句序列后将不再进行判断,位于下面的全部语句序列都将依次执行,语句序列执行完后语句序列都将依次执行,语句序列执行完后switchswitch结构也结构也就执行完毕了。就执行完毕了。

13、执行执行注意:注意:1.default1.default子句和各个子句和各个casecase标号出现的次序是任意的,标号出现的次序是任意的,即可以先写即可以先写defaultdefault子句,再写子句,再写casecase标号。标号。2.2.常量表达式的值必须互不相同;常量表达式的值必须互不相同;3.3.表达式的值一般为整型(含字符)。表达式的值一般为整型(含字符)。例例4-154-15写出输入写出输入b b时程序的输出时程序的输出return4.6.24.6.2有有breakbreak语句的语句的switchswitch结构结构breakbreak语句可以语句可以立即终止立即终止switc

14、hswitch结结构中的语句序列的构中的语句序列的执行,同时也就终执行,同时也就终止了止了switchswitch结构的结构的执行。执行。例例4-164-16有有breakbreak语句的语句的switchswitch结构结构 两种两种switchswitch结构的对比结构的对比switchswitch结构结构有有breakbreak语句的语句的switchswitch结构实际上是结构实际上是“相等关系相等关系”的多的多分支选择结构。分支选择结构。casecase标号仅起指示位置的作用,与标号仅起指示位置的作用,与casecase标号相关联的语标号相关联的语句序列可以为空,此时句序列可以为空,

15、此时switchswitch结构的执行过程不变,依然结构的执行过程不变,依然从该位置开始依次执行下面的语句序列。从该位置开始依次执行下面的语句序列。如下面这段代码用如下面这段代码用switchswitch结构判断变量结构判断变量i i能否被能否被4 4整除。整除。return4.7 4.7 典型例题典型例题例例4-17 4-17 输入输入3 3个整数个整数a a,b b和和c c ,将它们按升序(从小到,将它们按升序(从小到大)输出。大)输出。分析:分析: a a ,b b,c c三个数排序过程如下:三个数排序过程如下:第一步:将第一步:将b b插入到前面有序的子序列(认为子序列插入到前面有序

16、的子序列(认为子序列a a已已经有序),得到长度为经有序),得到长度为2 2有序子序列有序子序列a a,b b。第二步:将第二步:将c c插入到前面的有序子序列,得到长度为插入到前面的有序子序列,得到长度为3 3的的有序序列有序序列a a,b b,c c。 例例4-174-17对于第一步:如果对于第一步:如果a = ba ba b,则交换,则交换a a,b b的值,使子序列的值,使子序列a a,b b有序。有序。相应的代码为:相应的代码为:if(aif(a b) a b) a,b b的值互换的值互换 。第二步:第二步:c c依次与依次与b b,a a比较,确比较,确定定c c在序列中的正确位置

17、。在序列中的正确位置。c c先与先与b b比较,如果比较,如果b = cb cb c,则交换,则交换b b,c c的值,交换后的值,交换后c c仍需与仍需与a a比较,比较,因因b b,c c已交换,故此时的已交换,故此时的c c与与a a比较实为比较实为b b与与a a比较。如果比较。如果a a = b ba b,则交,则交换换a a,b b的值,使序列的值,使序列a a,b b,c c有序。有序。第二步的相关代码为:第二步的相关代码为: 例例4-174-17例例4-18 4-18 判断某一年是否为闰年。判断某一年是否为闰年。例例4-18 4-18 根据一般规律根据一般规律“四年一闰,百年不

18、闰,四百年再四年一闰,百年不闰,四百年再闰闰”,判断某一年是否为闰年。,判断某一年是否为闰年。 分析:用整型变量分析:用整型变量yearyear表示某年,表示某年, 如果如果yearyear不是不是4 4的倍数,则它不是闰年。的倍数,则它不是闰年。 否则(意味着否则(意味着yearyear是是4 4的倍数)的倍数) 如果不是如果不是100100的倍数,则是闰年。的倍数,则是闰年。 否则(是否则(是100100的倍数)的倍数) 如果不是如果不是400400的倍数,则不是闰年。的倍数,则不是闰年。 否则(是否则(是400400的倍数)的倍数) 是闰年。是闰年。例例4-18 4-18 判断某一年是否

19、为闰年。判断某一年是否为闰年。例例4-19 4-19 输入百分制成绩,输出输入百分制成绩,输出相应的等级。相应的等级。例例4-19 4-19 输入百分制成绩,输出相应的等级。百分制成输入百分制成绩,输出相应的等级。百分制成绩和等级的对应关系为:绩和等级的对应关系为:9090100100为为A A,80808989为为B B,70707979为为C C,60606969为为D D,0 05959为为E E。分析:用变量分析:用变量gradegrade表示成绩,则相应的表示成绩,则相应的if-elseif-else结构可结构可用图用图4-134-13表示。表示。例例4-19 4-19 输入百分制成绩,输出输入百分制成绩,输出相应的等级。相应的等级。例例4-204-20用用switchswitch结构改写例结构改写例4-4-1919。分析:分析:switchswitch结构是结构是“相等关系相等关系”的多分支选的多分支选择结构,使用时需把条件择结构,使用时需把条件与某个(或某些)整数联与某个(或某些)整数联系起来。系起来。例例4-214-21输入

温馨提示

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

评论

0/150

提交评论