C语言第04章 选择结构程序设计_第1页
C语言第04章 选择结构程序设计_第2页
C语言第04章 选择结构程序设计_第3页
C语言第04章 选择结构程序设计_第4页
C语言第04章 选择结构程序设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第4章章 选择结构程序设计选择结构程序设计2本章内容4.1 关系运算符和关系表达式关系运算符和关系表达式4.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式4.3 if语句语句4.4 switch语句语句4.5 程序举例程序举例34.1 关系运算符关系运算符和关系表达式关系表达式 关系运算实际上是比较运算,两个值进行比较,判断比较的结果是否符合给定的条件,如果符合比较的结果为真真,否则结果为假假。 用 将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子叫 。 关系运算符与其它运算符的 。关系运算符关系表达式优先次序44.2 逻辑运算符逻辑运算符和

2、逻辑表达式逻辑表达式 用用 将关系表达式或逻辑量连接将关系表达式或逻辑量连接起来就是起来就是 。 逻辑运算符与其它运算符的逻辑运算符与其它运算符的 。 在逻辑表达式的求解中在逻辑表达式的求解中,并不是所有的逻并不是所有的逻辑运算都被执行辑运算都被执行. 逻辑运算规律逻辑运算规律:优先次序逻辑运算符逻辑表达式例如54.3 if 语句 if语句是用来判定所给定的条件是否满足语句是用来判定所给定的条件是否满足,根据判定根据判定的结果的结果(真真或或假假)决定执行给出的两种操作之一决定执行给出的两种操作之一. if语句的三种形式语句的三种形式: if (表达式表达式) 语句语句 if (表达式表达式)

3、 语句语句1 else 语句语句2 if (表达式表达式1) 语句语句1 else if (表达式表达式2) 语句语句2 else if (表达式表达式3) 语句语句3 else if (表达式表达式n) 语句语句n else 语句语句n+1例如例如例如6if语句的嵌套语句的嵌套:在一个:在一个if语句中又语句中又包含一个或多个包含一个或多个if语句。语句。if ( ) if ( ) 语句语句1 else 语句语句2else if ( ) 语句语句3 else 语句语句4if ( ) if ( ) 语句语句1else if ( ) 语句语句2 else 语句语句3内嵌if内嵌if内嵌ifif

4、( ) if ( ) 语句语句1 else if ( ) 语句语句2 else 语句语句3 If与else的配对关系:else总是与它上面的最近的未配对的IF配对。易出现混乱时,建议以花括号理顺配对关系7 -1 (x0)1. main ()int x, y; scanf(“%d” ,&x) ;if (x0) y= - 1;else if (x= =0) y=0; else y=1;printf(“x=%d ,y=%dn”,x ,y); x=0y= -1x0y=1y=0真真假假2.if (x=0) if (x0) y=1; else y=0; else y= -1;83 . y= - 1

5、;if (x!=0)if (x0) y=1;else y=0;真真假假x0y=1y= 0 x=0y=- 14. y=0; if (x=0) if (x0) y=1; else y= - 1;真真假假x0y=1y= -1X!=0y=0真真假假x0y=1y= -1x!=0y=0y=- 1真假假x0y=1y= 0 x=0真94.3.3 条件运算符条件运算符 表达式表达式1 ? 表达式表达式2 : 表达式表达式3条件表达式条件表达式 max= (ab)? a:b 相当于相当于 if (ab) max=a; else max=b;说明说明: 条件运算符的优先级别条件运算符的优先级别,仅高于赋值运算仅高于

6、赋值运算 条件运算符的结合方向为右结合性条件运算符的结合方向为右结合性(从右从右至左至左) 条件表达式不能取代条件表达式不能取代if语句语句 条件表达式中的表达式类型可以不同条件表达式中的表达式类型可以不同 10kA1A2AiAnk=k2k=k1k=knk=ki.switch语句:多分支选择语句语句:多分支选择语句4.4 switch语句11改为改为C语言的多分支语句表示:语言的多分支语句表示: switch (grade)case A:printf(“85100n”);break; case B:printf(“7084n”););break; case C:printf(“6079n”);

7、);break; case D:printf(“60n”););break; default :printf(“errorn”););12switch语句的一般格式语句的一般格式switch( 表达式表达式) case E1: 语句组语句组 1; break; case E2: 语句组语句组 2; break; . case En: 语句组语句组 n; break; default: 语句组语句组 ; break; switch表达式表达式语句组语句组1语句组语句组2语句组语句组n语句组语句组.E 1E 2Endefaultcase switch语句的一般格式语句的一般格式switch( 表达

8、式表达式) case E1: 语句组语句组 1; break; case E2: 语句组语句组 2; break; . case En: 语句组语句组 n; break; default: 语句组语句组 ; break; 13说明1.1.switchswitch后面括弧内的后面括弧内的“表达式表达式”,ANSIANSI标准允许它为任标准允许它为任何类型,何类型,如如int、char和枚举型中的一种和枚举型中的一种。2.case后面的常量表达式后面的常量表达式E1,E2,E1,E2,EnEn的的值必须互不相同值必须互不相同,其,其仅起语句标号作用。仅起语句标号作用。系统一旦找到入口标号,就从此标

9、号系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上开始执行,不再进行标号判断,所以必须加上break语句,语句,以便结束以便结束switch语句语句。 当当 casecase后包含多个可执行语句时,后包含多个可执行语句时,不必加不必加 。3.3.当表达式的值与某一个当表达式的值与某一个casecase后面的常量表达式的值相等后面的常量表达式的值相等时,就执行此时,就执行此casecase后面的语句,后面的语句,当执行到当执行到break语句时,跳语句时,跳出出switch语句,转向执行语句,转向执行switch语句的下一条。语句的下一条。4.4.若所有的若所有的case

10、case中的常量表达式的值都没有与表达式的值中的常量表达式的值都没有与表达式的值匹配的,就匹配的,就执行执行default 后面的语句(组)。然后,再执行后面的语句(组)。然后,再执行switch语句的下一条。语句的下一条。 5.5.各个各个casecase和和defaultdefault的出现次序不影响执行结果。的出现次序不影响执行结果。6.6.多个多个casecase可共用一组执行语句可共用一组执行语句。14例例 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass

11、!”); case 2: printf(“Fail!”); default : printf(“data error!”); 运行结果:运行结果:score为为5时,输出:时,输出: Very good! Good! Pass! Fail! data error!15例例 main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; /退出退出switch(y) case 1: b+; break; case 2: a+;b+; break; /退出退出switch(x) case 3: a+;b+; pr

12、intf(“na=%d,b=%d”,a,b); 运行结果:运行结果:a=2,b=1switchswitch语句的语句的嵌套嵌套16例例 根据输入字母输出字符串根据输入字母输出字符串#include main() int c; printf(Enter m or n or h or other:); c=getchar(); switch(c) case m: printf(nGood morning!n);break; case n: printf(nGood night!n); break; case h: printf(nHello!n); break; default : printf(

13、nerror!n); break; 174.5 程序举例程序举例main() int year, leap; scanf(“%d”, &year); if (year%4= =0) if (year%100= =0) if (year%400= =0) leap=1; else leap=0; else leap=1;else leap=0;if (leap) printf (“%d is ”,year);else printf (“%d is not ”,year);printf (“a leap year.n”); year被被4整除整除YNyear被被100整除整除YNYNyea

14、r被被400整除整除leap=1leap=0leap=1leap=0leapYN输出闰年输出闰年输出非闰年输出非闰年例例4.5写一个程序,判断某年是否闫年。写一个程序,判断某年是否闫年。18例4.7 运输公司对用户计算运费的标准如下:S250km 没有折扣没有折扣250=s500 2%折扣折扣500=s1000 5%折扣折扣1000=s2000 8%折扣折扣2000=s3000 10%折扣折扣3000=s 15%折扣折扣p(price),w(weight),s(distance),d(discount)f=p*w*s*(1-d)c=s/250c1无折扣无折扣1c22%2c45%4c88%8c1

15、215%250100020003000500sd0 1 2 3 4 5 6 7 8 9 10 11 12 c19main( )int c,s;float p,w,f;scanf(“%f,%f,%d”,&p,&w,&s););if (s =3000) c = 12 ;else c = s /250 ;switch(c)case 0 : d = 0 ;break;case 1 : d = 2 ;break;case 2 : case 3 : d = 5;break;case 4 : case 5 : case 6 : case 7 : d = 8 ;break;case 8

16、 : case 9 : case 10 : case 11 : d = 10 ;break;case 12 : d = 15 ;break;f = p*w*s*(1- d/100.0););printf(“freight=%15.4f”,f););20 C语言提供六种关系运算符语言提供六种关系运算符 小于小于 大于大于 = 大于等于大于等于 = 等于等于 != 不等于不等于双目运算双目运算,左结合性左结合性。如。如: ab,(a+b)(b+c),(,(a=3)(b=5),(ab)c,abc21赋值表达式赋值表达式:x=aby=abc关系表达式的值是一个逻辑值,即关系表达式的值是一个逻辑值,即真

17、真或或假假。运算时以运算时以1代表真,以代表真,以0代表假。代表假。的值为真的值为真,表达式的值为表达式的值为1的值为真,表达式的值为的值为真,表达式的值为1,的值为假的值为假,表达式的值为表达式的值为0,例如:若例如:若a=3,b=2,c=1,则,则ab(ab)= =cb+ca+b 算术运算符算术运算符 高高 ab!=c a= =bc 赋值运算符赋值运算符 低低23 逻辑运算符:& 逻辑与 逻辑或 ! 逻辑非&和 是双目运算符,!是单目运算符.如:(ab) & (xy) (ab) (xy) !(ab)24如如: !a&b xy&c 等效等效(! a)&

18、amp;b) (xy)&c) (ab)&(xy) 等效等效 ab&xy(a= =b) (x= =y) 等效等效a= =b x= =y (!a) (ab) 等效等效!a ab !(非) 高算术运算符关系运算符& 赋值运算符 低优先次序如图所示优先次序如图所示:25逻辑表达式 逻辑表达式的值应该是一个逻辑量逻辑表达式的值应该是一个逻辑量“真真”或或“假假”,以数值以数值“1”或或“0”表示表示.而在判断一个量而在判断一个量是否为是否为“真真”时时,以以“0”代表代表假假,以以非非“0”代表代表真真. 如如:若若a= 4,则则!a等于等于0 若若a=4,b=5,则则a

19、&b等于等于1 若若a=0,b=5,则则a b等于等于1 若若a=4,b=5,则则!a b等于等于1 4&0 2,等于等于1 53&2 83)&2) ( 8y) printf (“%d”,x); 这种这种if语句的执行过程见图语句的执行过程见图: 假假 真真xyprint(“%d”,x);可以是一个语句也可以是一个语句也可以是复合语句可以是复合语句一般为逻辑一般为逻辑表达式或关表达式或关系表达式系表达式.理论上可以理论上可以是任意数值是任意数值类型类型if (a) printf(“Hello, world”);28 例如例如:if(x y) printf(“%d

20、”,x); else printf(“%d”,y);xyprintf(“%d”,x);printf(“%d”,y);真假注意注意29expr1statemnt1非非0=0expr2expr3statemntnstatemnt3statemnt2非非0非非0=0=0例例 判断输入字符种类判断输入字符种类#include main() char c; printf(Enter a character:); c=getchar(); if(c=0&c=A&c=a&cb) ;else t=a;a=b;b=t;printf(“%5.2f,%5.2fn”,a,b);开始开始输入两个数输入两个数abt=a;a=b;b=t输出输出a,b结束结束真真假假32例例4.2 从小到大输出三个数。从小到大输出三个数。main()float a,b,c,t;scanf(“%f,%f,%f”&a,&b,&c);if (ab)t=a;a=b;b=t;if (ac)t=a;a=c;c=t;if (b

温馨提示

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

评论

0/150

提交评论