第04章 选择结构_第1页
第04章 选择结构_第2页
第04章 选择结构_第3页
第04章 选择结构_第4页
第04章 选择结构_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章 选择结构 1本章要求:本章要求:v 掌握掌握C C语言中的关系运算及逻辑运算语言中的关系运算及逻辑运算;v 掌握选择控制语句掌握选择控制语句ifif语句、语句、switchswitch语句语句以及他们的嵌套应用以及他们的嵌套应用;v 掌握掌握breakbreak语句应用语句应用;第5章 选择结构第5章 选择结构 25.1 关系运算关系运算5.2 逻辑运算逻辑运算5.3 IF语句语句 5.4 SWITCH语句语句 5.5 程序举例程序举例 第第5章章 选择结构选择结构第5章 选择结构 3 例例1 1 给你一个公元年号,如何判断是闰年?给你一个公元年号,如何判断是闰年? 分析:闰年的条件是

2、:分析:闰年的条件是: 能被能被4 4整除,但不能被整除,但不能被100100整除的整除的年份都是闰年;年份都是闰年; 能被能被400400整除的年份是闰年。整除的年份是闰年。 用用yearyear表示一个年份,则有如下的判断条件的表示一个年份,则有如下的判断条件的C C语言表达式:语言表达式:year %4=0 & year % l00!=0 | year % 400=0关系运算与逻辑运算关系运算与逻辑运算第5章 选择结构 4 #include void main()int year; printf(Enter The year=?n); scanf(%d,&year); i

3、f(year%4=0 & year % 100!=0 | year % 400=0) /*如果满足闰年的条件如果满足闰年的条件*/ printf(The year %d is 闰年闰年,year); else /*如果不满足闰年的条件如果不满足闰年的条件*/ printf(The year %d is not 闰年闰年,year);关系运算与逻辑运算关系运算与逻辑运算第5章 选择结构 5 5.1 关系运算符与关系表达式关系运算符与关系表达式 关系运算符及优先级别关系运算符及优先级别 比较两个量的运算符称为关系运算符。比较两个量的运算符称为关系运算符。 在语言中有以在语言中有以下关系运算

4、符下关系运算符。 ,= ,= = , = ,!=!= 关系运算符的优先级:关系运算符的优先级: (1)(1) 、=、 、= 关系运算符关系运算符 赋值运算符赋值运算符 关系运算与逻辑运算关系运算与逻辑运算第5章 选择结构 6关系表达式关系表达式 关系表达式的一般形式为:关系表达式的一般形式为: 表达式表达式 关系运算符关系运算符 表达式表达式 关系表达式的值是关系表达式的值是: : 关系成立为关系成立为“真真”, 不成立则为不成立则为“假假” C C语言中用语言中用 “1 1” 表示表示 “真真” “0 0” 表示表示 “假假” 例如:例如: a+bc-da+bc-d x3/2 x3/2 a

5、a+1c+1c -i-5 -i-5* *j j = = = = k+1 k+1 都是合法的关系表达式。都是合法的关系表达式。关系运算与逻辑运算关系运算与逻辑运算第5章 选择结构 7由于表达式中也可以包含关系表达式。因此出现嵌套的情况,由于表达式中也可以包含关系表达式。因此出现嵌套的情况,例如:当例如:当 a=5, b=4, c=3 时时ac)a!=!=(c= = =b) 又如:又如: (a=3)(b=5)由于由于35不成立,故其值为不成立,故其值为0。 又如:又如: 当当 a=5, b=4 时时 a+=3 & | 而且:而且: &, | 低于关系运算符低于关系运算符 !高于算术

6、运算符!高于算术运算符 ! (非非) (高)(高)算术运算符算术运算符关系运算符关系运算符&和和 |赋值运算符赋值运算符 (低)(低)关系运算与逻辑运算关系运算与逻辑运算第5章 选择结构 9 2 2、逻辑表达式、逻辑表达式 逻辑表达式的一般形式为:逻辑表达式的一般形式为: 表达式表达式 逻辑运算符逻辑运算符 表达式表达式 按照运算符的优先顺序可以得出:按照运算符的优先顺序可以得出: ab & cd (ab) & (cd) !b= =c|da (!b)= =c)|(dc & x+yc) & (x+y)652、 2*pow(4,3)+4*6/3+pow(3,

7、2)3、!(10*20)!=2564、z 比比x,y都大都大5、p是是q的倍数的倍数6、a是小于是小于b的偶数的偶数7、设、设x为一个两位整数,将其个位数和十位数为一个两位整数,将其个位数和十位数交换后所得两位数用表达式表示交换后所得两位数用表达式表示8、用表达式表示随机产生的一个两位整数、用表达式表示随机产生的一个两位整数表达式练习表达式练习01451zx & zyp % q = 0a % 2 = 0 & a0,有两个不等实根。,有两个不等实根。4)b2-4ac=0 x1=(-b+sqrt(d)/2ax2=(-b-sqrt(d)/2a输出输出x1,x2输入输入a,b,cx1=

8、-b/2ax2=sqrt(d)/2a输出输出x1+x2 i,x1-x2 iYNd=b2-4ac第5章 选择结构 16#include void main() float a, b, c, x1, x2, d; printf(Enter number a,b,c=); scanf(%f,%f,%f,&a,&b,&c); if(abs(a)0.00001) /*如果如果a不等于不等于0,思考为什么不写成,思考为什么不写成a! !=0*/ d= b*b- 4*a*c; if (d=0)/* 实根情况实根情况*/ x1=(-b+sqrt(d)/(2*a); x2=(-b-sqr

9、t(d)/(2*a); printf(x1=%f,x2=%fn,x1,x2); else/* 虚根情况虚根情况*/ x1=-b/(2*a); x2=sqrt(abs(d)/(2*a); printf(x1=%f + %fin,x1,x2);/* 输出复数形式的虚根输出复数形式的虚根*/ printf(x2=%f - %fin,x1,x2); else printf(不是一元二次方程不是一元二次方程); 第5章 选择结构 17选择结构选择结构 5.3 if5.3 if条件语句条件语句 if语句有单分支、双分支和多分支等结构语句有单分支、双分支和多分支等结构 1单分支单分支if语句。语句。使用格式

10、:使用格式: if (表达式表达式) 语句语句; 执行过程:如果表达式的执行过程:如果表达式的值为真,则执行其后的语句,值为真,则执行其后的语句, 否则不执行该语句。否则不执行该语句。条件条件语句语句1YN图图4 单分支选择结构执行过程单分支选择结构执行过程第5章 选择结构 18选择结构选择结构 说明:说明: (1 1)表达式:一般为关系表达式、逻辑表达式,也可)表达式:一般为关系表达式、逻辑表达式,也可为算术表达式,其值按非零为为算术表达式,其值按非零为True,零为,零为False进行判断。进行判断。 (2)如果当条件成立要执行多个语句,就要使用)如果当条件成立要执行多个语句,就要使用“

11、”来构成复合语句。来构成复合语句。例:已知两个数例:已知两个数x和和y,比较它们的大小,使得,比较它们的大小,使得x大于大于y。 if (xy) t=x;x=y;y=t; /*t为中间变量为中间变量*/ 第5章 选择结构 19选择结构选择结构 2双分支结构双分支结构ifelse.语句语句 使用格式:使用格式: if (表达式表达式) ; else ;图图5 双分支选择结构执行过程双分支选择结构执行过程 语句的执行过程如图语句的执行过程如图5 5所示,即当表达式的值为非零(条件成立)所示,即当表达式的值为非零(条件成立)时执行时执行,否则执行,否则执行else后面后面。例如:输出例如:输出x,y

12、两个中值较大的一个值。两个中值较大的一个值。if (xy) printf(%d x);else printf(%d y);条件条件语句语句1语句语句2YN第5章 选择结构 20选择结构选择结构 3ifelse if语句(多分支结构)语句(多分支结构)语句形式:语句形式:if (表达式表达式1) 语句语句1;else if (表达式表达式2) 语句语句2; .else if (表达式表达式n) 语句语句n;else 语句块语句块n+1;图图6 多分支多分支if语句执行过程语句执行过程N语句语句1YN条件条件1条件条件2语句语句2Y条件条件3语句语句3YN条件条件n语句语句nY语句语句n+1N第5

13、章 选择结构 21选择结构选择结构 例例4 4 输入一组学生成绩,评定其等级。方法是:输入一组学生成绩,评定其等级。方法是:90100分为分为“A”,8089分为分为“B”,7079分为分为“C”,6069分为分为“D”,60分以下为分以下为“E”。程序段如下:程序段如下:voidvoid main()int x; scanf(%d,&x); if (x=90) printf(A); else if (x=80) printf(B); else if (x=70) printf(C); else if (x=60) printf(D); else printf(E); 第5章 选择结构

14、 22选择结构选择结构 思考:思考:上面的程序段中每个上面的程序段中每个else ifelse if语句中的表达式都作了语句中的表达式都作了简化,例如第一个简化,例如第一个else ifelse if的表达式本应写为的表达式本应写为“x=80 & x=80 & x90 x=80 x=80”,为什么能作这样的简化?如果将上面,为什么能作这样的简化?如果将上面的程序段改写成下面两种形式是否正确?的程序段改写成下面两种形式是否正确?第一种形式:第一种形式:if (x =60) printf(D);else if (x=70)printf(C);else if (x=80) print

15、f(B); else if (x=90)printf(A);elseprintf(E); 第二种形式:第二种形式:if (x 60) printf(E);else if (x70)printf(D); else if (x80) printf(C);else if (x90) printf(B);Else printf(A); 第5章 选择结构 23#include stdio.hvoid main() char c; printf(input a character: ); c=getchar(); if(c=0&c=A&c=a&c=1) if(x5) x+; els

16、e x-; printf(“x=%d”,x); 第5章 选择结构 29选择结构选择结构 5.3.3 5.3.3 条件运算符和条件表达式条件运算符和条件表达式条件运算符为条件运算符为 ? : 它是一个三目运算符。它是一个三目运算符。条件表达式的一般形式为条件表达式的一般形式为: 表达式表达式1? 表达式表达式2 :表达式表达式3 其求值规则为:其求值规则为:如果表达式如果表达式1的值为真,则以表达式的值为真,则以表达式2 的的值作为条件表达式的值,否则以表达式值作为条件表达式的值,否则以表达式3的值作为整个条件表的值作为整个条件表达式的值。达式的值。 条件表达式通常用于赋值语句之中。例如条件语句

17、:条件表达式通常用于赋值语句之中。例如条件语句: if(ab) max=a; else max=b; 可用条件表达式写为可用条件表达式写为 max=(ab)?a:b; 执行该语句的语执行该语句的语义是:如义是:如ab为真,则把为真,则把a 赋予赋予max,否则把,否则把b 赋予赋予max。第5章 选择结构 30选择结构选择结构 使用条件表达式时,还应注意以下几点:使用条件表达式时,还应注意以下几点: 1. 条件运算符的运算优先级条件运算符的运算优先级 低于关系运算符和算术运算符,高于赋值符。因此低于关系运算符和算术运算符,高于赋值符。因此 max=(ab)?a:b可以去掉括号而写为可以去掉括号

18、而写为 max=ab?a:b 2. 条件运算符条件运算符? :是一对运算符,不能分开单独使用。:是一对运算符,不能分开单独使用。 3. 条件运算符的结合方向是自右至左。条件运算符的结合方向是自右至左。例如:例如: ab?a:cd?c:d 应理解为应理解为 ab?a:(cd?c:d) 这也就是条件表达式嵌套的情形,即这也就是条件表达式嵌套的情形,即其中的表达式其中的表达式3又是一个条件表达式。又是一个条件表达式。 第5章 选择结构 31例例6 将输入的大写字母转换成相应的小写字母将输入的大写字母转换成相应的小写字母void main()char ch; scanf(%c,&ch); ch

19、=(ch=A & ch=A & ch=Z) ch=ch+32;等价选择结构选择结构 第5章 选择结构 32选择结构选择结构 5.4 switch5.4 switch语句(开关语句)语句(开关语句) switch语句使用的一般形式为:语句使用的一般形式为:switch(表达式表达式) case 常量表达式常量表达式1: 语句语句1; case 常量表达式常量表达式2: 语句语句2; case 常量表达式常量表达式n: 语句语句n; default : 语句语句n+1; 第5章 选择结构 33选择结构选择结构 语句的执行过程如图语句的执行过程如图7 7:首先计算表达式的值,并逐个与

20、其后的首先计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面等时,即执行其后的语句,然后不再进行判断,继续执行后面所有所有casecase后的语句。如表达式的值与所有后的语句。如表达式的值与所有casecase后的常量表达式后的常量表达式均不相同时,则执行均不相同时,则执行defaultdefault后的语句。后的语句。图图7 switch语句的执行过程语句的执行过程第5章 选择结构 34选择结构选择结构 例例7 将将例例4 使用使用switch 语句来

21、实现的程序如下:语句来实现的程序如下:voidvoid main()int x; printf(Enter x=? ); scanf(%d,&x); switch(x/10) case 10: case 9: printf(A); case 8: printf(B); case 7: printf(C); case 6: printf(D); default:printf(E); 程序运行后,结果如下:程序运行后,结果如下:Enter x=? 75 Enter x=? 75 CDECDE第5章 选择结构 35选择结构选择结构 说明;说明; 在在switch语句中,语句中,“case 常

22、量表达式常量表达式”只相当于一个只相当于一个语句标号,并不是在该处进行条件判断,语句标号,并不是在该处进行条件判断, 表达式的值和某表达式的值和某标号相等则转向该标号执行,但不会在执行完该标号的语标号相等则转向该标号执行,但不会在执行完该标号的语句后自动跳出整个句后自动跳出整个switch 语句,将继续执行所有后面语句,将继续执行所有后面case语语句的情况。句的情况。 为了避免上述情况,为了避免上述情况, 语言还提供了一种语言还提供了一种break语句,语句,专用于跳出专用于跳出switch语句。语句。 break 语句使用形式为:语句使用形式为:break;在每一;在每一case语句之后语

23、句之后增加增加break 语句,语句, 使每一次执行之后均可跳出使每一次执行之后均可跳出switch语句。语句。第5章 选择结构 36选择结构选择结构 switch(表达式表达式) case 常量表达式常量表达式1: 语句语句1; break; case 常量表达式常量表达式2: 语句语句2; break; case 常量表达式常量表达式n: 语句语句n; break; default : 语句语句n+1; 使用使用switch语句的通常形式为:语句的通常形式为:第5章 选择结构 37选择结构选择结构 例例7 程序可修改为程序可修改为void main()void main() int x;

24、int x; printf(Enter x=?); printf(Enter x=?); scanf(%d,&x); scanf(%d,&x); switch(x/10) switch(x/10) case 10: case 10: case 9: printf(A); break; case 9: printf(A); break; case 8: printf(B); break; case 8: printf(B); break; case 7: printf(C); break; case 7: printf(C); break; case 6: printf(D);

25、break; case 6: printf(D); break; default:printf(E); default:printf(E); 第5章 选择结构 38void main() int a; printf(input integer number: ); scanf(%d,&a); switch (a) case 1:printf(Mondayn);break; case 2:printf(Tuesdayn); break; case 3:printf(Wednesdayn);break; case 4:printf(Thursdayn);break; case 5:prin

26、tf(Fridayn);break; case 6:printf(Saturdayn);break; case 7:printf(Sundayn);break; default:printf(errorn); 补充例题:补充例题:输入输入17(分别代表星期一到星期天),输出相(分别代表星期一到星期天),输出相应的内容。应的内容。选择结构选择结构 第5章 选择结构 39 1.在在case后的各常量表达式的值不能相同,否则会后的各常量表达式的值不能相同,否则会出现错误。出现错误。 2.在在case后,允许有多个语句,可以不用后,允许有多个语句,可以不用 括起来。括起来。 3.各各case和和def

27、ault子句的先后顺序可以变动,而不子句的先后顺序可以变动,而不会影响程序执行结果。会影响程序执行结果。 4.default子句可以省略不用。子句可以省略不用。 使用使用switch语句时还应注意以下几点:语句时还应注意以下几点:选择结构选择结构 第5章 选择结构 40 选择结构的嵌套选择结构的嵌套 在在if语句的分支中可以完整地嵌套另一语句的分支中可以完整地嵌套另一if语句或语句或switch语句,语句,同样同样switch语句每一个语句每一个case分支中都可嵌套另一完整的分支中都可嵌套另一完整的if语句或语句或switch语句。下面是两种正确的嵌套形式:语句。下面是两种正确的嵌套形式:选

28、择结构选择结构 第5章 选择结构 41 选择结构的嵌套选择结构的嵌套(1)if (表达式表达式1) if (表达式(表达式2) else else if (表达式表达式3) else (2)if (表达式表达式1) switch (表达式表达式2) case if (表达表(表达表3) else case 第5章 选择结构 42选择结构选择结构 关于选择结构嵌套说明:关于选择结构嵌套说明: 1)嵌套只能在一个分支内嵌套,不出现交叉。)嵌套只能在一个分支内嵌套,不出现交叉。其嵌套的形式将有很多种,嵌套层次也可以任意其嵌套的形式将有很多种,嵌套层次也可以任意多。多。 2)在)在swicth结构中,每一个结构中,每一个case分支可以完整分支可以完整包含另一个包含另一个ifelse结构,也可完整包含另一个结构,也可完整包含另一个swicth结构。结构。 为了便于阅读和维护,建议在写含有多层嵌为了便于阅读和维护,建议在写含有多层嵌套的程序时,使用缩进对齐方式。套的程序时,使用缩进对齐方式。 第5章 选择结构 43选择结构选择结构 例例8 8 输入三个整数,输出最大数输入三个整数,输出最大数 分析:分析:输入输入a,b,c a,b,c 首先比较首先比较a,ba,b的大小,并把大数装

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论