C语言程序设计-第4章.ppt
C语言程序设计,课件制作:贵州新科电脑培训中心,全国计算机等级考试 二级教程,第四章 选择结构,通常:计算机程序是按顺序结构执行的。然而,在许多情况下,程序执行时需要依赖于用户输入的数据或表达式的值。为了处理计算机所遇到的各种不同情况,c语言提供了可以进行逻辑判断的选择语句,由选择语句构成的选择结构,将根据逻辑判断的结果决定程序的不同流程。,本章要点,1、关系运算和逻辑运算-逻辑值-关系运算符和关系表达式-逻辑运算符和逻辑表达式2、If语句和用if语句构成的选择结构-if语句-嵌套的if语句3、条件表达式构成的选择结构4、switch语句和用switch语句和break语句构成的选择结构-switch语句的执行过程-在switch语句体中使用break语句-语句标号和goto语句,4-1 关系运算和逻辑运算,逻辑值:“真”和“假”(用“1”和“0”来表示)判断一个条件是否成立,成立则返回值为“真”,不成立则返回结果为“假”,关系运算(比较运算):将两个数进行比较,判断比较的结果是否符合指定的条件关系运算符,关系运算符,几种运算符之间优先级别从高到低依次是:逻辑非,算术运算、关系运算、逻辑与、逻辑或、赋值运算,关系表达式,由关系运算符和运算对象组成运算对象是任意合法的表达式关系表达式的值为逻辑值 一般形式为:(表达式)关系运算符(表达式)注意:1、不能将赋值号“=”用作关系运算符“=”2、尽量避免使用浮点数进行“=”或“!=”的比较,原因:整型转换成实型 实型在内存中有误差,逻辑运算符,几种运算符之间优先级别从高到低依次是:逻辑非,算术运算、关系运算、逻辑与、逻辑或、赋值运算,知识点,举例,逻辑表达式,由逻辑运算符和运算对象组成运算对象是任意合法的表达式 一般形式为:表达式 逻辑运算符号 表达式,注意:1、逻辑运算符两侧表达式的值是逻辑值而非算术值 2、逻辑表达式可以嵌套 3、在特定条件下会产生“短路”现象,运算法则:,例,例,用关系表达式和逻辑表达式描述复杂的关系,例1:能被7或11整除,但不能同时被7或11整除的表达式怎么写?例2:表示水仙花数的表达式怎么写?(假如我们用X来表示该数)说明:水仙花数是指这样的一个数:它的个位数的立方加上十位数的立方加百位数的立方之和,恰好等于这个数本身。比如:153=13+53+33例2:判别某一年是否为闰年。判断闰年的条件为下面的两者之一:(1)能被4整除但不能被100整除;(2)能被400整除。假设我们用一个变量y来表示该年份,则表达式该如何书写?,4-2 if语句和用if语句构成的选择结构,If 语句不含else子句的if语句含else子句的if语句,不含else子句的if语句,语句形式:if(表达式)语句;例如:if(ab)t=a;a=b;b=t;说明:if是关键字 表达式是实现逻辑判断的条件 圆括号不能少 圆括号后不能加“;”可用将多条语句组成“一条语句”实例4.1:解释执行过程,含else子句的语句,一般形式:If(表达式)语句1;else 语句2;说明:-if和else是关键字-“语句1”称为if子句-“语句2”称为else子句-else必须和if配合使用实例4.3 解释执行过程,If语句说明:,1、表达式为任意合法的c语言表达式2、无论是否有else子句,if子句的“;”都不能省略,嵌套的if语句:,If和else子句中又包含了if和else子句可以嵌套在if子句中,也可以嵌套在else子句中 分类:1、在if子句中嵌套具有else子句的if语句,语句形式:If(表达式1)if(表达式2)语句1;else 语句2;else 语句3;,嵌套的if语句:,2、在if语句中嵌套不含else子句的if语句,语句形式:if(表达式1)if(表达式2)语句1;else 语句2;,3、在else子句中嵌套if语句,嵌套的if语句:,If(表达式1)语句1;else if(表达式2)语句2;else 语句3;,If(表达式1)语句1;else if(表达式2)语句2;else 语句3;,a.嵌套if子句带有else,第一种写法:,第二种写法:,b:嵌套if语句不带else,If(表达式1)语句1;else if(表达式2)语句2;,If(表达式1)语句1;else if(表达式2)语句2;,第一种写法:,第二种写法:,建议:通过比较a和b两种形式可以看出,内嵌在else子句中的if语句无论是否有else子句,在语法上都不会引起误会。因此,我们在书写内嵌的if语句时,尽量把内嵌的if语句嵌在else子句中。,阶梯型的嵌套if语句:不断在else子句中嵌套if语句,第一种写法:If(表达式1)语句1;elseif(表达式)语句2;else if(表达式)语句3;else if(表达式4)语句4;.else 语句n,第二种写法:If(表达式1)语句1;else if(表达式)语句2;else if(表达式3)语句3;else if(表达式4)语句4;.else 语句n,执行过程:从上到下逐一检测执行,遇到为“真”的表达式n,则执行该表达式后的语句n;如果所有的表达式都为“假”,则执行最后的else子句;如果语句最后的else语句不存在,则不执行任何操作。,条件表达式构成的选择结构,条件运算符:由“?”和“:”组成(唯一的三目运算符)优先级别:优于赋值运算,但低于逻辑运算、关系运算和算术运算条件表达式的形式:(表达式)?(表达式2):(表达式3)例:y=x10?100:200 假设x,则y=200;,4.4 switch语句以及用switch语句和break 语句构成的选择结构,实际问题中,常常遇到多路选择的选择结构程序虽然使用else if语句可以实现,但不够直观使用c语言提供的switch语句会更容易理解、更方便,switch语句,语句形式:,switch(表达式)case 常量表达式:语句1;case 常量表达式:语句2;case 常量表达式n:语句n;default:语句n+1;,说明:1、switch、case、default是关键字,中的内容为语句体。2、表达式可以是整型表达式、字符型表达式及枚举型表达式。3、case和其后的常量表达式合称case语句标号4、default代表所有case标号之外的那些标号。5、case语句后的语句可以由若干条语句组成。6、在case和常量之间一定得有空格,Switch语句的执行过程,首先计算switch后表达式的值在case语句中寻找与该值吻合的标号并执行该标号后的语句如果没有与该表达式值相等的标号,则执行default标号后的语句如果不存在default标号,则跳过语句体,什么也不做例.6,在switch语句中使用break语句,break:间断语句用于终止switch语句体的执行过程必须和switch联合使用一般形式:case 常量表达式:语句;break;,例:.6,语句标号和goto语句,语句标号:goto语句的转向目标合法的标识符(用户标识符)可以和变量同名可以加在任何语句之前 例:stop:printf(“Endn”);,Goto语句:无条件转向语句,语句形式:goto 语句标号;说明:语句标号必须和goto语句在同一个函数内 尽量不用(原因:滥用goto语句将使程序的流程毫无规律,可读性变差),本章完。祝大家学有所成!谢谢。,