• 143.00 KB
  • 2022-04-29 14:45:14 发布

C语言学习课件PPT第04章.ppt

  • 21页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'第4章选择结构程序设计目前我们已经讲了顺序结构程序设计:记住顺序结构是任何程序都存在的.(因为一个程序总要从开始到结束)。今天要讲的选择结构只是某些程序中的一个步骤。要设计选择结构程序,要考虑两个方面的问题:一、是在C语言中如何来表示选择的条件;二、是在C语言中实现选择结构用什么语句。在C语言中表示条件,一般用关系表达式或逻辑表达式,实现选择结构用if语句或switch语句。面对上述两个问题我们今天要讲的主要内容如下:4.1关系运算及其表达式4.2逻辑运算及其表达式4.3if语句4.4switch语句 4.1关系运算及其表达式所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。4.1.1关系运算符及其优先次序1.关系运算符C语言提供6种关系运算符:<(小于),<=(小于或等于),>(大于),>=(大于或等于),==(等于),!=(不等于)注意:在C语言中,“等于”关系运算符是双等号“==”,而不是单等号“=”(赋值运算符)。 注:由于C语言没有逻辑型数据,所以用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。关系表达式的值是逻辑值。2.优先级(1)在关系运算符中,前4个优先级相同(<、<=、>、>=),后2个也相同(==、!=),且前4个高于后2个。(2)与其它种类运算符的优先级关系关系运算符的优先级,低于算术运算符,但高于赋值运算符。例如,下面的关系表达式都是合法的:a>b,a+b>c-d,(a=3)<=(b=5),"a">="b",(a>b)==(b>c)4.1.2关系表达式1.关系表达式的概念所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。 再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。例如,假设num1=3,num2=4,num3=5,则:(1)num1>num2的值=0(2)(num1>num2)!=num3的值=1(3)num1=0”。如果需要描述“x>=0”、同时“x<10”,该这么办呢?!逻辑非(相当于“否定”)这就要借助于逻辑表达式了。4.2.1逻辑运算及其优先次序1.逻辑运算符及其运算规则(1)C语言提供三种逻辑运算符:&&逻辑与(相当于“同时”)||逻辑或(相当于“或者”) 例如,假定x=5,则(x>=0)&&(x<10)的值为“真”,(x<-1)||(x>5)的值为“假”,!x的值为“假”。(2)运算规则1)&&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。2)||:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。3)!:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。 例如,下面的表达式都是逻辑表达式:(x>=0)&&(x<=10)、(x<1)||(x>5)、!(x==0)、a+b>c&&b==c2.逻辑运算符的运算优先级(1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)→&&(与)→||(或)(2)与其它种类运算符的优先关系!→算术运算→关系运算→&&→||→赋值运算4.2.2逻辑表达式1.逻辑表达式的概念所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。。?上述表达式中也用到了关系运算符why不叫关系表达式呢?对于一个表达式它最后一步进行的是什么运算就叫什么表达式。 2.逻辑量的真假判定──0和非0C语言用整数“1”表示“逻辑真”、用“0”表示“逻辑假”。但在判断一个数据的“真”或“假”时,却以0和非0为根据:如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。逻辑表达式的值也是一个逻辑值(非“真”即“假”)。例如,假设num=12,则:!num的值=0,num>=1&&num<=31的值=1,num||num>31的值=1。3.说明:逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何类型的数据,如实型、字符型等。如:‘a’&&3.5的值=1; (2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说:1)对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。2)对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。[Return]例如,假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1,则求解表达式“(x=n1>n2)&&(y=n3>n4)”后,x的值变为0,而y的值不变,仍等于1。 4.3if语句4.3.1if语句的一般格式:if(表达式){语句组1;}[else{语句组2;}]注意:(1)if语句中的“表达式”必须用“(”和“)”括起来。(2)else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。(3)当if和else下面的语句组,仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号)。 4.3.2if语句的执行过程(1)缺省else子句时(即:if(表达式)语句;)[程序演示]该语句的功能是:首先计算表达式的值然后判断其值是否为非零(真),若为非零(真),则执行语句组。否则直接转向执行下一条。其执行过程如右图所示。表达式真语句假Forexample4.1:输入一个数,若x为大于10的数,则y=x+10,并输出y的值。源程序清单如下:#includemain(){intx,y;printf(“ninputaintegertox:”);scanf(“%d”,&x);if(x>10){y=x+10;Printf(“x=%d,y=%d”,x,y);}} (2)指定else子句时(即:if(表达式)语句1;else语句2;)该语句的功能是:当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句1,否则,执行语句2。其执行过程如右图所示。表达式真语句1假语句2Forexample4.2:判断一个数是奇数还是偶数,并把结果显示出来。程序清单如下:#include“stdio.h”main(){intx;printf(“npleaseinputaintegertox:”);scanf(“%d”,&x);if(x%2==0)printf(“n%disaevennumber!”,x);elseprintf(“n%disaoddnumber!”,x);}[程序演示] 4.3.3.if语句的嵌套与嵌套匹配原则.1、在if语句中又完全包含了一个或多个if语句称为if语句的嵌套。2、if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对其一般形式(1)如下:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;elseif(表达式n)语句n;else语句n+1;该语句执行的过程如右图表达式1表达式2表达式3表达式n语句1语句3语句n语句n+1语句2真真真真假假假假 Forexample4.3:某年高考分数规定。600分以上入取第一本,550分以上录取第二本,500分以上录取第三本,450分以上录取专科,否则不能录取。输入高考成绩,要求输出应入什么大学。#include"stdio.h"main(){intscore;printf("npleaseinputyourscore:");scanf("%d",&score);if(score>=600)printf("nbestyoucanenteruniversity");elseif(score>=550)printf("nbetteryoucanentercollege");elseif(score>=500)printf("ngoodyoucanenterthirdcollege");elseif(score>=450)printf("nyouyoucanentertechnologicalacademy");elseprintf("nsorryyoucann’tenter");}[程序演示] 其一般形式(2)如下:if(表达式1)if(表达式2)if(表达式3)else语句3;else语句2;else语句1;该语句执行的过程如右图表达式2表达式3表达式n语句3语句n语句n+1语句2真真真假假假假表达式1语句1真 4.说明(1)因在C语言中规定,else总是与它上面最近且又没有配对的if语句进行配对。如:If(表达式1)if(表达式2)语句1;else语句2;上面语句中的else是与第2个if配对的,如果要改变这种默认的配对关系,可以在相应if条件选择语句上加上左、右花括号来确定新的配对关系如:If(表达式1){if(表达式2)语句1;}else语句2;上述语句中的花括号改变了if与else的默认配对关系,使得else与第一个if配对。 4.4switch语句1.switch语句的一般形式:switch(表达式){case常量表达式1:语句组1;break;case常量表达式2:语句组2;break;......case常量表达式n:语句组n;break;default:语句组n+1;break;}前面介绍的if语句,常用于两情况的选择结构,要表示两种以上条件的选择结构,则要用if语句的嵌套形式,但如果嵌套的if语句比较多时,程序可读性就差。因此,C语言提供了switch语句来直接实现多种情况的选择结构。 Switch(表达式)常量表达式1常量表达式n常量表达式2常量表达式n+1语句1语句2语句n语句n+1breakbreakbreakbreakSwitch语句的下一语句2.执行过程如下图 Forexample4.4:某幼儿园只收2至6岁的小孩。2~3岁入小班,4岁入中班,5~6岁入大班。输入年龄,要求输出应入什么班。程序清单如下:#include“stdio.h”Main(){intage;Printf(“ninputaage:”);Scanf(“%d”,&age);Switch(age){case2:case3:printf(“nEnterLowerclass!”);break;case4:printf(“nEnterMiddleclass!”);break;case5:case6:printf(“nEnterHigherclass!”);break;default:printf(“nCan’tenter!!”);}}[程序演示] 3.说明(1)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。(2)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。[程序演示]思考题:如果去掉[案例4.4程序中的所有break语句,且输入的年龄为2,输出会如何? (3)各case及default子句的先后次序,不影响程序执行结果。(4)多个case子句,可共用同一语句(组)。例如,在[案例4.4]中的“case3:”和“case2:”共用语句“printf(“nEnterLowerclass");break;”,“case6:”与“case5:”共用语句“printf(“nEnterHigherclass");break;”。(5)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。(课后去实现)。[Return]'