《c语言第5章 选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《c语言第5章 选择结构程序设计.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章选择结构程序设计,章节总览:1、 选择结构是三种基本结构之一。 它的作用是,根据所指定的条件是否满足,决定从给定的两组操作选择其一。,2、 在C语言中选择结构是用if语句实现的。if语句最 常用的形式是: if(关系表达式)语句1 else 语句2,1、关系运算符和关系表达式,2、逻辑运算符和逻辑表达式,3、if 语句,4、 switch 语句,5、 分支程序举例,主要内容:,关系运算符及其优先次序(1),例如: a3是一个关系表达式,大于号( )是一个关系运算符。,总领:关系运算是逻辑运算中比较简单的一种。所谓“关系运算”实际上是“比较运算”。将两个值进行比较,判断其比较的结果是否符合
2、给定的条件。,如果a的值为5,则满足给定的“a3”条件,因此关系表达式的值为“真” ,在C语言中用1表示真。,如果a的值为2,则不满足给定的“a3”条件,因此关系表达式的值为“假” ,在C语言中用0表示假。,关系运算符及其优先次序(2),C语言的6种关系运算符: (大于) = (大于或等于) = = (等于) ! = (不等于),优先级相同(高),优先级相同(低),关系运算符及其优先次序(3),关于优先次序说明:(1)前四种关系运算符(, =)的优先级别相 同,后两种也相 同(!=,=)。前 4 种高于后 2 种。(2)关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。
3、 (提示:以上关系见下教材88页图5.1),算术运算符关系运算符赋值运算符,(高),(低),优先级比较:,关系表达式 等效于 结果,ca+b,c(a+b),ab!=c,(ab)!=c,a=bc,a=(bc,a=(bc),c的值是否大于a+b的值,(ab)的值是否不等于c,a的值是否等于(bc)的值,举例说明(1):,假如: int a,b,c; a=b=4; c=1;,0,1,0,1,1. 定义:用关系运算符将两个表达式(可以是算术表达式、逻辑表达式、赋值表达式、字符表达式) 连接起来的式子,称关系表达式。关系表达式的值:逻辑值,即“真”或“假”。C语言以非0 代表“真”(一般为1),以0代表
4、“假”。,关系表达式,例如: a=3,b=2,c=1; 则:关系表达式“ab”的值(2) 关系表达式“(ab)=c”值(3) 关系表达式“b+cb f=abc,为真,表达式的值为1。,为真,表达式的值为1。,为假,表达式的值为0。,d的值为1。,f的值为0。,举例说明(2):,C提供三种逻辑运算符: & 逻辑与(相当于其他语言中的AND) | 逻辑或(相当于其他语言中的OR) ! 逻辑非(相当于其他语言中的NOT),逻辑运算符,说明:(1)“&”和“|”是双目(元)运算符,它要求有两个运算量 (操作数)。(2)“!”是一目(元)运算符。,真 值 表(1),真 值 表(2),优先次序:(1)!(
5、非)&(与)|(或),即“!”为三者中 最高的。(2)逻辑运算符中的“&”和“|”低于关系运算符,“!” 高于算术运算符。,逻辑运算符优先次序,!(非)算术运算符关系运算符&和|赋值运算符,(高),(低),逻辑表达式,1. 定义:用逻辑运算符将关系表达式或者逻辑表达式连接起来的式子,称逻辑表达式。逻辑表达式的值:逻辑值,即“真”或“假”。C语言以非0 代表“真” ,以0代表“假”。,例如: (ab)&(xy)是一个逻辑表达式,逻辑与( & )是一个逻辑运算符。,如果ab并且xy ,则逻辑表达式的值为“真” ,在C语言中用非0表示真。,举例说明(3):,逻辑表达式 等效于 结果,(ab)&(xy
6、),可写成ab&xy,(a= =b)|(x= =y),可写成a= =b|x=y,(!a)|(ab),可写成!a|ab,!a&b|xy&c,(!a)&b)|(xy)&c),假如: int a,b,x,y,c; a=b=4; x=y=c=1; (程序fan5_2.c),0,1,0,0,注意:(1) C语言编译系统在给出逻辑运算结果时,以数值1代 表“真”,以0代表“假”。,关于逻辑运算符和逻辑表达式的几点说明(1),(2) 判断一个量是否为“真”时,以0代表“假”,以非0代 表“真”。即将一个非零的数值认作为“真”。,(1)若a=8, (2)若a=5,b=9, (3)a、b值同前,a|b, (4)
7、 a、b值同前,!a&b, (5)4&0|2,举例说明(4):,则!a的值为0。因为a的值为非0,被认作“真”,对它进行“非”运算,就是 “假”,“假”以0代表。,则a&b的值为1。因为a和b均为非0,被认为是“真”,因此a&b的值也为“真”,值为1。,a|b的值为1。,!a&b的值为0。,的值为1。,(3)在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算对象,哪些作为逻辑运算对象。,关于逻辑运算符和逻辑表达式 的几点说明(2),例如: 53&2|83”(关系运算符优先于&),“”两侧的5和3作为数值 “53”的值为1。,进行“1&2”的运算,此时1和2都是逻辑运算对象,都
8、作真处 理,结果为1。,进行“1|84-!0”的运算,根据优先级,线进行“!0”运算得1。,运算表达式“1|84-1”,即“1|83”,“”两侧的8和3作为数值参 加运算,“8b)由于“ab”的值为0,因此m=0,而“n=cd”不被执行,因此n的值不是0而仍保持原值1。,小结:,例如:判别某一年是否是闰年。闰年的条件是:1)能被4整除,但不能被100整除。 2)能被4整除,又能被400整除。,示例运用(1), 判断是闰年用表达式:(year%4=0&year%100! =0)|year%400=0上面的表达式为真,则year为闰年;否则为非闰年。, 用!判断非闰年:!(year%4=0&yea
9、r%100! =0)|(year%400=0)上表达式值为真,year为非闰年。, 还可以用下面表达式判别非闰年:(year%4!=0)|(year%100=0&year%400!=0)表达式值为真,year为非闰年。,写出符合下列条件的表达式。 1.大于2并且小于10的数(int a)。,课堂练习(2),a2&ay) printf(“%d”,x);先对表达式求解,若表达式的值为非0,按“真”处理,执行指定语句。若表达式的值为0,按“假”处理,,例如: if(xy) printf(“%d”,x); else printf(“%d”,y);,形式二:if(表达式)语句1 else 语句2,例如:
10、 if (number500) cost=0.15; else if (number300) cost=0.10; else if (number100) cost=0.075; else if (number50) cost=0.05; else cost=0;,形式三:,(1)三种形式的if语句中在后面都有“表达式”,一般为逻辑表达式或关系表达式。,if三种形式的说明:,(2)第二、第三种形式的 if 语句中,在每个else 前面有一分号,整个语句结束处有一分号。,(3)在if和else后面可以只含一个内嵌的操作语 句,也可以有多个操作语句,此时用花括号 “ ”将几个语句括起来成为一个复合
11、语句。,例如: /*行号1*/ if(a+ba,注意:第6行的花括号“”外面不需要再加分号。因为内是一个完整 的复合语句,不需另附加分号。,示例说明,源程序: main() float a,b,t; scanf(“%f,%f”, ,一、(见教材例5.1)题目:输入两个实数,按代数值由小到大的次序输出这两个数,程序举例(1),算法分析:1、输入两个实数,分别赋给 两个实型变量a,b,2、两个数的比较 2.1如果ab 则进行交换if(ab) t=a;a=b;b=t; 2.2如果a不大于b,则不能交换,3、输出a,b,需要定义三个实型变量a,b,t;,算法如下:(1)if ab 将a和b对换 (a是
12、a,b中的小者),二、(见教材例5.2)题目:输入3个数a,b,c,要求按由小到大的顺序输出,程序举例(2),源程序:main() float a,b,c,t;scanf(“%f ,%f,%f”,(2)if ac 将a和c对换 (a是a,c中的小者,因此a是三者中最小者),(3)if bc 将b和c对换 (b是b,c中的小者,也是三者中次小者),(4)顺序输出a,b,c,一般形式:表达式1?表达式2:表达式,条件运算符,条件运算符要求有三个操作对象,它是C语言中唯一的一个三目运算符。,例如: max=(ab) ? a : b;,相当于: if(ab) max= a; else max=b;,说
13、明:(1)条件运算符的执行顺序:先求解表达式1,,条件运算符说明(1),若为非0(真)则求解表达式2,此时表达式2 的值就 作为整个条件表达式的值。,若为0(假)则求解表达式3,表达式3 的值就是整个条 件表达式的值。,例如: max=(ab) ? a : b;,如果a=3,b=4;,max = 4;,如果a=6,b=4;,max = 6;,条件运算符说明(2),(2)条件运算符优先于赋值运算符。比关系运算符和算术运算符都低。,(3)条件运算符的结合方向为“自右至左”。,例一:max=(ab) ? a : b;,max= ab ? a : b;,例二:max=ab? a : b+1;,max=
14、 ab ? a : (b+1);,例三:max= ab ? a : c d ? c:d ;,max= ab ? a : (c d ? c:d);,假设 a=1,b=2,c=3,d=4,条件运算符说明(3),(4)条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为赋值语句(且两个分支都给同一 个变量赋值)时才能代替if 语句。,例如: if (ab) printf(“%d”,a); else printf(“%d”,b);,可以用以下的语句代替 printf(“%d”,ab?a:b);,(5)条件表达式中,表达式1的类型可以与表达式3的类型不同,也可以相同。,例如:int x; x
15、? a : b;,例如:xy ? 1 :1.5 ;,条件运算符运用,例5.4 输入一个字符,判别它是否大写字母,如果是,则将它转换成小写字母;如果不是,则不转换。然后输出最后得到的字符。,main()char ch;scanf( “ %c “ , ,if语句的嵌套 (1),定义:在 if 语句中又包含一个或多个if 语句称为if 语句的嵌套。,一般形式:,if( )else,内嵌if,内嵌if,if( )语句1else语句2,if( )语句3 else语句4,if语句的嵌套 (2),注意: if 语句与else 的配对关系。 else 总是与它上面最近的一个if 配对。假如写成:,if( )
16、if( )语句1 elseif( )语句2 else 语句3,内嵌if,算法如下:算法一:(1)输入x,程序举例(1),(2)若x0 y=1,(5)输出y,main( ) float x ; int y ;scanf(“ %f ” , ,(2),算法二: 输入 x 若x0 y=1 输出 y,算法三: 输入 x 若x=0) if(x0) y=1; else y=0;else y=-1;,程序3:将上if语句改为: y=-1;if(x!=0)if(x0) y=1;else y=0;,程序4:将上if语句改为: y=0;if(x=0)if(x0) y=1;else y=-1;,下面几个程序哪个是正确
17、的,例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”,Compile Error!,程序举例,#include main() int x,y; printf(Enter an integer:); scanf(%d,例 求一个数的绝对值,运行:Enter an integer:-12 integer:-12-absolute value :12,#include main() int a,b; printf(Enter integer a:); scanf(%d,例 输入两个数并判断两数相等否,运行:Enter integer a:12 Enter integer b:12 a=b,运行:Enter integer a:12 Enter integer b:9 a!=b,例 输入两数并判断其大小关系,#include main() int x,y; printf(Enter integer x,y:); scanf(%d,%d,运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y,
限制150内