《C语言程序设计 第5章 选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计 第5章 选择结构程序设计.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第五章选择结构程序设计第五章选择结构程序设计5.3 switch5.3 switch语句语句5.4 5.4 选择结构程序设计举例选择结构程序设计举例 5 5.2 if.2 if语句语句5 5.1.1 关关系运算符和表达式系运算符和表达式,逻辑运算符和表达式逻辑运算符和表达式 小于小于小于小于 ,53,3553,35=小于等于,小于等于,小于等于,小于等于,5=3,3=55=3,3 大于,大于,大于,大于,5353,3535=大于等于,大于等于,大于等于,大于等于,5=3,3=55=3,3=5 ,与数学上与数学上与数学上与数学上()()不同不同不同不同=等于,等于,等于,等于,5=3,5=3,与
2、数学上与数学上与数学上与数学上(=)(=)不同不同不同不同!=!=不等于,不等于,不等于,不等于,5!=3 5!=3,与数学上与数学上与数学上与数学上()()不同不同不同不同1 1、关系运算符、关系运算符、关系运算符、关系运算符5.1.1关系运算符和关系表达式关系运算符和关系表达式关系运算:比关系运算:比关系运算:比关系运算:比较运算,比较较运算,比较较运算,比较较运算,比较两个操作数,两个操作数,两个操作数,两个操作数,看是否满足给看是否满足给看是否满足给看是否满足给定的关系。定的关系。定的关系。定的关系。=!=优优先先级级别别相相同同优优先先级级别别相相同同高高算术运算符算术运算符关系运算
3、符关系运算符赋值运算符赋值运算符高高优先级优先级低低低低2 2、关系表达式:、关系表达式:、关系表达式:、关系表达式:用用用用关系运算符关系运算符关系运算符关系运算符将两个表达式连接起来的式子,称为将两个表达式连接起来的式子,称为将两个表达式连接起来的式子,称为将两个表达式连接起来的式子,称为关系表达式。关系表达式。关系表达式。关系表达式。例:例:例:例:ab ab a+ba+b b+cb+c ab)(bc)ab)(bb&xy (ab)&(xy)a=b|x=y (a=b)|(x=y)!a|ab (!a)|(ab)、逻辑表达式、逻辑表达式 用用用用逻辑运算符逻辑运算符逻辑运算符逻辑运算符将两个表
4、达式连接起来的式子,称为将两个表达式连接起来的式子,称为将两个表达式连接起来的式子,称为将两个表达式连接起来的式子,称为逻辑表达式。逻辑表达式。逻辑表达式。逻辑表达式。注意:逻辑表达式的值注意:逻辑表达式的值注意:逻辑表达式的值注意:逻辑表达式的值是一个是一个是一个是一个逻辑值,逻辑值,逻辑值,逻辑值,即即即即“真真真真”或或或或“假假假假”以数值代表以数值代表以数值代表以数值代表“真真真真”,以代表,以代表,以代表,以代表“假假假假”,但在,但在,但在,但在判断一个量是否为判断一个量是否为判断一个量是否为判断一个量是否为“真真真真”时,以时,以时,以时,以代表代表代表代表“假假假假”,以,以
5、,以,以非非非非代表代表代表代表“真真真真”例:例:例:例:1 1 若若若若a=4,a=4,则则则则!a!a的值为的值为的值为的值为 2 2 若若若若a=4,b=5,a=4,b=5,则则则则a&ba&b的值为的值为的值为的值为1 1,因为,因为,因为,因为a a和和和和b b均为非均为非均为非均为非0 0,则被,则被,则被,则被 认为是认为是认为是认为是“真真真真”,因此,因此,因此,因此a&ba&b的值也为的值也为的值也为的值也为“真真真真”,值为,值为,值为,值为1 13 4&0|23 4&0|2的值为的值为的值为的值为1 14 a&4 a&b b 的值为的值为的值为的值为1,1,因为因为
6、因为因为 aa和和和和 bb的的的的ASCIIASCII值都值都值都值都不为不为不为不为通过以上几个例子可以看出,逻辑运算结果不是就是通过以上几个例子可以看出,逻辑运算结果不是就是通过以上几个例子可以看出,逻辑运算结果不是就是通过以上几个例子可以看出,逻辑运算结果不是就是,不可能有其他数值。然而在逻辑表达式中作为参加逻辑运,不可能有其他数值。然而在逻辑表达式中作为参加逻辑运,不可能有其他数值。然而在逻辑表达式中作为参加逻辑运,不可能有其他数值。然而在逻辑表达式中作为参加逻辑运算的运算对象可以是或任何非数值。表示算的运算对象可以是或任何非数值。表示算的运算对象可以是或任何非数值。表示算的运算对象
7、可以是或任何非数值。表示“假假假假”,任,任,任,任何非数值都按照何非数值都按照何非数值都按照何非数值都按照“真真真真”对待对待对待对待另外需要注意的是另外需要注意的是另外需要注意的是另外需要注意的是在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行只有在必须
8、执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符该运算符该运算符该运算符例如例如例如例如:1 1 a&b&ca&b&c 只有只有只有只有a a为真为真为真为真(非非非非0)0)时,才需要判断时,才需要判断时,才需要判断时,才需要判断b b的值,只有的值,只有的值,只有的值,只有a a和和和和b b都为真都为真都为真都为真的情况下才需要判别的情况下才需要判别的情况下才需要判别的情况下才需要判别c c的值。只要的值。只要的值。只要的值。只要a a为假,就不必判别为假,就不必判别为假,就不必判别为假,就不必判别b b和和和和C C,因为此时整个表达,因为此时整个表达,因为此时整个表达,因为此
9、时整个表达式已确定为假。若式已确定为假。若式已确定为假。若式已确定为假。若a a为真,为真,为真,为真,b b为假,不判别为假,不判别为假,不判别为假,不判别c cabc0非0非0非0000(假假)(真真)2 2 a|b|ca|b|c 只要只要只要只要a a为真为真为真为真(非非非非0)0)时,就不用判断时,就不用判断时,就不用判断时,就不用判断b b和和和和c c,只有,只有,只有,只有a a为假,才判断为假,才判断为假,才判断为假,才判断b b,a a和和和和b b都为假时才判断都为假时才判断都为假时才判断都为假时才判断c cabc0非0非0非0000(假假)(真真)也就是说,对也就是说,
10、对&运算符来说,运算符来说,只有只有a!=a!=,才继续进行其右边,才继续进行其右边的运算。对的运算。对|运算符只有运算符只有a=0a=0才继续右边的运算才继续右边的运算例:设例:设例:设例:设a=1,b=2,c=3,d=4,m=1,n=1a=1,b=2,c=3,d=4,m=1,n=1 判断逻辑表达式判断逻辑表达式判断逻辑表达式判断逻辑表达式 (m=a(m=ab)&(nb)&(n=cd)=cd)的逻辑值和完成此运算后的逻辑值和完成此运算后的逻辑值和完成此运算后的逻辑值和完成此运算后mm和和和和n n的值的值的值的值此逻辑表达式的值为此逻辑表达式的值为 “假假”运行完后,运行完后,m m而而n=
11、cdn=cd不被执行,因此不被执行,因此n n的值仍保持原值的值仍保持原值5.2 if5.2 if语句语句 1、单分支选择单分支选择if语句语句if语语句句有有三三种种形形式式:单单分分支支选选择择if语语句句、双双分分支支面具选择面具选择if语句语句、多分支选择多分支选择if语句语句。语句形式:语句形式:if (表达式)表达式)语句;语句;语句执行流程:语句执行流程:表达式表达式语句语句真真(非非0)假假(0)5.2.1 if5.2.1 if语句的三种形式语句的三种形式例例:从从键键盘盘输输入入两两个个整整数数a和和b,如如果果a大大于于b则则交交换换两两数,最后输出两个数。数,最后输出两个
12、数。#include abab交换交换a a、b b真真假假 main()int a,b,t;scanf(%d,%d,&a,&b);if(ab)t=a;a=b;b=t;printf(a=%d,b=%dn,a,b);输入输入a,b输出输出a,b结束结束注意:注意:(1 1)ifif语句自动结合一个语句,当满足条件需语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号要执行多个语句时,应用一对大括号 将需要将需要执行的多个语句括起,形成一个复合语句。执行的多个语句括起,形成一个复合语句。(2 2)ifif语句中表达式形式很灵活,可以是常量、语句中表达式形式很灵活,可以是常量、变量、任
13、何类型表达式、函数、指针等。只要变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件表达式的值为非零值,条件就为真,反之条件为假。为假。2、双分支选择双分支选择if语句语句语句形式:语句形式:if (表达式)表达式)语句语句1;else 语句语句2;语句执行流程:语句执行流程:表达式表达式语句语句1真真(非非0)假假(0)语句语句2例例 输输入入两两个个整整数数,输输出出其中较大的数。其中较大的数。#include main()int x,y,max;scanf(%d,%d,&x,&y);if(xy)max=x;else max=y;printf(max=%dn,m
14、ax);输入输入x,yx,yxyxymax=xmax=x输出最大值输出最大值结束结束真真假假max=ymax=y例:例:计算分段函数计算分段函数y=3-x x02/x x0输入输入xx=0输入输入yy=3-xy=2/x真真假假程序如下:程序如下:#include“stdio.h”main()float x,y;scanf(“%f”,&x);if(xb)a+;b+;else a=0;b=10;3、多分支选择多分支选择if语句语句语句形式:语句形式:If(If(表达式表达式)语句;语句;elseelseif(if(表达式表达式)语句;语句;elseelseif(if(表达式表达式n)语句语句n;e
15、lse else 语句语句n+1;n+1;语句执行流程:语句执行流程:表达式表达式1 1语句语句1真真(非非0)假假(0)语句语句2表达式表达式2 2真真(非非0)表达式表达式2 2语句语句n语句语句n+1假假(0)假假(0)真真(非非)a=90Printf 优优真真(非非0)假假(0)输入分数输入分数aa=80Printf 良良a=70a=60Printf 中中Printf 及格及格Printf 不及格不及格假假(0)假假(0)假假(0)真真(非非0)真真(非非0)真真(非非0)例:例:输入不同的分数,输出其等级输入不同的分数,输出其等级例:例:#include main()float a;
16、printf(请输入分数:请输入分数:);scanf(%f,&a);if(a=90)printf(优优n);else if(a=80)printf(良良n);else if(a=70)printf(中中n);else if(a=60)printf(及格及格n);else printf(不及格不及格n);注意:注意:(1 1)当当ifif语语句句中中出出现现多多个个“ifif”与与“elseelse”的的时时候候,要要特特别别注注意意它它们们之之间间的的匹匹配配关关系系,否否则则就就可可能能导导致致程程序序逻逻辑辑错错误误。“elseelse”与与“ifif”的的匹匹配配原原则则是是“就就近近一
17、一致致原原则则”,即即“elseelse”总是与它前面最近的未配对的总是与它前面最近的未配对的“ifif”相匹配。相匹配。(2 2)ifif语句中条件的写法应尽量简单。语句中条件的写法应尽量简单。语句含义语句含义:语句形式:语句形式:当当ifif语句中又包含若干个语句中又包含若干个ifif语句时,则构成了语句时,则构成了if if 语语句嵌套的情形。句嵌套的情形。if(表达式表达式1)if(表达式表达式2)语句语句1;if(表达式表达式1)if(表达式表达式2)语句语句1;else 语句语句2;5.2.2 if语句的嵌套语句的嵌套例:编写一个程序,输入例:编写一个程序,输入x的值,输出相应的值
18、,输出相应y值值.y=-101(x0)使用使用If语句嵌套编写该程序语句嵌套编写该程序#include“stdio.h”main()int x,y;scanf(“%d”,&x);if(x=0)if(x0)y=1;else y=0;else y=-1;printf(“x=%d,y=%d”,x,y);输入x开始X=0X0y=1y=0y=-1输出x结束假假假假真真真真5.3 switch5.3 switch语句语句1、语句形式:、语句形式:switch (表达式)表达式)case 常量常量1:语句语句1;case 常量常量2:语句语句2;case 常量常量3:语句语句3;.case 常量常量n:语句
19、语句n;default:语句语句n+1;根据表达式的不同值,根据表达式的不同值,根据表达式的不同值,根据表达式的不同值,选择不同的程序分支,选择不同的程序分支,选择不同的程序分支,选择不同的程序分支,又称开关语句又称开关语句又称开关语句又称开关语句。常量表达式的值必须常量表达式的值必须互不相同,否则执行互不相同,否则执行时将出现矛盾,即同时将出现矛盾,即同一个开关值,将对应一个开关值,将对应多种执行方案。多种执行方案。2、语句执行流程:、语句执行流程:简单语句或简单语句或复合语句复合语句casecase语句出语句出现的次序并现的次序并不影响执行不影响执行结果。结果。语句语句1表达式的值表达式的
20、值语句语句2语句语句3语句语句n常量常量1=常量常量2=常量常量3=常量常量n例例:假假设设用用0 0、1 1、2.62.6分分别别表表示示星星期期日日、星星期期一一.星星期期六六。现现输输入入一一个个数数字字,输输出出对对应应的的星星期期几几的的英文单词。如果输入英文单词。如果输入3 3,输出,输出“Wednesday”Wednesday”。#include stdio.h main()int n;scanf(%d,&n);switch(n)case 0:printf(Sundayn);case 1:printf(Mondayn);case 2:printf(Tuesdayn);case 3
21、:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);default:printf(Error);思考:结果如何?思考:结果如何?程序运行情况如下:程序运行情况如下:33Wednesday Wednesday ThursdayThursdayFridayFridaySaturdaySaturdayErrorError将上面的例修改如下:将上面的例修改如下:#include stdio.hmain()int n;scanf(%d,&n);switch(n)case
22、0:printf(Sundayn);break;case 1:printf(Mondayn);break;case 2:printf(Tuesdayn);break;case 3:printf(Wednesdayn);break;case 4:printf(Thursdayn);break;case 5:printf(Fridayn);break;case 6:printf(Saturdayn);break;default:printf(Error);程序运行情况如下:程序运行情况如下:33Wednesday Wednesday 说明:说明:switch后后面面括括弧弧内内的的“表表达达式式”
23、,ANSI标标准准允允许许它它为为任任何何类类型型当当表表达达式式的的值值与与某某一一个个case后后面面的的常常量量表表达达式式相相等等时时,就就执执行行此此case后后面面的的语语句句,若若所所有有case后后面面的的常常量量值值都都没没有有与与表表达达式的值相匹配的就执行式的值相匹配的就执行default后面的语句。后面的语句。常量表达式的值必须互不相同常量表达式的值必须互不相同,否则执行时将出现矛盾。,否则执行时将出现矛盾。各各个个case和和default的的出出现现次次序序不不影影响响执执行行结结果果,因因此此各各个个case和和default之间的顺序是可以调换的。之间的顺序是可
24、以调换的。defaultdefault语句可以省略不用。语句可以省略不用。switchswitch语句可以嵌套,语句可以嵌套,breakbreak语句只跳出它所在语句只跳出它所在的的switchswitch语句。语句。执执行行完完一一个个case后后面面的的语语句句后后,流流程程控控制制转转移移到到下下一一个个case继继续续执执行行。“case常常量量表表达达式式”只只是是起起语语句句标标号号作作用用,并并不不是是在在该该处处进进行行条条件件判判断断。在在执执行行switch语语句句时时,根根据据switch后后面面表表达达式式的的值值找找到到匹匹配配的的入入口口标标号号,就就从从此此标标号
25、号开开始始执执行行下下去去,不不再再进进行行判判断断。为为此此,语语言言提提供供了了一一种种breakbreak语句,其功能是可以跳出它所在的语句,其功能是可以跳出它所在的switchswitch语句。语句。另外:另外:多个多个casecase语句可以共用一组执行语句。语句可以共用一组执行语句。switch(grade)case A:case B:case C:printf(grade=60n);break;default:printf(grade60);5.4 5.4 选择结构程序设计举例选择结构程序设计举例 例例:将任意三个整数按从大到小的顺序输出将任意三个整数按从大到小的顺序输出。#in
26、clude stdio.hmain()int x,y,z,t;scanf(%d,%d,%d,&x,&y,&z);if(xy)t=x;x=y;y=t;/*交换交换x,y的值的值*/if(xz)t=x;x=z;z=t;/*交换交换x,z的值的值*/if(yc&a+cb&b+ca)if(a=b&b=c)printf(“等边三角形等边三角形.n);else if(a=b|a=c|b=c)printf(“等腰三角形等腰三角形.n);else printf(“其它三角形其它三角形.n);else printf(“不能构成三角形不能构成三角形n);作业作业、给出百分制成绩,要求输出成绩等级、给出百分制成绩,要求输出成绩等级 A A、B B、C C、D D、E,E,9090分以上为分以上为A A,80808989分为分为B B,70707979分为分为C C,60606969分为分为D D,6060分以下为分以下为E E。(用用ifif嵌套或嵌套或switchswitch语句语句)、计算分段函数,输入、计算分段函数,输入x,得到,得到y值值计算分段函数。计算分段函数。假假输入输入x xX=1X=1真真X10X10y=3/(x-10)y=3/(x-10)y=2xy=2xy=x+5y=x+5假假真真