C语言第5章.ppt课件_第1页
C语言第5章.ppt课件_第2页
C语言第5章.ppt课件_第3页
C语言第5章.ppt课件_第4页
C语言第5章.ppt课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、5.1 5.1 关系运算符和关系表达式关系运算符和关系表达式 关系运算符用来比较两个数据的大小,关系运算符用来比较两个数据的大小,运算的结果为成立或不成立。运算的结果为成立或不成立。 如果成立,则结果为逻辑值如果成立,则结果为逻辑值“真真”,用,用整数整数“1 1”表示;如果不成立,则结果为逻辑表示;如果不成立,则结果为逻辑值值“假假”,用整数,用整数“0 0”表示。表示。运算符运算符名称名称对象数对象数运算规则运算规则结合性结合性 = =!=!=小于小于小于或等于小于或等于大于大于大于或等于大于或等于等于等于不等于不等于双目双目满足则为真满足则为真结果为结果为1 1不满足为假不满足为假结果为

2、结果为0 0自左向右自左向右优优先先级级一、关系运算符及其优先级一、关系运算符及其优先级优先级相同(优先级相同(高高)优先级相同(优先级相同(低低)算术运算符算术运算符 优于优于 关系运算符关系运算符 优于优于 赋值运算符赋值运算符 ca+b ca+b c(a+b) c(a+b) ab!=c ab!=c (ab)!=c(ab)!=c a=bc a=bc a=(bc) a=(bc a=bc a=(bc) a=(bc)如果如果a=1;b=2;c=3a=1;b=2;c=3求各表达式的值?求各表达式的值? 若若a=0; b=0.5; x=0.3;a=0; b=0.5; x=0.3;则则 a a=x=b

3、=x2785278在在C C中是允许的,中是允许的, 值为值为: : int i=1,j=7,a; int i=1,j=7,a; a=i+(j%4!=0); a=i+(j%4!=0); 则则,a=,a= a a0 0 结果为结果为: : A A100 100 结果为结果为: :00210注意注意: :避免对实数作避免对实数作相等或不等的判断相等或不等的判断; ;注意区分注意区分“=”与与“=”的不同的不同. .二、关系表达式二、关系表达式 关系表达式是由关系运算符连接关系表达式是由关系运算符连接2 2个表达个表达式构成的。它的一般形式为:式构成的。它的一般形式为: 表达式表达式 关系运算符关系

4、运算符 表达式表达式其中:表达式可以是算术表达式、关系表其中:表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式。达式、逻辑表达式、赋值表达式。例如:例如:a=2,c=a=2,c=a a,f=3.0,f=3.0 a+2 a+2!=!=c-100c-100 值为值为: : (ac) (ac)=(f4)(f4) 值为值为: :115.2 逻辑运算符和逻辑表达式一、逻辑运算符及其优先级一、逻辑运算符及其优先级 逻辑运算符是用来对两个关系式或逻辑量逻辑运算符是用来对两个关系式或逻辑量进行逻辑运算的,运算结果为逻辑值进行逻辑运算的,运算结果为逻辑值“真真(1)(1)”或或“假假(0)(0)”。在

5、语言中。在语言中, ,逻辑量是用数值非逻辑量是用数值非0 0和和0 0来表示逻辑真和假的。来表示逻辑真和假的。 逻辑运算符逻辑运算符运算符名称对象数结合性&|逻辑与逻辑与逻辑或逻辑或双目双目自自左左向右向右! !逻辑非逻辑非单目单目自自右右向左向左逻辑运算符运算规则逻辑运算符运算规则:a ab ba&ba&ba|ba|b!a!a假假(0)(0)假假(0)(0)真真(1)(1)真真(1)(1)假假(0)(0)真真(1)(1)假假(0)(0)真真(1)(1)假假(0)(0)假假(0)(0)假假(0)(0)真真(1)(1)假假(0)(0)真真(1)(1)真真(1)(1)真真(

6、1)(1)真真(1)(1)真真(1)(1)假假(0)(0)假假(0)(0) 逻辑运算符的优先级:逻辑运算符的优先级:! ! 算术运算符算术运算符关系运算符关系运算符&|二、逻辑表达式二、逻辑表达式 逻辑表达式是由逻辑运算符连接表达式构逻辑表达式是由逻辑运算符连接表达式构成的。它的一般形式为:成的。它的一般形式为: 表达式表达式 双目逻辑运算符双目逻辑运算符 表达式表达式 单目逻辑运算符单目逻辑运算符 表达式表达式 其中表达式可以是算术表达式、关系表达其中表达式可以是算术表达式、关系表达式、赋值表达式、逗号表达式等。式、赋值表达式、逗号表达式等。 逻辑表达式的运算结果以数值逻辑表达式的运

7、算结果以数值“1 1”代表真代表真,“0 0”代表假;代表假; 在判断一个数值时,其值为在判断一个数值时,其值为“0 0”即为假,即为假,“非非0 0”即为真。即为真。a=2,c=a=2,c=a a,f=3.0,f=3.0,求逻辑表达式的值。求逻辑表达式的值。 !(c-!(c-a a) ) f/3&a-cf/3&a-c a=c|f=ca=c|fa)&(f4)(ca)&(f4) !(1,2)!(1,2) !(c=!(c=A A) ) (1,2,3)&(3,3,3)(1,2,3)&(3,3,3)11110001 三、逻辑运算的三、逻辑运算的短路短路特

8、性特性逻辑表达式求解时,并非所有的逻辑运算逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。符才能求出表达式的解时,才执行该运算符。 a&b&c a&b&c 只在只在a a为真时,才判别为真时,才判别b b的值;的值; 只在只在a a、b b都为真时,才判别都为真时,才判别 c c的值的值 a|b|c a|b|c 只在只在a a为假时,才判别为假时,才判别b b的值;的值; 只在只在a a、b b都为假时,才判别都为假时,才判别 c c的值的值 a=1;b=

9、2;c=3;d=4;m=1;n=1;a=1;b=2;c=3;d=4;m=1;n=1; (m=ab)&(n=cd) (m=ab)&(n=cd) 问,问,m m和和n n的运算结果的运算结果结果结果: : m=0,n=15.3 if语句一、一、ifif语句的三种形式语句的三种形式 形式一形式一: if(if(表达式表达式) ) 语句;语句; 或或 if(if(表达式表达式) ) 语句语句; 其中:表达式一般为关系表达式或逻辑表其中:表达式一般为关系表达式或逻辑表达式,也可以是其它的表达式。达式,也可以是其它的表达式。 语句可以是单一语句或复合语句。语句可以是单一语句或复合语句。ex

10、prstatement=1=0 if(xy)if(xy) printf( printf(“%d%d”,x);,x); 形式形式二:二: if (if (表达式表达式) ) 语句语句1 1; elseelse 语句语句2 2; 语句语句1 1和语句和语句2 2可以是可以是单一语句或复合语句。单一语句或复合语句。exprstatement1statement2=1=0if(xy) if(xy) max=x; max=x; else else max=y; max=y; 形式形式三:三: if (if (表达式表达式1) 1) 语句语句1; 1; else if ( else if (表达式表达式2

11、) 2) 语句语句2;2; else if ( else if (表达式表达式3) 3) 语句语句3;3; else if ( else if (表达式表达式m) m) 语句语句m;m; else else 语句语句n; n; expr1statemnt1=1=0expr2expr3statemntnstatemnt3statemnt2=1=1=0=0if (score=90) grade=A; else if (score =80) grade =B; else if (score =70) grade =C; else if (score =60) grade =D; else grade

12、 =F; if(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“OK”); if(a) printf(“%d”,a);说明:说明:ifif后面的表达式类型任意后面的表达式类型任意 语句可以是复合语句语句可以是复合语句 if(x) if(x) if(x!=0) if(x!=0) if(!x) if(!x) if(x=0) if(x=0)if(ab) t=a;a=b;b=t;从键盘输入两个数,求出绝对值较大者并从键盘输入两个数,求出绝对值较大者并显示输出。显示输出。 #include #include #include #include void mai

13、n()void main() int a,b,max; int a,b,max; printf( printf(“Enter 2 numbers:Enter 2 numbers:”);); scanf( scanf(“%d,%d%d,%d”,&a,&b);,&a,&b); if ( if (abs(a)abs(a)abs(b)abs(b) max=a;max=a; else else max=b;max=b; printf( printf(“Max(absolute)=%dnMax(absolute)=%dn”,max);,max); 运行运行结果结果: : E

14、nter 2 numbers:-78,23 Max(absolute)=-78选择结构选择结构判断输入的字符是否是判断输入的字符是否是“Q Q”或或“q q”,若是,显,若是,显示示QuitQuit。#include #include void main()void main() char c; char c; printf( printf(“Enter a character:Enter a character:”);); c=getchar(); c=getchar(); if (c= if (c=Q Q|c=|c=q q) printf() printf(“Quit!nQuit!n”);

15、); 运行运行结果结果: : Enter a character:Q Quit!1 1、将以下条件写成逻辑表达式、将以下条件写成逻辑表达式 m1- n1jm1+ n1m1- n1jm1+ n1 X-5X5X5 M M和和N N之一为之一为5 5,但不能同时为,但不能同时为5 5 -100k100-100k100,且,且K K为偶数为偶数2 2、写程序,输入两个数并判断两数是否相等、写程序,输入两个数并判断两数是否相等, ,输出判断结果。输出判断结果。3 3、编制一个数制转换程序,要求能进行如下的、编制一个数制转换程序,要求能进行如下的数制转换:数制转换:1010进制转换为进制转换为1616进制

16、进制1616进制转换为进制转换为1010进制进制1010进制转换为进制转换为8 8进制进制8 8进制转换为进制转换为1010进制进制#include void main() int a,b; printf(Enter integer a:); scanf(%d,&a); printf(Enter integer b:); scanf(%d,&b); if(a=b) printf(a=bn); else printf(a!=bn);运行运行结果结果: : Enter integer a:12 Enter integer b:12 a=b 运行运行结果结果: : Enter int

17、eger a:12 Enter integer b:9 a!=b #include void main() int ch,a;printf(“n 1.Dec to Hexn”); printf(“ 2.Hex to Decn”); printf(“ 3.Dec to Octn”); printf(“ 4.Oct to Decn”); printf(“nEnter your choice:”); scanf(“%d”,&ch); if (ch=1) printf(“nEnter an integer(Dec):”); scanf(“%d”,&a); printf(“Dec=%d

18、Hex=%xn”,a,a); if (ch=2) 【写程序写程序】提示输入提示输入3 3个整数,个整数,判断最大者并输出判断结果。判断最大者并输出判断结果。二、二、ifif语句的嵌套语句的嵌套ifif中又包含中又包含ifif。if (expr1) if (expr2) statement1; else statement2;else if (expr3) statement3; else statement4;内嵌内嵌if内嵌内嵌ifif (expr1) if (expr2) statement1; else statement2;内嵌内嵌ifif (expr1) if (expr2) sta

19、tement1;else statement2; 内嵌内嵌ifif (expr1) statement1;else if (expr3) statement3; else statement4;内嵌内嵌ifififelse else 配对原则:配对原则:elseelse总是和它上面离总是和它上面离它最近的未配对的它最近的未配对的ifif配对配对if()if()if()else.elseelse.else. 当缺少某个分支当缺少某个分支elseelse时,时,正确正确的的配对方法:加配对方法:加 例:例: if (a=b) if(b=c) printf(“a=b=c”); else printf

20、(“a!=b”);修改:修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”); y= y=编程序,输入一个编程序,输入一个x x值,输出值,输出y y值。值。void main() int x,y; scanf(“%d”,&x); if (x0) y=1; else y=0; printf(“x=%d,y=%dn”,x,y);-1 (x0)-1 (x0)1 (x0)运行运行结果结果: : -5x=-5,y=-1去掉去掉else,else,分分析运行结果析运行结果运行运行结果结果: : -5x=-5,y=01 1、对学生的成绩

21、进行分级:分数、对学生的成绩进行分级:分数=80=80是优良,是优良,分数低于分数低于6060为不及格,其它为及格。为不及格,其它为及格。 int score; int score; printf(“Enter a num:n”); scanf(“%d”,&score); if(score=80) printf(“Good!n”); else if(score=60) printf (“Passed!n”); else printf (“Failed!n”); if(score=60) printf (“Passed!n”);else printf (“Good!n”);if(scor

22、e=80) printf (“Good!n”); else printf(“Passed!n”);if(score=60) if(score=80) printf (“Good!n”); else printf(“Passed!n”); else printf(“Failed!n”); if(score=80) if(score=60) printf (“Passed!n”); else printf(“Good!n”); else printf(“Failed!n”); 2 2、编程:输入一个数,判断该数是、编程:输入一个数,判断该数是00、00,还是,还是=0=0,输出判断结果。,输出判断

23、结果。#include void main int x; printf(“Input your number:n”); scanf(“%d”,&x); if(x0) printf(“Its a positive.n”); else if(xb) max=a;if (ab) max=a; if if语句语句 else max=b; else max=b; max=(ab)?a:b;max=(ab)?a:b; 条件表达式语句条件表达式语句 1.1.条件运算符及其优先级条件运算符及其优先级 条件运算符是三目运算符,其三个运算对条件运算符是三目运算符,其三个运算对象都是表达式。象都是表达式。运

24、算符运算符名称名称对象数对象数运算规则运算规则结合性结合性? :? :条件条件三目三目对对e1?e2:e3e1?e2:e3e1e1为真为真, ,获得获得e2e2e1e1为假为假, ,获得获得e3e3自右向左自右向左 条件运算符的优先级如下:条件运算符的优先级如下: 其它运算符其它运算符 优于优于 条件运算符条件运算符 优于优于 赋值运算符赋值运算符 优于优于 逗号运算符逗号运算符设设a,b,ca,b,c均为均为2 2,则,则 (a=b)?c=1:0(a=b)?c=1:0 d=a+1=3?b=a+2:a+3d=a+1=3?b=a+2:a+3 2. 2.条件表达式条件表达式 条件表达式是由条件运算

25、符连接表达式构条件表达式是由条件运算符连接表达式构成的。其一般形式为:成的。其一般形式为: 表达式表达式1?1?表达式表达式2:2:表达式表达式3 3设设a=2,c=a=2,c=a a,f=3.0,f=3.0,求下列条件表达式的求下列条件表达式的值。值。 x= a0?a:-ax= a0?a:-a x= x= f=2.0f=2.0?a=c?a=c x= !(a!=0)?!a:!a x= !(a!=0)?!a:!a x= (f0)?(a0)?2:1) x= (f0)?(a0)?2:1):(a0)?1:0):(a0)?1:0) x= x= (a=0)?(a=1):(a=0)(a=0)?(a=1):(

26、a=0) x= x= (c=(c=A A)?(0,1):(1,0)?(0,1):(1,0)2112105.4 switch5.4 switch语句语句 switch switch是语是语言提供的一个言提供的一个多分多分支选择语句支选择语句。 switchswitch语句比语句比通过嵌套实现多分通过嵌套实现多分支选择的支选择的ifif语句更语句更直观。直观。 switchswitch的一般的一般格式如下:格式如下: switch( switch( 表达式表达式 ) ) case E1: case E1: 语句组语句组 1;1; break; break; case E2: case E2: 语句

27、组语句组 2;2; break; break; . . case En: case En: 语句组语句组 n;n; break; break; default: default: 语句组语句组 ; ; break; break; switchswitch语句的控制流程是:语句的控制流程是:首先计算表达首先计算表达式的值,然后依次与每一个式的值,然后依次与每一个casecase中的中的常量值常量值进进行比较,当发现与某个值行比较,当发现与某个值匹配匹配,就,就执行执行该该casecase后面的语句后面的语句, ,直到直到breakbreak为止为止。若表达式的值与。若表达式的值与所有所有case

28、case中的常量值都不匹配中的常量值都不匹配, ,则执行则执行defaultdefault后面的语句。后面的语句。switch表达式表达式语句组语句组1语句组语句组2语句组语句组n语句组语句组.E1E2Endefaultcase 说明:说明:E1,E2,E1,E2,EnEn是常量表达式是常量表达式, ,且值必须互不相同且值必须互不相同casecase语句语句起起标号作用,必须用标号作用,必须用breakbreak跳出跳出casecase后可包含多个可执行语句,且不必加后可包含多个可执行语句,且不必加 switchswitch可嵌套可嵌套多个多个casecase可共用一组执行语句可共用一组执行语

29、句switchswitch(chch) case case A A: : case case B B: : case case C C: : printf( printf(“score60nscore60n”);); break; break; . switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); scorescore为为5 5时,输出:时,输

30、出: Very good! Good! Pass! Fail! data error!Very good! Good! Pass! Fail! data error!例:例:void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); 运行结果:运行结果:a=2,b=1a=2,b=1#include main() int c; prin

31、tf(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(n?n); break; 根据输入字母输出字符串根据输入字母输出字符串用用switchswitch语句实现菜单选择数据转换功能。语句实现菜单选择数据转换功能。#include #include main()main() int ch

32、,a; int ch,a; printf( printf(“n 1.Dec to Hexnn 1.Dec to Hexn”);); printf( printf(“ 2.Hex to Decn 2.Hex to Decn”);); printf( printf(“ 3.Dec to Octn 3.Dec to Octn”);); printf( printf(“ 4.Oct to Decn 4.Oct to Decn”);); printf( printf(“nEnter your choice:nEnter your choice:”);); scanf( scanf(“%d%d”,&

33、;ch);,&ch); switch(ch) switch(ch) case 1:printf( case 1:printf(“nEnter an nEnter an integer(Dec):integer(Dec):”);); scanf( scanf(“%d%d”,&a);,&a); printf( printf(“Dec=%d Hex=%xnDec=%d Hex=%xn”,a,a);,a,a); break; break; case 2: case 2: 输入一个字符,输入一个字符,判断其是否是判断其是否是A(Abort)A(Abort)或或R(Retry)R(

34、Retry)或或F(Fail)F(Fail),并输出,并输出相应信息。相应信息。 #include void main() char c; printf(“Abort,Retry,Fail?”); c=getchar(); switch(c) case a: case A:printf(“Abort!n”); break; case r: case R:printf(“Retry!n”); break; case f: case F:printf(“Fail!n”); break; default: printf(“Erroneous character!n”); 运行结果:运行结果:Abor

35、t,Retry,Fail?Abort,Retry,Fail?rrRetry!Retry! 运行结果:运行结果:Abort,Retry,Fail?Abort,Retry,Fail?eeErroneous character!Erroneous character!5.5 程序举例写程序,判某一年是否是闰年。写程序,判某一年是否是闰年。year%4?year%100?year%400?leap=1?leap=0leap=1leap=1leap=0no leap yearleap yearNN=0NYYYY写一个计算器程序,用户输入运算写一个计算器程序,用户输入运算数和四则运算符数和四则运算符, ,

36、输出计算结果输出计算结果. .当输入的不是四则运算符或除数为当输入的不是四则运算符或除数为0 0时时, ,提示出错信息提示出错信息. .#include #include void main()void main() float a,b; float a,b; char c; char c; printf( printf(“Input expression:a+(-,Input expression:a+(-,* *,/)bn,/)bn”);); scanf( scanf(“%f%c%f%f%c%f”,&a,&c,&b);,&a,&c,&b); switch(c) switch(

温馨提示

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

评论

0/150

提交评论