C语言关系运算符和位运算符课件_第1页
C语言关系运算符和位运算符课件_第2页
C语言关系运算符和位运算符课件_第3页
C语言关系运算符和位运算符课件_第4页
C语言关系运算符和位运算符课件_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

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

文档简介

C语言关系运算符和位运算符C语言关系运算符和位运算符1本节主要内容介绍3.5.5关系运算符和关系表达式3.5.6逻辑运算符和逻辑表达式3.5.7条件运算符和条件表达式3.5.9位运算符3.5.10求字节运算符本节主要内容介绍2C语言关系运算符和位运算符课件3C语言关系运算符和位运算符课件42.关系表达式用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式)接起来的式子,称关系表达式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)关系表达式的值是一个逻辑值,即“真”或“假”。例:关系表达式”a>b”的值为“真”,表达式的值为1。a=3,b=2,c=1则关系表达式“(a>b)==c”的值为1C语言中没有专用的逻辑值,1代表真,0代表假关系运算符和关系表达式2.关系表达式C语言中没有专用的逻辑值,1代表真,0代表假关5关系运算符和关系表达式例inti=1,j=7,a;a=i+(j%4!=0);

则a的值为例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c(a=5)<(b=4)'a'<'b'(a>b)>(b<c)例'a'>0结果为'A'>100结果为例若a=0;b=0.5;x=0.3;则a<=x<=b的值为

//表达式值1//表达式值1//表达式值0//d的值为1//f的值为0//表达式值0//表达式值1//表达式值12100关系运算符和关系表达式例inti=1,j=76关系表达式

使用注意:尽量使用()以使关系清晰。如:(a>b)==(b+c)避免类似错误:如:要表示x∈[a,b],不可写为:a<=x<=b应记为:(x>=a)&&(x<=b)应避免对实数作相等或不等的判断。如:1.0/3.0*3.0==1.0结果为0.可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6注意区分“=”与“==”,常把“==”误写为“=”。如:a=1与a==1含义不同。关系运算符和关系表达式关系表达式关系运算符和关系表达式7

3.5.6逻辑运算符和逻辑表达式1.逻辑运算符及其优先次序(1)&&(逻辑与)相当于其他语言中的AND(2)||(逻辑或)相当于其他语言中的OR(3)!(逻辑非)相当于其他语言中的NOT例:a&&b若a,b为真,则a&&b为真。a||b若a,b之一为真,则a||b为真。!a若a为真,则!a为假。优先次序:! 算术运算符关系运算符&&||赋值=3.5.6逻辑运算符和逻辑表达式1.逻辑运算符及其优先8逻辑运算符和逻辑表达式a的值b的值!a的值a&&b的值a||b的值非0非0011非000010非010100100说明非0变0,0变1a,b均非0才为1a,b均0才为0在C语言中:0被看成是“假”,“假”就是0 非零值被看成是“真”,“真”就是1如:a=-3.5&&5>3看成“真”&&“真”值为1注意:数学上关系式0≦x≤100 要写成:0<=x&&x<=100逻辑运算符和逻辑表达式a的值b的值!a的值a&&b的值a||9逻辑运算符和逻辑表达式如:a>b&&x>ya==b||x==y

!a||a>b

如:(a>b)&&(x>y)

(a==b)||(x==y)

(!a)||(a>b)

建议:使用()能使关系更清晰!逻辑运算符和逻辑表达式如:a>b&&x>y如:(a>b)&&102.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式的值应该是一个逻辑量“真”或“假”。例:设a=4,b=5:!a的值为0a&&b的值为1a||b的值为1!a||b的值为14&&0||2的值为1任何非零的数值被认作“真”逻辑运算符和逻辑表达式2.逻辑表达式例:设a=4,b=5:任何非零的数值被认作“真11例:5>3&&8<4-!0

自左向右运算

1&&0逻辑值为08<3逻辑值为04-1值为3!0逻辑值为15>3逻辑值为1表达式值为0逻辑运算符和逻辑表达式例:5>3&&8<4-!01&&0逻辑值为08<3逻辑12在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。(1)a&&b&&c只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。(2)a||b||c只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c例:(m=a>b)&&(n=c>d)当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“a>b”的值为0,因此m=0,而“n=c>d”不被执行,因此n的值不是0而仍保持原值1。逻辑运算符和逻辑表达式在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。例:13逻辑运算符和逻辑表达式例3.12逻辑表达式的不完全计算

voidmain(){inta,b,c,d;a=0;b=1;c=a++&&b++;d=a++||b++;printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);}a=2,b=1,c=0,d=1逻辑运算符和逻辑表达式例3.12逻辑表达式的不完全计算a=14逻辑运算符和逻辑表达式逻辑运算符的应用:(1)表示成绩(grade)在90以上(含)和60分以下的情况:grade>=90||grade<60(2)表示x是大于0的偶数:

x>0&&(x%2==0)(3)判断闰年的条件是符合下列两种之一:①能被4整除,但不能被100整除;②能被400整除(year%4==0&&year%100!=0)||(year%400==0)(4)表示x是数字字符的情况x>='0'&&x<='9'(或x>=48&&x<=57)逻辑运算符和逻辑表达式逻辑运算符的应用:15课堂练习:1、已有定义语句,intx=3,y=4,z=5;则值为0的表达式是()

A)x>y++B)x<=++yC)x!=y+z>=y-zD)y%z>=y-z2、x为奇数时值为“真”,x为偶数时值为“假”,表达式是()

A)!(x%2==1)B)x%2==0C)x%2D)!(x%2)3、已有定义语句:intm=0,n=1;执行表达式(m=5<3)&&(n=7>9)后,n的值是()

A)1B)2C)3D)44、已有定义语句:intm=0,n=3;执行表达式(m=5>3)||(n=7<9)后,n的值是()

A)1B)2C)3D)4课堂练习:1、已有定义语句,intx=3,y=4,z=5;16课堂练习5.能正确表示数学关系式100≤s<300的表达式为()。(A)(s>=100)&(s<300) (B)100<=s<300(C)(s>=100)&&(s<300) (D)(s>=100)and(s<300)6.若定义inta=2,b=3;则表达式!a||b的值为()。(A)0 (B)1 (C)2 (D)37.设整型变量x为7,使整型变量y不为2的表达式是()。(A)y=x%3 (B)y=x/3(C)y=(++x)/3 (D)y=8-(--x)课堂练习5.能正确表示数学关系式100≤s<300的表达式173.5.7条件运算符和条件表达式C语言提供了一个简单的条件赋值语句或条件表达式。一般形式

表达式1?表达式2:表达式3功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。条件运算符的优先级高于赋值运算符,但低于关系运算符和逻辑运算符。例如:

a=1;b=2; c=a<b?3:4;main(){inti=3,j=5,k;k=i<j?i++:j++;printf("i=%d,j=%d,k=%d\n",i,j,k);}i=4,j=5,k=33.5.7条件运算符和条件表达式C语言提供了一个简单的条件18条件运算符和条件表达式条件表达式

说明:条件表达式语句功能相当于一种条件语句,但不等价于一般if语句。表达式2、表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。

如:a>b?(a=100):(b=100)a>b?printf("%d",a):printf("%d",b)表达式2、表达式3的类型可以不同,此时条件表达式值取二者中较高的类型。如:x>y?1:1.5//若x>y,则值为1.0;若x<y,则值为1.5。条件运算符和条件表达式条件表达式19条件运算符和条件表达式例3.13输入两个数,输出其中较大的数#include"stdio.h"main(){floata,b,max;printf("pleaseinputtworealnumbers:");scanf("%f%f",&a,&b);max=(a>b)?a:b;printf("max=%f\n",max);}条件运算符和条件表达式例3.13输入两个数,输出其中较大的20条件运算符和条件表达式例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。程序:

#include<stdio.h>voidmain(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("%c\n",ch);}运行结果:输入:A输出:a条件运算符和条件表达式例:输入一个字符,判别它是否大写字母,21应用运算符和表达式应注意运算符功能运算符与运算对象的关系要求运算对象的个数要求运算对象的类型运算符的优先级运算的结合方向

运算结果的类型混合运算中的类型转换条件运算符和条件表达式应用运算符和表达式应注意条件运算符和条件表达式223.5.9位运算符概念

位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。C语言提供位运算的功能,与其他高级语言(如PASCAL)相比,具有很大的优越性。3.5.9位运算符概念23位运算符C语言提供的位运算符有:运算符含义运算符含义

&按位与~取反

|按位或<<左移∧按位异或>>右移(1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。(2)运算量只能是整型或字符型的数据,不能为实型数据。说明:位运算符C语言提供的位运算符有:运算符含义241、“按位与”运算符(&)按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。即:0&0=0,0&1=0,1&0=0,1&1=1例:3&5并不等于8,应该是按位与运算:注意:如果参加&运算的是负数(如-3&-5),则要以补码形式表示为二进制数,然后再按位进行“与”运算。3&5的值得1

00000011(3)&

00000101(5)

00000001(1)

1、“按位与”运算符(&)按位与是指:参加运算的两个数据,按25“按位与”运算符按位与运算有两个特点:和二进制位数0相与则该位被清零;和二进制位数1相与则该位保留原值不变。利用这两个特点,可以指定一个数的某一位(或某几位)置0,也可以检验一个数的某一位(或某几位)是否是1。例如:a=a&3;只保留a的右端两位二进制位数。又如:若a&4值为4,则变量a的右端第3位为1。按位与运算符“&”和逻辑与运算符“&&”不同,对于逻辑与运算符“&&”,只要两边运算数为非0,运算结果为1。例如41&&165的值是1。“按位与”运算符按位与运算有两个特点:和二进制位数0相与则该262、“按位或”运算符(|)两个相应的二进制位中只要有一个为1,该位的结果值为1。即0|0=0,0|1=1,1|0=1,1|1=1例:

060|017,将八进制数60与八进制数17进行按位或运算。

00110000|

0000111100111111

2、“按位或”运算符(|)两个相应的二进制位中只要有一个为127“按位或”运算符

0000000000101001 (十进制数41)|0000000010100101 (十进制数165)0000000010101101 (十进制数173)

利用按位或运算的特点,可以指定一个数的某一位(或某几位)置1,其它位保留原值不变。例如:a=a|3;把a的右端两位二进制位数置1,其它位保留原值不变。a=a|0xff;把a的低字节全置1,高字节保持原样。a=a|0xff00;把a的高字节全置1,低字节保持原样。“按位或”运算符000000000010283、“异或”运算符(∧)异或运算符∧也称XOR运算符。它的规则是:若参加运算的两个二进制位同号则结果为0(假)

异号则结果为1(真)即:0∧0=0,0∧1=1,1∧0=1,1∧1=0例:即:071∧052=023(八进制数)

00111001∧

00101010

00010011

3、“异或”运算符(∧)异或运算符∧也称XOR运算符。它的规29“异或”运算符例如:inta=41^165;则a的值为140,运算过程用二进制表示如下:0000000000101001 (十进制数41)^

0000000010100101 (十进制数165)0000000010001100 (十进制数140)按位异或运算可以把一个数的二进制位的某一位(或某几位)求反(0变1,1变0)。例如:a=a^3;将变量a的最右端的二位求反。“异或”运算符例如:inta=41^165;则a的值为1304、“取反”运算符(~)~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。例如,~025是对八进制数25(即二进制数00010101)按位求反。

0000000000010101(~)

1111111111101010

(八进制数177752)4、“取反”运算符(~)~是一个单目(元)运算符,用来对一个31“取反”运算符例如:inti=199;则:~i值为-200,这是因为: 十进199写成二进制:

0000000011000111 把它按位取反 1111111100111000,这个数是整型十进制数-200在内存的补码表示。111111100110111000000011001000“取反”运算符例如:inti=199;则:~i值为-2325、左移运算符(<<)左移运算符是用来将一个数的各二进制位全部左移若干位。例如:a=<<2

将a的二进制数左移2位,右补0。若a=15,即二进制数00001111,左移2位得00111100,(十进制数60)高位左移后溢出,舍弃。chara=5,b;b=a<<3;a的二进制值为00000101, 执行语句b=a<<3;之后b的值为00101000(十进制数40=5*2*2*2),运算后a的值并没有改变仍为5)。

每左移1位,相当于乘以2。若高位移出的部分包含有二进制位数1,则不能用左移代替乘以2。5、左移运算符(<<)左移运算符是用来将一个数的各二进制位全336、右移运算符(>>)右移运算符是a>>2表示将a的各二进制位右移2位,移到右端的低位被舍弃,右移时,对于正整数和无符号整数,高位(左端)补0;对于负数,高位(左端)补1(补码表示法最高位1表示负数)。例如:

chara=41,b; b=a>>3; 用二进制来表示,a的值为00101001(十进制数41)执行语句b=a>>3;之后b的值为00000101(十进制数5=41/2/2/2,注意是整数除),运算后a的值并没有改变仍为41)。右移时,每右移1位,相当于除以2(整数除)。6、右移运算符(>>)右移运算符是a>>2表示将a的各二进制347.位运算赋值运算符它们是:>>=,<<=,&=,|=,~=,^=。例如:a>>=2相当于a=a>>2,b|=c相当于b=b|c8.位运算优先关系 例如:语句a=10&5<<3; 执行后a的值为8。“<<”的优先级高于“&”,先进行位移运算。7.位运算赋值运算符353.5.10求字节数运算符sizeof是一个单目运算符,返回运算对象所占内存总空间的字节数。它的运算对象可以是变量、常量或数据类型。它有三种形式:sizeof(数据类型)sizeof(变量或常量)sizeof(变量或常量)通常用于确定数组或结构体长度,也用于动态分配内存空间,后面章节会学到。3.5.10求字节数运算符sizeof是一个单目运算符,返回36例3.15sizeof运算符的一个实例#include"stdio.h"main(){charch;floatf;printf("sizeof5.0=%d\n",sizeof5.0);printf("float=%d\n",sizeof(f));printf("int=%d\n",sizeof(int));printf("char=%d\n",sizeof(ch));printf("sizeof'c'=%d\n",sizeof('c'));}运行情况如下:sizeof5.0=8float=4int=2char=1sizeof'c'=2例3.15sizeof运算符的一个实例运行情况如下:37课堂练习1.intx,a;则语句x=(a=4,a*2);运行后,x、a的值依次为________。2.若已定义intx=3,y=10,z;语句z=x>=y;运行后z的值为________。3.若定义inta=-5,b=-8,c=-12;则表达式a>=b||b<c的值为()。4.inta,b;则表达式(a=2,b=5,a*2,++b,a+b)的值是________。5.intm=5,n=3;则表达式(m+1,n+1,(--m)+(n--))的值是________。课堂练习1.intx,a;则语句x=(a=4,38课堂练习6.若有定义:inta,b;doublex,则以下不符合C语言语法的表达式是()。(A)x%(-3)(B)a+=-2(C)a=b=2(D)x=a+b7.若有定义:intb=7;floata=2.5,c=4.7;则表达式a+(b/2*(int)(a+c)/2)%4的值是()。

(A)2.5(B)3.5(C)4.5(D)5.58.8.已定义charc='A';则正确的赋值表达式是()。(A)c=\028 (B)c=(c++)%4(C)c+1=66 (D)c+=127--课堂练习6.若有定义:inta,b;double39课堂练习9.定义:intx=4,y=2,z=0;则表达式(x-y<=y)||(y=z)的值是()。(A)1(B)0(C)2(D)410.下面叙述正确的是()。

(A)强制类型转换运算的优先级高于算术运算(B)若a和b是整型变量,(a+b)++是合法的(C)'A'*'B'是不合法的(D)"A"+"B"是合法的11.若a为奇数时,表达式为"真",a为偶数时,表达式"假"。则不能满足要求的表达式是()。(A)a%2==1(B)!(a%2==0)(C)!(a%2)(D)a%2课堂练习9.定义:intx=4,y=2,z=0;则40课堂练习12.判定逻辑值为“真"的最准确叙述是()。(A)1(B)大于0的数(C)非0的整数(D)非0的数13.下面叙述中,错误的是()。

(A)算术运算对象不包含函数(B)%(模运算符)的运算对象只能为整型量(C)算术运算符的结合方向是"自左至右"课堂练习12.判定逻辑值为“真"的最准确叙述是()41课堂练习14.已定义doublek=3.6;则正确的赋值表达式是()。

(A)k=double(-3.6) (B)k%3(C)k=k*(-1.0)=-3.6 (D)k+=k-=(k=1.2)*(k=3)15.设已定义floata=2.0,b=3.0;使a值为5.0的表达式是()。(A)a+=b(B)a*=b+2.0(C)a/=b+2.0(D)a-=b+2.0课堂练习14.已定义doublek=3.6;则42肩关节周围炎

多发生于50岁左右的人,中医称为“五十肩”。因露肩当风,感受风寒湿邪所致,又称为“漏肩风”。

肩关节周围炎43本病早期多见于肱二头肌长头肌腱炎,肩峰下滑囊炎及冈上肌肌腱炎等。发病后肩关节僵硬,活动受限,故又称为“冻结肩”或“肩凝症”。此病女性发病率略高于男性,多见与体力劳动者,如不及时有效地治疗,有可能严重影响肩关节功能活动。

本病早期多见于肱二头肌长头肌腱炎,肩峰下滑囊44二、病因病机一般认为本病的发生与气血不足,外感风寒湿邪及外伤劳损有关。(一)气血不足年老体虚或因劳累过度而导致肝肾精亏,气血不足,筋失所养,血虚生痛。久之,则筋脉拘急而不用。二、病因病机45(二)外感风寒湿邪久居湿地,风雨露宿,夜寐露肩当风,以致风寒湿邪客于血脉筋肉。在脉则血凝而不流,脉络拘急而疼痛。寒湿之邪淫溢于筋肉则屈而不伸,痿而不用。(三)外伤筋骨跌扑闪挫,筋脉受损,瘀血内阻,脉络不通,不通则痛。久之,筋脉失养,拘急不用。(二)外感风寒湿邪久居湿地,风雨露宿,夜寐露肩当风,以致46三、临床表现本症的临床表现主要是肩痛与肩关节功能活动受限。三、临床表现47(一)疼痛早期呈阵发性疼痛,常因天气变化及劳累而诱发,以后逐渐发展到持续性疼痛,并逐渐加重,昼轻夜重,夜不能寐,不能向患侧侧卧。肩部受到牵拉时,可引起剧烈疼痛。此外在肩关节周围有广泛的压痛,并可向颈部及肘部放射。(一)疼痛早期呈阵发性疼痛,常因天气变化及劳48(二)功能活动受限

由于关节囊及肌肉的粘连,长期费用而引起的肌力降低,且喙肱韧带固定于短缩的内旋位等因素,可使肩关节各向的主动和被动活动均受限。特别是当肩关节外展时,出现典型的“扛肩”现象。严重时,肘关节功能亦受限,屈肘时手不能摸肩。日久,三角肌等可以发生不同程度的费用性萎缩,出现肩峰突起,上臂上举不便,后伸欠利等状。(二)功能活动受限49四、辨证治疗(一)治疗原则:舒筋活血滑利关节。(二)取穴及部位:合谷、曲池、缺盆、肩髃、肩贞、肩井、天宗等,肱二头肌长头腱、短头腱。(三)主要手法:滚、一指禅推、点、按、拿、扳、拔伸、摇、抖、搓等。四、辨证治疗50(四)操作方法:1.患者仰卧或坐位,医者站(或坐)于患侧,用扌衮法或一指禅推法施术于患侧肩前部及上臂内侧,往返数次,配合患肢的被动外展、外旋活动。(四)操作方法:512.健侧卧位,医者一手握患肢的肘部,另一手在肩外侧和腋后部用扌衮法,配合按拿肩髃,肩贞,并作患肢上举,内收等被动活动。2.健侧卧位,医者一手握患肢的肘部,另一手在肩外侧和腋后部用523.患者坐位,点按上述穴位。4.医者站在患者的患侧稍后方,一手扶住患肩,一手握住腕部或托住肘部,一肩关节为轴心作环转运动,幅度由小到大然后医者一手托起前臂,使患者肘屈,患臂内收,患侧之手搭在健侧肩上,再由健肩绕过头顶到患肩,反复环绕5~7次,在此同时拿捏患肩。3.患者坐位,点按上述穴位。535.医者站在患者患侧稍前方,一手握住患侧腕部,并以肩部顶住病人患侧肩前部。握腕之手将患臂由前方扳向背后,逐渐用力使之后伸,重复2~3次。5.医者站在患者患侧稍前方,一手握住患侧腕部,并以肩部顶住病546.医者站在患者的健侧稍后方,用一手扶健侧肩,防止患者上身前屈,另一手握住患侧腕部,从背后将患肢向健侧牵拉,逐渐用力,加大活动范围,以患者能够忍耐为度。6.医者站在患者的健侧稍后方,用一手扶健侧肩,防止患者上身前557.医者站在患侧肩外侧,用双手握住患肢腕部稍上方,将患肢提起,用提抖的方法向斜上前拉。牵拉时要求患者先沉肩屈肘,医者缓缓向斜上方牵抖患肢。活动幅度逐渐增加,手法力量由小到大,须注意用力不能过猛,以防发生意外。7.医者站在患侧肩外侧,用双手握住患肢腕部稍上方,将患肢提568.用搓法由肩部到前臂反复搓动,以此作为手法操作的结束动作。8.用搓法由肩部到前臂反复搓动,以此作为手法操作的结束动作。57

按语

在推拿治疗时用力要轻柔,尤其对该病的早期(疼痛期)不宜用重手法,同时要求患者在治疗的同时配合适当的肩部功能锻炼;按语58(一)双手高举锻炼(二)弯腰摇肩法(三)扩胸松肩法(四)体后拉手(五)外旋锻炼(六)甩手锻炼(七)双肩内收、外展运动(一)双手高举锻炼59C语言关系运算符和位运算符C语言关系运算符和位运算符60本节主要内容介绍3.5.5关系运算符和关系表达式3.5.6逻辑运算符和逻辑表达式3.5.7条件运算符和条件表达式3.5.9位运算符3.5.10求字节运算符本节主要内容介绍61C语言关系运算符和位运算符课件62C语言关系运算符和位运算符课件632.关系表达式用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式)接起来的式子,称关系表达式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)关系表达式的值是一个逻辑值,即“真”或“假”。例:关系表达式”a>b”的值为“真”,表达式的值为1。a=3,b=2,c=1则关系表达式“(a>b)==c”的值为1C语言中没有专用的逻辑值,1代表真,0代表假关系运算符和关系表达式2.关系表达式C语言中没有专用的逻辑值,1代表真,0代表假关64关系运算符和关系表达式例inti=1,j=7,a;a=i+(j%4!=0);

则a的值为例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c(a=5)<(b=4)'a'<'b'(a>b)>(b<c)例'a'>0结果为'A'>100结果为例若a=0;b=0.5;x=0.3;则a<=x<=b的值为

//表达式值1//表达式值1//表达式值0//d的值为1//f的值为0//表达式值0//表达式值1//表达式值12100关系运算符和关系表达式例inti=1,j=765关系表达式

使用注意:尽量使用()以使关系清晰。如:(a>b)==(b+c)避免类似错误:如:要表示x∈[a,b],不可写为:a<=x<=b应记为:(x>=a)&&(x<=b)应避免对实数作相等或不等的判断。如:1.0/3.0*3.0==1.0结果为0.可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6注意区分“=”与“==”,常把“==”误写为“=”。如:a=1与a==1含义不同。关系运算符和关系表达式关系表达式关系运算符和关系表达式66

3.5.6逻辑运算符和逻辑表达式1.逻辑运算符及其优先次序(1)&&(逻辑与)相当于其他语言中的AND(2)||(逻辑或)相当于其他语言中的OR(3)!(逻辑非)相当于其他语言中的NOT例:a&&b若a,b为真,则a&&b为真。a||b若a,b之一为真,则a||b为真。!a若a为真,则!a为假。优先次序:! 算术运算符关系运算符&&||赋值=3.5.6逻辑运算符和逻辑表达式1.逻辑运算符及其优先67逻辑运算符和逻辑表达式a的值b的值!a的值a&&b的值a||b的值非0非0011非000010非010100100说明非0变0,0变1a,b均非0才为1a,b均0才为0在C语言中:0被看成是“假”,“假”就是0 非零值被看成是“真”,“真”就是1如:a=-3.5&&5>3看成“真”&&“真”值为1注意:数学上关系式0≦x≤100 要写成:0<=x&&x<=100逻辑运算符和逻辑表达式a的值b的值!a的值a&&b的值a||68逻辑运算符和逻辑表达式如:a>b&&x>ya==b||x==y

!a||a>b

如:(a>b)&&(x>y)

(a==b)||(x==y)

(!a)||(a>b)

建议:使用()能使关系更清晰!逻辑运算符和逻辑表达式如:a>b&&x>y如:(a>b)&&692.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式的值应该是一个逻辑量“真”或“假”。例:设a=4,b=5:!a的值为0a&&b的值为1a||b的值为1!a||b的值为14&&0||2的值为1任何非零的数值被认作“真”逻辑运算符和逻辑表达式2.逻辑表达式例:设a=4,b=5:任何非零的数值被认作“真70例:5>3&&8<4-!0

自左向右运算

1&&0逻辑值为08<3逻辑值为04-1值为3!0逻辑值为15>3逻辑值为1表达式值为0逻辑运算符和逻辑表达式例:5>3&&8<4-!01&&0逻辑值为08<3逻辑71在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。(1)a&&b&&c只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。(2)a||b||c只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c例:(m=a>b)&&(n=c>d)当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“a>b”的值为0,因此m=0,而“n=c>d”不被执行,因此n的值不是0而仍保持原值1。逻辑运算符和逻辑表达式在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。例:72逻辑运算符和逻辑表达式例3.12逻辑表达式的不完全计算

voidmain(){inta,b,c,d;a=0;b=1;c=a++&&b++;d=a++||b++;printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);}a=2,b=1,c=0,d=1逻辑运算符和逻辑表达式例3.12逻辑表达式的不完全计算a=73逻辑运算符和逻辑表达式逻辑运算符的应用:(1)表示成绩(grade)在90以上(含)和60分以下的情况:grade>=90||grade<60(2)表示x是大于0的偶数:

x>0&&(x%2==0)(3)判断闰年的条件是符合下列两种之一:①能被4整除,但不能被100整除;②能被400整除(year%4==0&&year%100!=0)||(year%400==0)(4)表示x是数字字符的情况x>='0'&&x<='9'(或x>=48&&x<=57)逻辑运算符和逻辑表达式逻辑运算符的应用:74课堂练习:1、已有定义语句,intx=3,y=4,z=5;则值为0的表达式是()

A)x>y++B)x<=++yC)x!=y+z>=y-zD)y%z>=y-z2、x为奇数时值为“真”,x为偶数时值为“假”,表达式是()

A)!(x%2==1)B)x%2==0C)x%2D)!(x%2)3、已有定义语句:intm=0,n=1;执行表达式(m=5<3)&&(n=7>9)后,n的值是()

A)1B)2C)3D)44、已有定义语句:intm=0,n=3;执行表达式(m=5>3)||(n=7<9)后,n的值是()

A)1B)2C)3D)4课堂练习:1、已有定义语句,intx=3,y=4,z=5;75课堂练习5.能正确表示数学关系式100≤s<300的表达式为()。(A)(s>=100)&(s<300) (B)100<=s<300(C)(s>=100)&&(s<300) (D)(s>=100)and(s<300)6.若定义inta=2,b=3;则表达式!a||b的值为()。(A)0 (B)1 (C)2 (D)37.设整型变量x为7,使整型变量y不为2的表达式是()。(A)y=x%3 (B)y=x/3(C)y=(++x)/3 (D)y=8-(--x)课堂练习5.能正确表示数学关系式100≤s<300的表达式763.5.7条件运算符和条件表达式C语言提供了一个简单的条件赋值语句或条件表达式。一般形式

表达式1?表达式2:表达式3功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。条件运算符的优先级高于赋值运算符,但低于关系运算符和逻辑运算符。例如:

a=1;b=2; c=a<b?3:4;main(){inti=3,j=5,k;k=i<j?i++:j++;printf("i=%d,j=%d,k=%d\n",i,j,k);}i=4,j=5,k=33.5.7条件运算符和条件表达式C语言提供了一个简单的条件77条件运算符和条件表达式条件表达式

说明:条件表达式语句功能相当于一种条件语句,但不等价于一般if语句。表达式2、表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。

如:a>b?(a=100):(b=100)a>b?printf("%d",a):printf("%d",b)表达式2、表达式3的类型可以不同,此时条件表达式值取二者中较高的类型。如:x>y?1:1.5//若x>y,则值为1.0;若x<y,则值为1.5。条件运算符和条件表达式条件表达式78条件运算符和条件表达式例3.13输入两个数,输出其中较大的数#include"stdio.h"main(){floata,b,max;printf("pleaseinputtworealnumbers:");scanf("%f%f",&a,&b);max=(a>b)?a:b;printf("max=%f\n",max);}条件运算符和条件表达式例3.13输入两个数,输出其中较大的79条件运算符和条件表达式例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。程序:

#include<stdio.h>voidmain(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("%c\n",ch);}运行结果:输入:A输出:a条件运算符和条件表达式例:输入一个字符,判别它是否大写字母,80应用运算符和表达式应注意运算符功能运算符与运算对象的关系要求运算对象的个数要求运算对象的类型运算符的优先级运算的结合方向

运算结果的类型混合运算中的类型转换条件运算符和条件表达式应用运算符和表达式应注意条件运算符和条件表达式813.5.9位运算符概念

位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。C语言提供位运算的功能,与其他高级语言(如PASCAL)相比,具有很大的优越性。3.5.9位运算符概念82位运算符C语言提供的位运算符有:运算符含义运算符含义

&按位与~取反

|按位或<<左移∧按位异或>>右移(1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。(2)运算量只能是整型或字符型的数据,不能为实型数据。说明:位运算符C语言提供的位运算符有:运算符含义831、“按位与”运算符(&)按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。即:0&0=0,0&1=0,1&0=0,1&1=1例:3&5并不等于8,应该是按位与运算:注意:如果参加&运算的是负数(如-3&-5),则要以补码形式表示为二进制数,然后再按位进行“与”运算。3&5的值得1

00000011(3)&

00000101(5)

00000001(1)

1、“按位与”运算符(&)按位与是指:参加运算的两个数据,按84“按位与”运算符按位与运算有两个特点:和二进制位数0相与则该位被清零;和二进制位数1相与则该位保留原值不变。利用这两个特点,可以指定一个数的某一位(或某几位)置0,也可以检验一个数的某一位(或某几位)是否是1。例如:a=a&3;只保留a的右端两位二进制位数。又如:若a&4值为4,则变量a的右端第3位为1。按位与运算符“&”和逻辑与运算符“&&”不同,对于逻辑与运算符“&&”,只要两边运算数为非0,运算结果为1。例如41&&165的值是1。“按位与”运算符按位与运算有两个特点:和二进制位数0相与则该852、“按位或”运算符(|)两个相应的二进制位中只要有一个为1,该位的结果值为1。即0|0=0,0|1=1,1|0=1,1|1=1例:

060|017,将八进制数60与八进制数17进行按位或运算。

00110000|

0000111100111111

2、“按位或”运算符(|)两个相应的二进制位中只要有一个为186“按位或”运算符

0000000000101001 (十进制数41)|0000000010100101 (十进制数165)0000000010101101 (十进制数173)

利用按位或运算的特点,可以指定一个数的某一位(或某几位)置1,其它位保留原值不变。例如:a=a|3;把a的右端两位二进制位数置1,其它位保留原值不变。a=a|0xff;把a的低字节全置1,高字节保持原样。a=a|0xff00;把a的高字节全置1,低字节保持原样。“按位或”运算符000000000010873、“异或”运算符(∧)异或运算符∧也称XOR运算符。它的规则是:若参加运算的两个二进制位同号则结果为0(假)

异号则结果为1(真)即:0∧0=0,0∧1=1,1∧0=1,1∧1=0例:即:071∧052=023(八进制数)

00111001∧

00101010

00010011

3、“异或”运算符(∧)异或运算符∧也称XOR运算符。它的规88“异或”运算符例如:inta=41^165;则a的值为140,运算过程用二进制表示如下:0000000000101001 (十进制数41)^

0000000010100101 (十进制数165)0000000010001100 (十进制数140)按位异或运算可以把一个数的二进制位的某一位(或某几位)求反(0变1,1变0)。例如:a=a^3;将变量a的最右端的二位求反。“异或”运算符例如:inta=41^165;则a的值为1894、“取反”运算符(~)~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。例如,~025是对八进制数25(即二进制数00010101)按位求反。

0000000000010101(~)

1111111111101010

(八进制数177752)4、“取反”运算符(~)~是一个单目(元)运算符,用来对一个90“取反”运算符例如:inti=199;则:~i值为-200,这是因为: 十进199写成二进制:

0000000011000111 把它按位取反 1111111100111000,这个数是整型十进制数-200在内存的补码表示。111111100110111000000011001000“取反”运算符例如:inti=199;则:~i值为-2915、左移运算符(<<)左移运算符是用来将一个数的各二进制位全部左移若干位。例如:a=<<2

将a的二进制数左移2位,右补0。若a=15,即二进制数00001111,左移2位得00111100,(十进制数60)高位左移后溢出,舍弃。chara=5,b;b=a<<3;a的二进制值为00000101, 执行语句b=a<<3;之后b的值为00101000(十进制数40=5*2*2*2),运算后a的值并没有改变仍为5)。

每左移1位,相当于乘以2。若高位移出的部分包含有二进制位数1,则不能用左移代替乘以2。5、左移运算符(<<)左移运算符是用来将一个数的各二进制位全926、右移运算符(>>)右移运算符是a>>2表示将a的各二进制位右移2位,移到右端的低位被舍弃,右移时,对于正整数和无符号整数,高位(左端)补0;对于负数,高位(左端)补1(补码表示法最高位1表示负数)。例如:

chara=41,b; b=a>>3; 用二进制来表示,a的值为00101001(十进制数41)执行语句b=a>>3;之后b的值为00000101(十进制数5=41/2/2/2,注意是整数除),运算后a的值并没有改变仍为41)。右移时,每右移1位,相当于除以2(整数除)。6、右移运算符(>>)右移运算符是a>>2表示将a的各二进制937.位运算赋值运算符它们是:>>=,<<=,&=,|=,~=,^=。例如:a>>=2相当于a=a>>2,b|=c相当于b=b|c8.位运算优先关系 例如:语句a=10&5<<3; 执行后a的值为8。“<<”的优先级高于“&”,先进行位移运算。7.位运算赋值运算符943.5.10求字节数运算符sizeof是一个单目运算符,返回运算对象所占内存总空间的字节数。它的运算对象可以是变量、常量或数据类型。它有三种形式:sizeof(数据类型)sizeof(变量或常量)sizeof(变量或常量)通常用于确定数组或结构体长度,也用于动态分配内存空间,后面章节会学到。3.5.10求字节数运算符sizeof是一个单目运算符,返回95例3.15sizeof运算符的一个实例#include"stdio.h"main(){charch;floatf;printf("sizeof5.0=%d\n",sizeof5.0);printf("float=%d\n",sizeof(f));printf("int=%d\n",sizeof(int));printf("char=%d\n",sizeof(ch));printf("sizeof'c'=%d\n",sizeof('c'));}运行情况如下:sizeof5.0=8float=4int=2char=1sizeof'c'=2例3.15sizeof运算符的一个实例运行情况如下:96课堂练习1.intx,a;则语句x=(a=4,a*2);运行后,x、a的值依次为________。2.若已定义intx=3,y=10,z;语句z=x>=y;运行后z的值为________。3.若定义inta=-5,b=-8,c=-12;则表达式a>=b||b<c的值为()。4.inta,b;则表达式(a=2,b=5,a*2,++b,a+b)的值是________。5.intm=5,n=3;则表达式(m+1,n+1,(--m)+(n--))的值是________。课堂练习1.intx,a;则语句x=(a=4,97课堂练习6.若有定义:inta,b;doublex,则以下不符合C语言语法的表达式是()。(A)x%(-3)(B)a+=-2(C)a=b=2(D)x=a+b7.若有定义:intb=7;floata=2.5,c=4.7;则表达式a+(b/2*(int)(a+c)/2)%4的值是()。

(A)2.5(B)3.5(C)4.5(D)5.58.8.已定义charc='A';则正确的赋值表达式是()。(A)c=\028 (B)c=(c++)%4(C)c+1=66 (D)c+=127--课堂练习6.若有定义:inta,b;double98课堂练习9.定义:intx=4,y=2,z=0;则表达式(x-y<=y)||(y=z)的值是()。(A)1(B)0(C)2(D)410.下面叙述正确的是()。

(A)强制类型转换运算的优先级高于算术运算(B)若a和b是整型变量,(a+b)++是合法的(C)'A'*'B'是不合法的(D)"A"

温馨提示

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

评论

0/150

提交评论