C语言第4章(精品).ppt

上传人:gsy****95 文档编号:85147854 上传时间:2023-04-10 格式:PPT 页数:40 大小:300KB
返回 下载 相关 举报
C语言第4章(精品).ppt_第1页
第1页 / 共40页
C语言第4章(精品).ppt_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《C语言第4章(精品).ppt》由会员分享,可在线阅读,更多相关《C语言第4章(精品).ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第4 4章章 选择结构程序设计选择结构程序设计 苏州市职业大学苏州市职业大学 计算机工程系计算机工程系C C 语言程序设计语言程序设计本章主要内容本章主要内容4.2 4.2 逻辑运算及其表达式逻辑运算及其表达式4.1 4.1 关系运算及其表达式关系运算及其表达式4.3 if语句语句4.3.1 if语句的一般形式语句的一般形式4.3.2 if语句的嵌套语句的嵌套4.4 switch语句语句4.4.1 switch语句的一般形式语句的一般形式4.4.2 break语句语句4.5 选择结构程序设计举例选择结构程序设计举例24.1 关系运算及其表达式关系运算及其表达式 所谓所谓所谓所谓“关系运算关系

2、运算关系运算关系运算”实际上就是实际上就是实际上就是实际上就是“比较运算比较运算比较运算比较运算”,即将,即将,即将,即将两个数据进行比较,判定两个数据是否符合给定的关系。两个数据进行比较,判定两个数据是否符合给定的关系。两个数据进行比较,判定两个数据是否符合给定的关系。两个数据进行比较,判定两个数据是否符合给定的关系。例如,例如,例如,例如,“a b”a b”中的中的中的中的“”表示一个大于关系运算。表示一个大于关系运算。表示一个大于关系运算。表示一个大于关系运算。如果如果如果如果a a的值是的值是的值是的值是5 5,b b的值是的值是的值是的值是3 3,则大于关系运算,则大于关系运算,则大

3、于关系运算,则大于关系运算“”的结果的结果的结果的结果为为为为“真真真真”,即条件成立;如果,即条件成立;如果,即条件成立;如果,即条件成立;如果a a的值是的值是的值是的值是2 2,b b的值是的值是的值是的值是3 3,则,则,则,则大于关系运算大于关系运算大于关系运算大于关系运算“”的结果为的结果为的结果为的结果为“假假假假”,即条件不成立。,即条件不成立。,即条件不成立。,即条件不成立。4.1.1 4.1.1 关系运算符及其优先次序关系运算符及其优先次序1 1关系运算符关系运算符关系运算符关系运算符C C语言提供语言提供语言提供语言提供6 6种关系运算符:种关系运算符:种关系运算符:种关

4、系运算符:(小于小于),=(),(),(大于大于),),=(=(大于或等于大于或等于),=(),=(等于等于),!=(),!=(不等于不等于)注意注意:在语言中,:在语言中,:在语言中,:在语言中,“等于等于等于等于”关系运算符是双等号关系运算符是双等号关系运算符是双等号关系运算符是双等号“=”=”,而不是单等号,而不是单等号,而不是单等号,而不是单等号“=”=”(赋值运算符)。(赋值运算符)。(赋值运算符)。(赋值运算符)。3 2 2优先级优先级优先级优先级 (1 1)在在在在关关关关系系系系运运运运算算算算符符符符中中中中,前前前前4 4个个个个优优优优先先先先级级级级相相相相同同同同,后

5、后后后2 2个个个个也也也也相相相相同同同同,且且且且前前前前4 4个高于后个高于后个高于后个高于后2 2个。个。个。个。(2 2)与其它种类运算符的优先级关系)与其它种类运算符的优先级关系)与其它种类运算符的优先级关系)与其它种类运算符的优先级关系 关系运算符的优先级,低于算术运算符,但高于赋值运算符。关系运算符的优先级,低于算术运算符,但高于赋值运算符。关系运算符的优先级,低于算术运算符,但高于赋值运算符。关系运算符的优先级,低于算术运算符,但高于赋值运算符。4.1.2 4.1.2 关系表达式关系表达式 1 1关系表达式的概念关系表达式的概念关系表达式的概念关系表达式的概念 所所所所谓谓谓

6、谓关关关关系系系系表表表表达达达达式式式式是是是是指指指指,用用用用关关关关系系系系运运运运算算算算符符符符将将将将两两两两个个个个表表表表达达达达式式式式连连连连接起来,进行关系运算的式子。接起来,进行关系运算的式子。接起来,进行关系运算的式子。接起来,进行关系运算的式子。例如,下面的关系表达式都是合法的:例如,下面的关系表达式都是合法的:例如,下面的关系表达式都是合法的:例如,下面的关系表达式都是合法的:abab,a+bc-da+bc-d,(a=3)=(b=5)(a=3)=ba=b,(ab)=(bc)(ab)=(bc)2 2关系表达式的值关系表达式的值关系表达式的值关系表达式的值逻辑值(非

7、逻辑值(非逻辑值(非逻辑值(非“真真真真”即即即即“假假假假”)。)。)。)。由由由由于于于于语语语语言言言言没没没没有有有有逻逻逻逻辑辑辑辑型型型型数数数数据据据据,所所所所以以以以用用用用整整整整数数数数“”表表表表示示示示“逻辑真逻辑真逻辑真逻辑真”,用整数,用整数,用整数,用整数“”表示表示表示表示“逻辑假逻辑假逻辑假逻辑假”。4 例如,假设例如,假设例如,假设例如,假设num1=3num1=3,num2=4num2=4,num3=5num3=5,则:则:则:则:(1 1)num1num2num1num2的值的值的值的值=0=0。(2 2)(num1num2)!=num3(num1nu

8、m2)!=num3的值的值的值的值=1=1。(3 3)num1num2num3num1num2num3的值的值的值的值=1=1。思思考考题题:任任任任意意意意改改改改变变变变num1num1或或或或num2num2的的的的值值值值,会会会会影影影影响响响响整整整整个个个个表达式的值吗?为什么?表达式的值吗?为什么?表达式的值吗?为什么?表达式的值吗?为什么?(4 4)(num1num2)+num3(num1num2)+num3的的的的 值值值值=6=6,因因因因 为为为为num1num2num1=0”x=0”。如果如果如果如果需要描述需要描述需要描述需要描述“x=0”x=0”、同时同时同时同时

9、“x10”x=0)&(x=0)&(x10),(x5)(x5),!(x=0)!(x=0),(year%4=0)&(year%100!=0)|(year%400=0)(year%4=0)&(year%100!=0)|(year%400=0)(2 2)运算规则运算规则运算规则运算规则 1 1)&:当当当当且且且且仅仅仅仅当当当当两两两两个个个个运运运运算算算算量量量量的的的的值值值值都都都都为为为为“真真真真”时时时时,运算结果为运算结果为运算结果为运算结果为“真真真真”,否则为,否则为,否则为,否则为“假假假假”。2 2)|:当当当当且且且且仅仅仅仅当当当当两两两两个个个个运运运运算算算算量量量量

10、的的的的值值值值都都都都为为为为“假假假假”时时时时,运运运运算结果为算结果为算结果为算结果为“假假假假”,否则为,否则为,否则为,否则为“真真真真”。3 3)!:当当当当运运运运算算算算量量量量的的的的值值值值为为为为“真真真真”时时时时,运运运运算算算算结结结结果果果果为为为为“假假假假”;当运算量的值为;当运算量的值为;当运算量的值为;当运算量的值为“假假假假”时,运算结果为时,运算结果为时,运算结果为时,运算结果为“真真真真”。例例例例如如如如,假假假假定定定定x=5x=5,则则则则(x=0)(x=0)&(x10)(x10)的的的的值值值值为为为为“真真真真”,(x5)(x5)的值为的

11、值为的值为的值为“假假假假”。7 2 2逻辑运算符的运算优先级逻辑运算符的运算优先级逻辑运算符的运算优先级逻辑运算符的运算优先级 (1 1)逻逻逻逻辑辑辑辑非非非非的的的的优优优优先先先先级级级级最最最最高高高高,逻逻逻逻辑辑辑辑与与与与次次次次之之之之,逻逻逻逻辑辑辑辑或或或或最最最最低低低低,即:即:即:即:!(非)!(非)!(非)!(非)&(与)(与)(与)(与)|(或)(或)(或)(或)(2 2)与其它种类运算符的优先关系)与其它种类运算符的优先关系)与其它种类运算符的优先关系)与其它种类运算符的优先关系 !算术运算算术运算算术运算算术运算 关系运算关系运算关系运算关系运算&|&|赋值

12、运算赋值运算赋值运算赋值运算 4.2.2 4.2.2 逻辑表达式逻辑表达式 1 1逻辑表达式的概念逻辑表达式的概念逻辑表达式的概念逻辑表达式的概念 所所所所谓谓谓谓逻逻逻逻辑辑辑辑表表表表达达达达式式式式是是是是指指指指,用用用用逻逻逻逻辑辑辑辑运运运运算算算算符符符符将将将将1 1个个个个或或或或多多多多个个个个表表表表达达达达式式式式连连连连接接接接起起起起来来来来,进进进进行行行行逻逻逻逻辑辑辑辑运运运运算算算算的的的的式式式式子子子子。在在在在C C语语语语言言言言中中中中,用用用用逻逻逻逻辑辑辑辑表表表表达式表示多个条件的组合。达式表示多个条件的组合。达式表示多个条件的组合。达式表示

13、多个条件的组合。例如,例如,例如,例如,(year%4=0)&(year%100!=0)|(year%400=0)(year%4=0)&(year%100!=0)|(year%400=0)就是一个就是一个就是一个就是一个判断一个年份是否是闰年的逻辑表达式。判断一个年份是否是闰年的逻辑表达式。判断一个年份是否是闰年的逻辑表达式。判断一个年份是否是闰年的逻辑表达式。8 逻逻逻逻辑辑辑辑表表表表达达达达式式式式的的的的值值值值也也也也是是是是一一一一个个个个逻逻逻逻辑辑辑辑值值值值(非非非非“真真真真”即即即即“假假假假”)。)。)。)。2 2逻辑量的真假判定逻辑量的真假判定逻辑量的真假判定逻辑量的

14、真假判定和非和非和非和非 语语语语言言言言用用用用整整整整数数数数“”表表表表示示示示“逻逻逻逻辑辑辑辑真真真真”、用用用用“”表表表表示示示示“逻逻逻逻辑辑辑辑假假假假”。但但但但在在在在判判判判断断断断一一一一个个个个数数数数据据据据的的的的“真真真真”或或或或“假假假假”时时时时,却却却却以以以以和和和和非非非非为为为为根根根根据据据据:如如如如果果果果为为为为,则则则则判判判判定定定定为为为为“逻逻逻逻辑辑辑辑假假假假”;如果为非,则判定为;如果为非,则判定为;如果为非,则判定为;如果为非,则判定为“逻辑真逻辑真逻辑真逻辑真”。例例例例如如如如,假假假假设设设设num=12num=12

15、,则则则则:!numnum的的的的值值值值=,num=1 num=1 num=31num31num31的的的的值值值值=1=1。3 3说明说明说明说明 (1 1)逻逻逻逻辑辑辑辑运运运运算算算算符符符符两两两两侧侧侧侧的的的的操操操操作作作作数数数数,除除除除可可可可以以以以是是是是和和和和非非非非的的的的整整整整数数数数外外外外,也也也也可可可可以以以以是是是是其其其其它它它它任任任任何何何何类类类类型型型型的的的的数数数数据据据据,如如如如实实实实型型型型、字字字字符型等。符型等。符型等。符型等。9 (2 2)在在在在计计计计算算算算逻逻逻逻辑辑辑辑表表表表达达达达式式式式时时时时,只只只

16、只有有有有在在在在必必必必须须须须执执执执行行行行下下下下一一一一个个个个表表表表达达达达式式式式才才才才能能能能求求求求解解解解时时时时,才才才才求求求求解解解解该该该该表表表表达达达达式式式式(即即即即并并并并不不不不是是是是所所所所有有有有的的的的表表表表达达达达式都被求解)。换句话说:式都被求解)。换句话说:式都被求解)。换句话说:式都被求解)。换句话说:1 1)对对对对于于于于逻逻逻逻辑辑辑辑与与与与运运运运算算算算,如如如如果果果果第第第第一一一一个个个个操操操操作作作作数数数数被被被被判判判判定定定定为为为为“假假假假”,系统不再判定或求解第二操作数。,系统不再判定或求解第二操作

17、数。,系统不再判定或求解第二操作数。,系统不再判定或求解第二操作数。2 2)对对对对于于于于逻逻逻逻辑辑辑辑或或或或运运运运算算算算,如如如如果果果果第第第第一一一一个个个个操操操操作作作作数数数数被被被被判判判判定定定定为为为为“真真真真”,系统不再判定或求解第二操作数。,系统不再判定或求解第二操作数。,系统不再判定或求解第二操作数。,系统不再判定或求解第二操作数。例例例例如如如如,假假假假设设设设n1n1、n2n2、n3n3、n4n4、x x、y y的的的的值值值值分分分分别别别别为为为为1 1、2 2、3 3、4 4、1 1、1 1,则则则则求求求求解解解解表表表表达达达达式式式式“(x

18、=n1n2)&(y=n3n4)”(x=n1n2)&(y=n3n4)”后后后后,x x的值变为,而的值变为,而的值变为,而的值变为,而y y的值不变,仍等于的值不变,仍等于的值不变,仍等于的值不变,仍等于1 1!ReturnReturn10简单分支语句简单分支语句l l语句一般格式语句一般格式 if(表达式表达式)语句语句l l功能:功能:计算表达式的值,如果是一个非计算表达式的值,如果是一个非计算表达式的值,如果是一个非计算表达式的值,如果是一个非0 0值(即值(即值(即值(即逻辑真),就执行内嵌语句,否则(即逻逻辑真),就执行内嵌语句,否则(即逻逻辑真),就执行内嵌语句,否则(即逻逻辑真),

19、就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。辑假)跳过内嵌语句,顺序执行后续语句。辑假)跳过内嵌语句,顺序执行后续语句。辑假)跳过内嵌语句,顺序执行后续语句。内嵌语句,可为:内嵌语句,可为:赋值语句赋值语句函数调用语句函数调用语句控制语句控制语句复合语句复合语句空语句空语句可为算术、关系、逻辑、赋值可为算术、关系、逻辑、赋值等表达式等表达式11简单分支语句的算法:简单分支语句的算法:l l例如:例如:if(x0)m+;if(ab)c=a;a=b;b=c;表达式非表达式非0 T F 语句语句N-S结构图结构图语句语句流程图流程图NY表达式非表达式非0?12双重分支语句双重分支

20、语句 l l语句一般格式语句一般格式if(表达式表达式)语句语句1 else 语句语句2 l l功能:功能:计算表达式的值,如果它的值是一个非计算表达式的值,如果它的值是一个非计算表达式的值,如果它的值是一个非计算表达式的值,如果它的值是一个非0 0值值值值(逻辑真),就执行内嵌语句(逻辑真),就执行内嵌语句(逻辑真),就执行内嵌语句(逻辑真),就执行内嵌语句1 1,之后跳过内,之后跳过内,之后跳过内,之后跳过内嵌语句嵌语句嵌语句嵌语句2 2,执行后续语句;否则跳过内嵌语句,执行后续语句;否则跳过内嵌语句,执行后续语句;否则跳过内嵌语句,执行后续语句;否则跳过内嵌语句1 1,执行内嵌语句,执行

21、内嵌语句,执行内嵌语句,执行内嵌语句2 2,之后执行后续语句。,之后执行后续语句。,之后执行后续语句。,之后执行后续语句。13双重分支语句的算法:双重分支语句的算法:l l例如:例如:if if(x0)m+;elseelse m-;if if(ch=a&ch=z)ch=ch-32;printf(%cn,chcn,ch);else else printf(%cn,chcn,ch);表达式非表达式非0 T F 语句语句1 语句语句2N-S结构图结构图 语句语句1 语句语句2流程图流程图NY表达式非表达式非0?14多重分支语句多重分支语句 l l语句一般格式语句一般格式if(表达式表达式1)语句语句

22、1 else if(表达式表达式2)语句语句2 else if(表达式表达式m)语句语句m else 语句语句 nl l功能:功能:依次计算并判断表达式依次计算并判断表达式依次计算并判断表达式依次计算并判断表达式i i,为非为非为非为非0 0时执行后面的时执行后面的时执行后面的时执行后面的语句,都为语句,都为语句,都为语句,都为0 0时,执行语句时,执行语句时,执行语句时,执行语句n n 无论执行完那个语句分支,都转到后续语句无论执行完那个语句分支,都转到后续语句无论执行完那个语句分支,都转到后续语句无论执行完那个语句分支,都转到后续语句15多重分支语句的算法多重分支语句的算法l l流程图流程

23、图表达式表达式表达式表达式2?2?表达式表达式表达式表达式1?1?语句语句语句语句n n 语句语句语句语句1 1 语句语句语句语句2 2 语句语句语句语句mmY YN NY YN NN NY Y表达式表达式表达式表达式m?m?16多重分支语句的算法多重分支语句的算法l lN-S结构图结构图 表达式表达式表达式表达式1 1?T FT F 表达式表达式表达式表达式2 2?语句语句语句语句1 1 T FT F 语句语句语句语句2 2 表达式表达式表达式表达式mm?T F T F 语句语句语句语句m m 语句语句语句语句n nl l例如:例如:if if(a0)x=-1;(a=A&=A&chch=Z=

24、65&=65&chch=90=A&ch=A&ch=Z?ch+32:ch);putchar(n)194.3.2 if语句的嵌套语句的嵌套l l如果如果if的内嵌语句中又使用了一个的内嵌语句中又使用了一个if语句,语句,则构成则构成if语句的嵌套。语句的嵌套。【例【例4.a】比较两个整数的关系。比较两个整数的关系。#include main()int x,y;printf(Enter integer X and Y:);scanf(%d%d,&x,&y);if(x!=y)if(x y)printf(XYn);else printf(XYn);else printf(X=Yn);应该正确判断:应该正

25、确判断:应该正确判断:应该正确判断:if if的的的的内嵌语句内嵌语句内嵌语句内嵌语句if if和和和和elseelse的配对的配对的配对的配对运行运行jc4_a提倡缩格书写提倡缩格书写提倡缩格书写提倡缩格书写有利于阅读程序有利于阅读程序20 if语句嵌套的形式语句嵌套的形式l l简单简单if语句的嵌套形式语句的嵌套形式 if(表达式表达式)if 语句语句l l双重(或多重)分支双重(或多重)分支if语句的嵌套形式语句的嵌套形式 if(表达式表达式)if 语句语句 else if 语句语句 可以是各种形式的可以是各种形式的if语句语句可以是各种形式的可以是各种形式的if语句语句如果是简单如果是

26、简单if语句,语句,必须用必须用“”括起括起21例如:例如:if(c=50)printf(50=c=100n);if(c=50)printf(50=c=100n);else printf(c50n);else if(c=150)printf(100c150n);if(c=50)printf(50=c=100n);else printf(cb)if(ac)if(ad)m=1;else m=2;else m=3;问题:哪一个问题:哪一个 else 和哪一个和哪一个 if 相匹配相匹配?规则:在规则:在嵌套的嵌套的ifelse语句语句中,中,else总是与总是与上面的离它最近的尚未配对的上面的离它最

27、近的尚未配对的if 配对。配对。23举例举例【例【例4.4】输入一个数,判断它是奇数还是】输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断偶数,如果是奇数则进一步判断它是否为它是否为5的倍数。的倍数。定义变量定义变量x输入输入x的值的值 x是奇数是奇数 T F 输出输出“odd”x是是5的的倍倍数数 输输出出“even”T F是是5的倍数的倍数24程序:程序:main()int x;scanf(%d,&x);if if(x%2!=0 x%2!=0)printf(%d is an odd n,x);if if(x%5=0 x%5=0)printf(%d is the times of 5

28、 n,x);elseelse printf(%d is an even n,x);运行运行jc4_4思考:如果没有,算法和输出如何?思考:如果没有,算法和输出如何?25学习学习if语句的难点语句的难点l lif else 语句的配对语句的配对l l正确用表达式描述条件正确用表达式描述条件例如:当例如:当x大于大于5小于小于10时令时令x自增自增 if(5x10 )x+;l l正确判断内嵌语句正确判断内嵌语句例如:例如:if(x5&x 0d 0时,方程有时,方程有时,方程有时,方程有两个不相等的实根两个不相等的实根两个不相等的实根两个不相等的实根:x1=(x1=(-b+sqrt(d)/(2*a)

29、b+sqrt(d)/(2*a)x2=(x2=(-b-sqrt(d)/(2*a)b-sqrt(d)/(2*a)当当当当d 0d 0 d 0 计算重根计算重根计算重根计算重根 T FT F 输出重根输出重根输出重根输出重根 计算实根计算实根计算实根计算实根 计算虚根计算虚根计算虚根计算虚根 输出实根输出实根输出实根输出实根 输出虚根输出虚根输出虚根输出虚根35程序:程序:#include math.hmain()float a,b,c,d,x1,x2,lp,ip;scanf(%f%f%f,&a,&b,&c);printf(the equation);if(fabs(a)1e-6)printf(is

30、 not quadratic);else d=b*b-4*a*c;if(fabs(d)1e-6)/*/*不相等的实根不相等的实根不相等的实根不相等的实根 */*/x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(has two real roots:n);printf(x1=%8.4f,x2=%8.4fn,x1,x2);else /*/*虚根虚根虚根虚根 */*/lp=-b/(2*a);ip=sqrt(-d)/(2*a);printf(has two complex roots:n);printf(x1=%8.4f+%8.4fin,lp,ip);

31、printf(x2=%8.4f-%8.4fin,lp,ip);运行运行jc4_637举例(续):举例(续):【例【例4.b】输入年份,判别该年是否为闰年。输入年份,判别该年是否为闰年。思路:思路:思路:思路:年份年份年份年份yearyear为闰年的条件为为闰年的条件为为闰年的条件为为闰年的条件为 能够被能够被能够被能够被4 4整除,但不能被整除,但不能被整除,但不能被整除,但不能被100100整除的年份;整除的年份;整除的年份;整除的年份;能够被能够被能够被能够被400400整除的年份。整除的年份。整除的年份。整除的年份。只要满足任意一个就可以确定它是闰年。只要满足任意一个就可以确定它是闰年。

32、只要满足任意一个就可以确定它是闰年。只要满足任意一个就可以确定它是闰年。例如:例如:例如:例如:19961996年、年、年、年、20002000年是闰年年是闰年年是闰年年是闰年19981998年、年、年、年、19001900年不是闰年年不是闰年年不是闰年年不是闰年设定标志变量设定标志变量leapleap,只要符合其中一个条件的就是只要符合其中一个条件的就是闰年,令闰年,令 leap=1leap=1;否则令否则令 leap=0leap=0 38算法:算法:定义变量定义变量year、leap 输入年份输入年份year 能被能被能被能被4 4整除且整除且整除且整除且 不能被不能被不能被不能被1001

33、00整除?整除?整除?整除?T F 能被能被能被能被400400整除?整除?整除?整除?leap=1 T F leap=1 leap=0 leap=1?T F 是闰年是闰年 不是闰年不是闰年year%400=0year%400=0year%4=0&year%4=0&year%100!=0year%100!=039程序:程序:main()int year,leap;scanf(%d,&year);if(year%4=0&year%100!=0)leap=1;else if(year%400=0)leap=1;else leap=0;if(leap=1)printf(%d is a leap year n,year);else printf(%d is not a leap year n,year);运行运行jc4_b40

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

当前位置:首页 > 生活休闲 > 生活常识

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

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