C语言选择结构程序设计.ppt

上传人:hyn****60 文档编号:70758366 上传时间:2023-01-27 格式:PPT 页数:56 大小:350.50KB
返回 下载 相关 举报
C语言选择结构程序设计.ppt_第1页
第1页 / 共56页
C语言选择结构程序设计.ppt_第2页
第2页 / 共56页
点击查看更多>>
资源描述

《C语言选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言选择结构程序设计.ppt(56页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第4章章选择结构程序设计选择结构程序设计 4.1if语句语句4.2switch语句语句4.3选择结构的程序设计举例选择结构的程序设计举例4.1if语句语句在在C语言中,可以用语言中,可以用if语句来实现单、双分支结构。语句来实现单、双分支结构。4.1.1if语句的语句的3种形式种形式C语言提供了语言提供了3种形式的种形式的if语句。语句。1.基本基本if结构结构(单分支结构单分支结构)基本基本if结构的一般形式为:结构的一般形式为:if(表达式表达式)语句语句1该语句的执行过程是:若表达式的值为真该语句的执行过程是:若表达式的值为真(非非0),则执行语句,则执行语句,否则不作任何操作,从而直

2、接执行,否则不作任何操作,从而直接执行if语句后面的语句。语句后面的语句。其流程图结构如其流程图结构如图图4-1所示。所示。下一页返回4.1if语句语句例例4-1判断一学生的成绩是否及格,及格则打印出及格信息,判断一学生的成绩是否及格,及格则打印出及格信息,否则不作任何处理。否则不作任何处理。程序如下:程序如下:#includemain()intscore;/*定义变量定义变量score,用它来表示,用它来表示学生的成绩学生的成绩*/printf(pleaseinputthestudentsscore:n);scanf(%d,&score);/*从键盘输出成绩并给变量从键盘输出成绩并给变量sc

3、ore*/if(score=60)/*判断成绩是否超过判断成绩是否超过60*/printf(nThestudentsscoreispassing.);/*输出成绩合格信息输出成绩合格信息*/上一页 下一页返回4.1if语句语句输出结果:输出结果:pleaseinputthestudntsscore:85Thestudentsscoreispassing.注意:注意:if语句中的语句中的“语句语句1”一般称作一般称作if子句,它可以为一条子句,它可以为一条语句,也可以是多条语句语句,也可以是多条语句(复合语句复合语句),注意复合语句要用一,注意复合语句要用一对花括号对花括号“”,“”括起来,以表

4、示其是括起来,以表示其是if语句的一部分。语句的一部分。另外,条件表达式的值在正常情况下为真或假,由于另外,条件表达式的值在正常情况下为真或假,由于C语言没语言没有专门的逻辑值,一般用有专门的逻辑值,一般用0表示假,非表示假,非0表示真。故可以利用表示真。故可以利用任何非任何非0值(正或负数)代表条件表达式值。值(正或负数)代表条件表达式值。上一页 下一页返回4.1if语句语句2.if-else结构结构(双分支结构双分支结构)if-else型分支有时也称双分支结构。这种结构的形式为:型分支有时也称双分支结构。这种结构的形式为:if(表达式表达式)语句语句1;else语句语句2;该语句的执行过程

5、是:若表达式的值非该语句的执行过程是:若表达式的值非0,则执行语句,否,则执行语句,否则执行语句则执行语句2。其流程图结构如。其流程图结构如图图4-2所示。所示。说明:说明:if后面的表达式不限于是关系表达式或逻辑表达式,可以后面的表达式不限于是关系表达式或逻辑表达式,可以是任意表达式。是任意表达式。上一页 下一页返回4.1if语句语句if语句中的控制表达式应该用括号括起来,若有语句中的控制表达式应该用括号括起来,若有else子句,子句,则控制表达式后的语句同样必须用分号结束,例如:则控制表达式后的语句同样必须用分号结束,例如:if(ij)j+;elsei+;但是分号也不能随意乱用,如果写成:

6、但是分号也不能随意乱用,如果写成:if(ij);j+;elsei+;使使if语句后面跟了一个空语句而使语句语句后面跟了一个空语句而使语句“elsei+;”变得不变得不合法。合法。上一页 下一页返回4.1if语句语句若若if子句或子句或else子句由多个语句构成,则应该构成复合语子句由多个语句构成,则应该构成复合语句,如:句,如:if(ij)j+;k+;elsei+;k+;也可以简单写成:也可以简单写成:if(ij)j+,k+;elsei+,k+;if子句和子句和else子句都是由逗号表达式构成的简单语句。子句都是由逗号表达式构成的简单语句。上一页 下一页返回4.1if语句语句例例4-2判断一学

7、生的成绩是否及格,及格则打印出及格信息,判断一学生的成绩是否及格,及格则打印出及格信息,否则打印出不及格信息。否则打印出不及格信息。#includemain()intscore;/*定义变量定义变量score,用它来表示学生的成,用它来表示学生的成绩绩*/printf(pleaseinputthestudentsscore:n);scanf(%d,&score);/*从键盘输出成绩并给变量从键盘输出成绩并给变量score*/if(score=60)/*判断成绩是否超过判断成绩是否超过60*/上一页 下一页返回4.1if语句语句printf(nThestudentsscoreispassing.

8、);/*超过,输出合格信息超过,输出合格信息*/elseprintf(nThestudentsscoreisNOTpassing.);/*否则,输出成绩不合格信息否则,输出成绩不合格信息*/输出结果:输出结果:pleaseinputthestudentsscore:55ThestudentsscoreisNOTpassing.上一页 下一页返回4.1if语句语句3.if-else-if结构结构(多分支结构多分支结构)多分支结构的一般形式为:多分支结构的一般形式为:if(表达式表达式1)语句语句1elseif(表达式表达式2)语句语句2elseif(表达式表达式3)语句语句3elseif(表达式

9、表达式m)语句语句melse语句语句n该语句的执行过程是:若表达式该语句的执行过程是:若表达式1的值非的值非0,则执行语句,则执行语句,否则若表达式否则若表达式2非非0,则执行语句,则执行语句2,否则若表达式,否则若表达式3非非0,则,则执行语句执行语句3,若前面的表达式值都为,若前面的表达式值都为0值,则最后执行值,则最后执行语句语句n。其流程图结构如。其流程图结构如图图4-3所示。所示。上一页 下一页返回4.1if语句语句例例4-3判断一学生的成绩的成绩等级,若大于判断一学生的成绩的成绩等级,若大于90分,则输出分,则输出该学生成绩优秀该学生成绩优秀A+,介于,介于80与与89之间则认为成

10、绩良好之间则认为成绩良好A,介于介于79至至70之间认为成绩中等之间认为成绩中等B,介于,介于60和和69之间则是及之间则是及格格C,否则认为成绩不及格,否则认为成绩不及格D。编写程序如下:编写程序如下:#includemain()intscore;/*定义变量定义变量score,用它来表示学生的成绩,用它来表示学生的成绩*/上一页 下一页返回4.1if语句语句printf(pleaseinputthestudentsscore:n);scanf(%d,&score);/*从键盘输入成绩并给变量从键盘输入成绩并给变量score*/if(score=90)printf(nThestudentss

11、coreisA+.);/*判断成绩是否判断成绩是否=90,是则输出成绩为,是则输出成绩为A+的信息的信息*/elseif(score=80)printf(nThestudentsscoreisA.);/*判断判断80=70)printf(nThestudentsscoreisB.);/*判断判断70=60)printf(nThestudentsscoreisC.);/*判断判断60=成绩成绩elseprintf(nThestudentsscoreisD.);/*判断成绩判断成绩上一页 下一页返回4.1if语句语句4.1.2if语句的嵌套语句的嵌套if和和else子句中可以是任意合法的子句中可以

12、是任意合法的C语句,因此也可以是语句,因此也可以是if语语句(即在一个句(即在一个if语句中可以又出现另一个语句中可以又出现另一个if语句),这种语语句),这种语句被称为句被称为if语句的嵌套或多重语句的嵌套或多重if语句。内嵌的语句。内嵌的if语句既可以嵌语句既可以嵌套在套在if子句中,又可嵌套在子句中,又可嵌套在else子句中。其一般形式有如下子句中。其一般形式有如下5种:种:(1)语句形式)语句形式1if子句中嵌套子句中嵌套if-else子句。子句。if(表达式表达式1)if(表达式表达式2)语句语句1else语句语句else语句语句3上一页 下一页返回4.1if语句语句(2)语句形式)

13、语句形式2if子句中嵌套子句中嵌套if-else子句,子句,else子句中嵌套子句中嵌套if-else语句。语句。if(表达式表达式1)if(表达式表达式2)语句语句1else语句语句2elseif(表达式表达式3)语句语句3else语句语句4上一页 下一页返回4.1if语句语句(3)语句形式)语句形式3if(表达式表达式1)if(表达式表达式2)语句语句1else语句语句2情形情形Aif(表达式表达式1)if(表达式表达式2)语句语句1else语句语句2情形情形B说明:这两种说明:这两种if语句在程序执行时的作用是不一样的,因为语句在程序执行时的作用是不一样的,因为C语言规定:语言规定:el

14、se总是与离它最近的上一个总是与离它最近的上一个if配对。如果想在配对。如果想在if子句中执行嵌套,就必须利用花括号子句中执行嵌套,就必须利用花括号“”将整个嵌套将整个嵌套if语句括起来,如情形语句括起来,如情形A;否则形成情形;否则形成情形B的状况。的状况。上一页 下一页返回4.1if语句语句(4)语句形式)语句形式4嵌套嵌套if语句带有语句带有else。这种情形属于前面介绍的。这种情形属于前面介绍的if-else-if结构。结构。if(表达式表达式1)语句语句1elseif(表达式表达式2)语句语句2else语句语句3(5)语句形式)语句形式5嵌套嵌套if语句不带有语句不带有else子句。

15、子句。if(表达式表达式1)语句语句1elseif(表达式表达式2)语句语句2上一页 下一页返回4.1if语句语句通常在通常在if-else匹配的情况下,读者很清楚匹配的情况下,读者很清楚if语句的嵌套结构。语句的嵌套结构。一旦当一旦当if-else语句不匹配,有时会产生混淆,建议一般把内语句不匹配,有时会产生混淆,建议一般把内嵌的嵌的if语句放在外层的语句放在外层的else子语句中,这样由于有外层的子语句中,这样由于有外层的else相隔,内嵌的相隔,内嵌的else不会和外层的不会和外层的if配对,而只能与内嵌配对,而只能与内嵌的的if配对,从而不会混淆。另外建议对于内嵌的配对,从而不会混淆。

16、另外建议对于内嵌的if语句一律用语句一律用“”将其括起来,使其成为外层嵌套将其括起来,使其成为外层嵌套if-else语句的子句,语句的子句,从而使其清晰明了。一般来说,建议从而使其清晰明了。一般来说,建议if语句的嵌套最多不要语句的嵌套最多不要超过超过3层。良好的程序书写习惯对于减少程序书写错误是非常层。良好的程序书写习惯对于减少程序书写错误是非常重要的。重要的。上一页 下一页返回4.1if语句语句例例4-4有一函数:有一函数:,编一程序,输入一个,编一程序,输入一个x值,输出值,输出y值。值。可以先写出算法:可以先写出算法:输入输入x若若x0y=1输出输出y或:或:输入输入x若若x0y=1上

17、一页 下一页返回4.1if语句语句输出输出y显然有以下显然有以下3种程序可以实现题目的要求。种程序可以实现题目的要求。(1)用简单的)用简单的if语句实现语句实现main()intx,y;printf(Enterthex:);scanf(%d,&x);if(x0)y=1;if(x=0)y=0;if(x0)y=-1;printf(x=%d,y=%dn,x,y);上一页 下一页返回4.1if语句语句(2)采用内层)采用内层if嵌在外层的嵌在外层的if后面的结构后面的结构main()intx,y;printf(Enterthex:);scanf(%d,&x);if(x0)y=0;elsey=1;pr

18、intf(x=%d,y=%dn,x,y);上一页 下一页返回4.1if语句语句例例4-5某商店售货,按购买货物的款数多少分别给予不同的某商店售货,按购买货物的款数多少分别给予不同的优惠折扣:优惠折扣:购货不足购货不足250元的,没有折扣;元的,没有折扣;购货满购货满250元,不足元,不足500元,折扣元,折扣5%;购货满购货满500元,不足元,不足1000元,折扣元,折扣7.5%;购货满购货满1000元,不足元,不足2000元,折扣元,折扣10%;购货满购货满2000元,折扣元,折扣15%。问题分析:设购货款为问题分析:设购货款为m,折扣为,折扣为d,根据题意则有:,根据题意则有:上一页 下一

19、页返回4.1if语句语句采用嵌套的采用嵌套的if结构实现。结构实现。main()floatm,d,amount;printf(Enteryourmoneyforbuying:);scanf(%f,&m);if(m250)d=0elseif(m500)d=5;elseif(m1000)d=7.5;elseif(m2000)d=10elsed=15;amount=m*(1-d/100);printf(amount=%6.2fn,amount);上一页 下一页返回4.1if语句语句运行情况:运行情况:Enteryourmoneyforbuying:680amount=629.00再运行:再运行:En

20、teryourmoneyforbuying:1350amount=1215.00上一页返回4.2switch语句语句if语句通常用于实现两种分支选择,而在实际应用中,存在语句通常用于实现两种分支选择,而在实际应用中,存在着大量的多路分支问题。尽管使用着大量的多路分支问题。尽管使用if语句的嵌套形式可以达语句的嵌套形式可以达到多路分支选择的目的,但随着问题复杂性的增加,分支越到多路分支选择的目的,但随着问题复杂性的增加,分支越多,嵌套的层次数也就越多,这就必然导致程序的可读性降多,嵌套的层次数也就越多,这就必然导致程序的可读性降低。因此,在低。因此,在C语言中提供了语言中提供了switch语句用

21、于直接处理多路语句用于直接处理多路分支选择问题。分支选择问题。switch语句的一般形式为:语句的一般形式为:switch(表达式)(表达式)case常量表达式常量表达式1:语句组:语句组1;case常量表达式常量表达式2:语句组:语句组2;case常量表达式常量表达式n:语句组:语句组n;default:语句组:语句组n+1;下一页返回4.2switch语句语句switch语句的执行过程为:根据语句的执行过程为:根据switch后面表达式的值,后面表达式的值,当找到与某一个当找到与某一个case后面的常量表达式的值相等时,就以此后面的常量表达式的值相等时,就以此作为一个入口,执行此作为一个入

22、口,执行此case后面的语句,执行后,流程控制后面的语句,执行后,流程控制转移到后面继续执行连续多个转移到后面继续执行连续多个case及及default语句(不再进语句(不再进行判断),直至行判断),直至switch语句的结束;若所有的语句的结束;若所有的case中的常中的常量表达式的值不与量表达式的值不与switch后面表达式的值匹配,则执行后面表达式的值匹配,则执行default后面的语句。后面的语句。在使用在使用switch语句时,应注意以下几点:语句时,应注意以下几点:switch后面的表达式和后面的表达式和case后面的常量表达式可以为任后面的常量表达式可以为任意整型或字符型数据。意

23、整型或字符型数据。上一页 下一页返回4.2switch语句语句每一个每一个case后的常量表达式的值应当互不相同。后的常量表达式的值应当互不相同。switch语句组中可以不包含语句组中可以不包含default分支,若没有分支,若没有default,则所有的常量表达式都不与表达式的值匹配时,则所有的常量表达式都不与表达式的值匹配时,switch语句就不执行任何操作。语句就不执行任何操作。另外,另外,default写成最后一项也不是语法上必须的,它也可写成最后一项也不是语法上必须的,它也可写在某个写在某个case前面(习惯上总是把前面(习惯上总是把default写在最后)。若写在最后)。若把把de

24、fault写在某些写在某些case前面,当所有的常量表达式都不与前面,当所有的常量表达式都不与表达式的值匹配时,表达式的值匹配时,switch语句就以语句就以default作为一个入口,作为一个入口,执行执行default后面的语句及连续多个后面的语句及连续多个case语句,直至语句,直至switch语句的结束。语句的结束。由于由于case及及default后都允许是语句组,所以当安排多个后都允许是语句组,所以当安排多个语句时,也不必用花括号括起。语句时,也不必用花括号括起。上一页 下一页返回4.2switch语句语句例例4-6下述程序段中,正确的是下述程序段中,正确的是:_。上一页 下一页返

25、回4.2switch语句语句switch语句执行时,先计算表达式的值,然后顺次计算表达语句执行时,先计算表达式的值,然后顺次计算表达式常量式常量1的值并与表达式的值比较。若有某个表达式常量的值的值并与表达式的值比较。若有某个表达式常量的值与其相等与其相等,则其他表达式和则其他表达式和default判定失败,程序执行该常判定失败,程序执行该常量表达式后面的语句组。若没有匹配的,则程序执行量表达式后面的语句组。若没有匹配的,则程序执行default之后语句组。之后语句组。因为没有具体运算内容,本例只能考核因为没有具体运算内容,本例只能考核switch语句的语法现语句的语法现象。前象。前3个选项中各

26、出现了一个错误。在选项个选项中各出现了一个错误。在选项A.中,中,case后后的表达式含有变量,但的表达式含有变量,但C语言要求必须是常量或常量表达式;语言要求必须是常量或常量表达式;在选项在选项B.中,中,case之后的表达式,一方面其中含有变量,更之后的表达式,一方面其中含有变量,更主要的是对主要的是对switch结构的执行机理不理解:执行该语句时,结构的执行机理不理解:执行该语句时,C语言只是将语言只是将switch后面的表达式与后面的表达式与case后的常量的值做后的常量的值做比较,因此,比较,因此,case之后一般不能使用关系、逻辑等表达式;之后一般不能使用关系、逻辑等表达式;选项选

27、项C.中的错误是在两个中的错误是在两个case后的常量都是后的常量都是12(12和和y-8),而,而C语言要求语言要求case后的常量不能重复。后的常量不能重复。上一页 下一页返回4.2switch语句语句尽管选项尽管选项D.中的中的switch语句有点怪,但从语法角度看是正语句有点怪,但从语法角度看是正确的。如果确的。如果x的值为的值为3或或-1,程序都将执行,程序都将执行y=2并结束,子并结束,子句句case2没有实际用处,可以删去。所以这是正确答案。没有实际用处,可以删去。所以这是正确答案。为了在执行某个为了在执行某个case分支后,使流程跳出分支后,使流程跳出switch结构,即结构,

28、即终止终止switch语句的执行,总是把语句的执行,总是把break语句与语句与switch语句语句一起合用,即把一起合用,即把break语句作为每个语句作为每个case分支的最后一条语分支的最后一条语句,当执行到句,当执行到break语句时,使流程跳出本条语句时,使流程跳出本条switch语句。语句。break语句又叫强制中止语句,它的功能是使程序的执行无语句又叫强制中止语句,它的功能是使程序的执行无条件转向本层复合结构的下一条语句。这种使用条件转向本层复合结构的下一条语句。这种使用switch语句语句的形式为:的形式为:上一页 下一页返回4.2switch语句语句switch(表达式)(表

29、达式)case常量表达式常量表达式1:语句组语句组1break;case常量表达式常量表达式2:语句组语句组2break;case常量表达式常量表达式n:语句组语句组nbreak;default:语句组语句组n+它的流程图如它的流程图如图图4-4所示。所示。上一页 下一页返回4.2switch语句语句例例4-7以下程序的输出结果是以下程序的输出结果是()。#includevoidmain()intx=1,y=0,a=0,b=0;switch(x)case1;switch(y)case0:a+;break;case1:b+;break;上一页 下一页返回4.2switch语句语句case2:a+

30、;b+;break;case3:a+;b+;printf(na=%d,b=%d,a,b)A.a=1,b=0B.a=2,b=1C.a=1,b=1D.a=2,b=2上一页 下一页返回4.2switch语句语句分析:这是嵌套形式的分析:这是嵌套形式的switch语句,因为语句,因为break结构影响结构影响较大,而此程序中的第较大,而此程序中的第1个个case后没有后没有break语句。程序执语句。程序执行时,行时,x=1,执行内嵌的,执行内嵌的switch语句,因语句,因y=0,计算计算a+,使变量,使变量a的值为的值为1并终止内层并终止内层switch结构,回到外层。程结构,回到外层。程序继续执

31、行序继续执行case2:后面的语句后面的语句a+;b+;,这使变,这使变量量a,b的值分别为的值分别为2和和1,外层,外层switch语句结束,故语句结束,故B正确。正确。例例4-8根据考试成绩的等级打印出百分制分数段。根据考试成绩的等级打印出百分制分数段。main()chargrade;printf(Inputthegrade:);scanf(%c,&grade);上一页 下一页返回4.2switch语句语句switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;c

32、aseD:printf(=60n);break;caseD:printf(=60再次运行输入:再次运行输入:Inputthegrade:D再次运行结果:再次运行结果:60n);break;caseD:printf(=A&ch=a&ch=0&ch0,有两个不等实根。,有两个不等实根。b2-4ac0,有两个共轭复根。,有两个共轭复根。上一页 下一页返回4.3选择结构的程序设计举例选择结构的程序设计举例编写程序如下:编写程序如下:#includemain()float,a,b,c,d,disc,x1,x2,realpart,imagpart;scanf(%f,%f,%f,&a,&b,&c);prin

33、tf(Theequation);if(fabs(a)=le-6)printf(isnotaquadratic);elsedisc=b*b-4*a*c;上一页 下一页返回4.3选择结构的程序设计举例选择结构的程序设计举例if(fabs(disc)le-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf(hasdistinctrealroots:%8.4fand%8.4fn,x1,x2);elserealpart=-b/(2*a);上一页 下一页返回4.3选择结构的程序设计举例选择结构的程序设计举例imagpart=sqrt(-disc

34、)/(2*a);printf(hascomplexroots:n);printf(%8.4f+%8.4fin,realpart,imagpart);printf(%8.4f-%8.4fin,realpart,imagpart);程序中用程序中用disc代表代表b2-4ac,先计算,先计算disc的值,以减少以后的值,以减少以后的重复计算。对于判断的重复计算。对于判断b2-4ac是否等于是否等于0时,要注意一个问时,要注意一个问题:由于题:由于disc(即(即b2-4ac)是实数,而实数在计算和存储)是实数,而实数在计算和存储时会有一些微小的误差,因此不能直接进行如下判断:时会有一些微小的误差,

35、因此不能直接进行如下判断:if(disc=0)因为这样可能会出现本来是零的量,由于因为这样可能会出现本来是零的量,由于上述误差而被判别为不等于零而导致结果错误。所以采取的上述误差而被判别为不等于零而导致结果错误。所以采取的办法是判别办法是判别disc的绝对值(的绝对值(fabs(disc))是否小于一个很)是否小于一个很小的数(例如小的数(例如10-6),如果小于此数,就认为),如果小于此数,就认为disc=0。程。程序中以序中以realpart代表实部代表实部p,以,以imagpart代表虚部代表虚部q,以,以增加可读性。增加可读性。上一页 下一页返回4.3选择结构的程序设计举例选择结构的程序设计举例运行结果如下:运行结果如下:1,2,1Theequationhastwoequalroots:-1.00001,2,2Theequationhascomplexroots:-1.0000+1.0000i-1.0000-1.0000i2,6,1Theequationhasdistinctrealroots:-0.1771and=2.8229上一页 返回图图4-1单分支结构流程图单分支结构流程图返回图图4-2双分支结构流程图双分支结构流程图返回图图4-3多分支结构流程图多分支结构流程图返回图图4-4switch和和break语句结构图语句结构图返回

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

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

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com