C语言第4章选择结构程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

教学内容:4.1关系运算符和关系表达式4.2逻辑运算符和逻辑表达式4.3if语句4.4switch语句4.5选择结构程序设计实例教学要求:1.掌握if语句的语法和使用方法。2.掌握switch语句的语法和使用方法。3.掌握分支语句的嵌套使用方法。第4章选择结构程序设计例如,某一单位要给职工增加工资,它的规定是:工资低于1000元的职工,每人增加工资100元,超过1000元的职工暂不增加工资。①选择条件:工资低于1000元吗?②数据处理:是增加工资100元,否则不增加工资。如果,增加工资的规定是:工资低于1000元的职工,每人增加工资200元,超过1000元的职工增加工资100元。①选择条件:工资低于1000元吗?②数据处理:是增加工资200元,否则增加工资100元。在C语言中,当需要根据选择条件来确定所要做(执行)哪一项数据处理的情况,这样的程序结构,被称为选择(分支)结构。在C语言中,设计选择(分支)结构程序要解决的问题:一、如何表示选择条件:在C语言中表示选择条件,一般用:关系表达式、逻辑表达式二、实现选择结构用什么语句:C语言中实现选择结构所用语句:if语句switch语句4.1关系运算1.关系运算符及其优先次序(1)关系运算符(6种关系运算符)(小于)=(小于或于)(大于)=(大于或等于)==(等于)!=(不等于)注意:在C语言中,“等于”关系运算符是双等号“==”,而不是单等号“=”(赋值运算符)。例如:a=18该表达式是赋值表达式a==18该表达式是关系表达式(变量a是否等于18)(2)关系运算符优先级与结合方向在关系运算符中:==4个优先级相同;==!=2个也相同,且前4个高于后2个。结合方向是“自左至右”。(3)关系运算符与其它运算符关系运算符的优先级低于算术运算符;关系运算符的优先级高于赋值运算符。3种运算符优先级从高到低为:算术运算符⇒关系运算符⇒赋值运算符2.关系表达式(1)关系表达式关系表达式:用关系运算符将两个或两个以上的表达式连接起来的式子,叫关系表达式。例如,下面的关系表达式都是合法的:ab,a+bc-d,(a=3)=(b=5),'a'='b',(ab)==(bc)(2)关系表达式的值C语言中没有逻辑型数据。在C语言中:当关系表达式表示的含意为“逻辑真”,其值为1;当关系表达式表示的含意为“逻辑假”,其值为0。例如,假设n1=3,n2=4,n3=5,则:n1n2表达式的值:0。(n1n2)!=n3表达式的值:1。n1n2n3表达式的值:1。再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。(3)关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。(n1n2)+n3表达式的值:6因为n1n2的值=1,1+5=6。4.2逻辑运算1、C语言提供三种逻辑运算符:(1)逻辑与&&运算规则:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。(相当于“同时”)(2)逻辑或¦¦运算规则:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。(相当于“或者”)(3)逻辑非!运算规则:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。(相当于“否定”)2.逻辑运算符的运算优先级逻辑非的优先级最高,逻辑与次之,逻辑或最低:!(非)→&&(与)→¦¦(或)与其它种类运算符的优先关系!→算术运算→关系运算→&&→¦¦→赋值运算3.运算符结合方向结合方向是“自左至右”4.逻辑表达式逻辑表达式:用逻辑运算符将1个或多个表达式连接起来的式子,叫逻辑表达式。在C语言中,用逻辑表达式表示多个条件的组合。5.逻辑量的真假判定──0和非0C语言中,在判断一个数据的“真”或“假”时,以0和非0为根据:如果数据为0,则判定为“逻辑假”;如果数据为非0,则判定为“逻辑真”。例如,intn=12;intx=5;!n表达式的值:0!(n==10)表达式的值:1n=1&&n=31表达式的值:1(x=0)&&(x3)表达式的值:0n¦¦n31表达式的值:1(x-1)¦¦(x5)表达式的值:06.说明(1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何类型的数据,如实型、字符型等。例如:floata,b;a=25.28;b=52.78;!a表达式的值:0!(‘A’)表达式的值:0a11.564&&b=157.8表达式的值:1(‘y’)&&(‘x’)表达式的值:1a¦¦a31表达式的值:1(b-19.9)¦¦(b5)表达式的值:1(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式,即并不是所有的表达式都被求解。例如:设n1=6,n2=9,x=2,y=2求解表达式(x=n1n2)&&(y=n2n1)后,x的值为:0,y的值不变,仍等于2求解表达式(x=n1n2)¦¦(y=n2n1)后,x的值为:0,y的值为:1例复杂表达式的计算顺序#includestdio.hmain(){inta=10,b=15,c=14,temp;temp=a+6b&&b-cc;printf(a+6b&&b-cc=%d\n,temp);temp=!a+b*c-b/a&&b-a*!(c-a);printf(!a+b*c-b/a&&b-a*!(c-a)=%d\n,temp);}分支选择结构是用if语句来实现的,if语句用来判定所给定的条件是否满足,根据判定的结果进而执行不同的程序段。C语言提供了下面三种形式的条件语句。1.第一种形式(1)语句格式:if(表达式)语句语句中的表达式必须用单括号“(”和“)”括起来。表达式后面语句也可使用复合语句。(2)语句功能:如果表达式的值为真(T),则执行其后的语句,否则不执行该语句。4.3if语句2.第二种形式(1)语句格式:if(表达式)语句1;else语句2;说明:else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用(2)语句功能:如果表达式的值为真(T),则执行语句1,否则执行语句2。。例4.1某一单位要给职工增加工资,它的规定是:工资低于1000元的职工,每人增加工资100元,超过1000元的职工暂不增加工资。例4.1某一单位要给职工增加工资,它的规定是:工资低于1000元的职工,每人增加工资100元,超过1000元的职工暂不增加工资。voidmain(){intgz;printf(“\ninputgz:);scanf(%d,&gz);if(gz1000)gz+=100;printf(“gz=%d\n,gz);}例4.2某一单位要给职工增加工资,它的规定是:工资低于1000元的职工,每人增加工资200元,超过1000元每人增加工资100元。例4.2某一单位要给职工增加工资,它的规定是:工资低于1000元的职工,每人增加工资200元,超过1000元每人增加工资100元。voidmain(){intgz;printf(“\ninputgz:);scanf(%d,&gz);if(gz1000)gz+=200;elsegz+=100;printf(“gz=%d\n,gz);}3.第三种形式(1)语句格式if(表达式1){语句组1}elseif(表达式2){语句组2}elseif(表达式3){语句组3}elseif(表达式4){语句组4}else{语句组5}若语句组5又是一条if语句,整个语句最少是一个6个分支的多分支if语句。(2)多分支if语句的执行过程①当“表达式1”的值为真(T)时,则执行语句组1,然后转向下一条语句;②否则,当“表达式2”的值为真(T)时,执行语句组2,转向下一条语句;③再否则,当“表达式3”的值为真(T)时,执行语句组3,转向下一条语句;④再否则,当“表达式4”的值为真(T)时,执行语句组4,转向下一条语句;⑤再否则,执行语句组5,转向下一条语句;例4.3输入+*-/,输出对应的单词。例4.3输入+*-/,输出对应的单词。#includestdio.hmain(){charch;ch=getchar();if(ch=='+')printf(plus\n);elseif(ch=='-')printf(minus\n);elseif(ch=='*')printf(multiply\n);elseif(ch=='/')printf(divide\n);elseprintf(error\n);}4.if语句说明(1)在三种形式的if语句中,条件表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。(2)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。5.if语句与条件运算符如果在条件语句中,只执行单个的赋值语句时,常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。例4.4输入任意二个整数,求二个数中的最大值。例4.4输入任意二个整数,求二个数中的最大值。例4.4输入任意二个整数,求二个数中的最大值。main(){intn1,n2,max;scanf(%d,%d,&n1,&n2);max=n1n2?n1:n2;printf(max=%d\n,max);}IF(n1n2)max=n1;elsemax=n2;6.if语句的嵌套与嵌套匹配原则(1)if语句嵌套,是指,在“语句1”或(和)“语句2”中,又包含有if语句的情况。if语句嵌套时,else子句与在它上面、距它最近、且尚未匹配的if配对。例如:if(ab)s=s+t;elseif(a==b)t=5;/*语句2是if语句*/elset=2*s;例4.5输入任意三个整数,求三个数中的最大值。例4.5输入任意三个整数,求三个数中的最大值。main(){intn1,n2,n3,max;scanf(%d,%d,%d,&n1,&n2,&n3);if(n1n2)if(n1n3)max=n1;elsemax=n3;elseif(n2n3)max=n2;elsemax=n3;printf(max=%d\n,max);}例4.5输入任意三个整数,求三个数中的最大值。main(){intn1,n2,n3,max;scanf(%d,%d,%d,&n1,&n2,&n3);if(n1n2)max=n1n3?n1:n3;elsemax=n2n3?n2:n3;printf(max=%d\n,max);}1.switch语句的一般形式switch(表达式){case常量表达式1:语句组1case常量表达式2:语句组2......case常量表达式n:语句组n[default:语句组n+1]}“表达式”可以是int、char和枚举型中的一种,每个case后面“常量表达式”的值,必须各不相同,多个case子句,可共用同一语句(组)。4.4switch语句2.执行过程(1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句组;(2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default后面的语句,然后,再执行switch语句的下一条。case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断;3.switch语句使用说明(1)在case后的各常量表达式的值不能相同,否则会出现错误。(2)在case后,允许有多个语句,可以不用{}括起来。(3)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。(4)default子句可以省略不用。(5)多个case子句,可共用同一语句(组)。4.switch语句中break语句使用switch(表达式){case常量表达式1:语句组1;break;c

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功