C语言课件第03章

PPT
  • 阅读 68 次
  • 下载 0 次
  • 页数 60 页
  • 大小 259.082 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
C语言课件第03章
可在后台配置第一页与第二页中间广告代码
C语言课件第03章
可在后台配置第二页与第三页中间广告代码
C语言课件第03章
可在后台配置第三页与第四页中间广告代码
C语言课件第03章
C语言课件第03章
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 60
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】C语言课件第03章.ppt,共(60)页,259.082 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44585.html

以下为本文档部分文字说明:

退出第3章运算符和表达式3.1表达式3.2运算符及表达式3.3运算符优先级和结合性3.1表达式C语言的表达式分为基本表达式和复杂表达式。基本表达式是由以下单项构成的,即:标识符、常量、字符串字面量和用圆括号括起来的表达式。将基本表

达式通过运算符连接在一起,就构成复杂表达式。例如:2+8,a+b,(x-y)/a等。由表达式还可组成更大的表达式。例如:x=(a+b)%103.2运算符及表达式运算符是在一个数学运算中表示相应运算动作的一种符号。运算符所作用的对象称作运算分量。3.2.1算术运算符和算术表达

式在C语言中,基本算术运算符有5个,它们是:+(加)-(减)*(乘)/(除)%(取模)算术运算符和运算分量组成的求值序列称作算术表达式。要注意运算符“/”和“%”的区别。运算符“/”可以作用于算术类型。运算符“%”却只能作用于整型量。a/b表示两个整数进行整除,其结果是舍弃

余数后所得到的商值。是取整数除法的余数,而不管商的值是多少。例3-1:算术运算符应用示例。/*arithmeticpractice*/#include<stdio.h>voidmain(){inta=99;intb

=5;intc=11;intd=3;intresult;result=a-b;printf("a-b=%d\n",result);result=b*c;printf("b*c=%d\n",result)

;result=a/b;printf("a/b=%d\n",result);result=a%b;printf("a%%b=%d\n",result);result=a%d+b/c;printf("a%%d+b/c=%d\n",result);}输出结果是:a-b=94b*c=55

a/b=19a%b=4a%d+b/c=0例3-2:计算有多个算术运算符的算术表达式。#include<stdio.h>voidmain(){intx,a=3;floaty;x=20+25/5*2;printf("(1)x=%d\n",x);x=25/2*2;

printf("(2)x=%d\n",x);x=-a+4*5-6;printf("(3)x=%d\n",x);x=a+4%5-6;printf("(4)x=%d\n",x);x=-3*4%-6/5;printf("(

5)x=%d\n",x);x=(7+6)%5/2;printf("(6)x=%d\n",x);y=25.0/2.0*2.0;printf("(7)y=%f\n",y);}输出结果是:(1)x=30(2)x=24(3)x=11(4)x=1(5)x=0(6)x=1(7)

y=25.0000003.2.2赋值运算符和赋值表达式赋值运算符“=”,其简单的使用形式是:变量=表达式这种形式的整个表达式称作赋值表达式。在使用赋值表达式时应注意以下几点:①在赋值运算符左边的量(通常称为左值)必须是变量,不能是常量或用上述运算符结合起来的表达式。inta,b;a=b;b=8;

是正确的赋值形式;6=a;a+b=14;等形式都是不对的。②赋值运算可连续进行。例如,a=b=c=0a=(b=(c=0))③赋值运算符的优先级比上述运算符的优先级都低。a=(b=9)*(c=7)④赋值表达式的值等于右边表达式的值,而结果的类型由

左边变量的类型决定。⑤除了上述基本的赋值运算符之外,C语言中还提供了另外10个赋值运算符,它们是:+=-=*=/=%=>>=<<=&=|=^=这些运算符是把“运算”和“赋值”两个动作结合在一起,往往把它们称为复合赋值运算符。x+=2其等效形式是:x=x+2。表达式x*=y+5的等

效形式是:x=x*(y+5)。而表达式x%=y-10的等效形式是:x=x%(y-10)复合赋值运算符右边的表达式应作为一个整体对待。3.2.3增量运算符和增量表达式自增运算符“++”和自减运算符“――”。它们都是单目运算符。当出现在运算分量的前面时,例如++i、――i,就称之为前缀运算符;当出现

在运算分量的后面时,例如x++、y――,就称之为后缀运算符。由增量运算符和运算分量构成的表达式称为增量表达式。1.自增运算符++n这个表达式执行后,n的值增1。还可采用“后缀加”的形式:n++但必须指出,并非在任何情况下二者都等价。例3-3:显示前缀加和后缀加的区别。#inclu

de<stdio.h>voidmain(){inta,b,c;a=9;b=++a;printf("(1)a=%d***b=%d\n",a,b);a=9;c=a++;printf("(2)a=%d***c=%d\n",a,c);}运行后输出的结果是:(1)a=10***b=10(2)

a=10***c=9执行b=++a,这条语句等价于下述两条语句:c=a+1;b=a;而改为后缀加形式,即:c=a++,这条语句等价于下述两条语句:c=a;a=a+1;简而言之,在表达式中出现前缀加的情况下,前缀加所作用的运算分量值先增1,然后进行其他

级别较低的运算;而在表达式中出现后缀加的情况下,先以其运算分量的当前值参与其他级别较低的运算,最后该运算分量值才增1。例3-4:复合赋值符和自增运算符“++”的应用。Voidmain(){intx=2,y,z;x*=3+2;printf("

(1)x=%d\n",x);x*=y=z=4;printf("(2)x=%d\n",x);x=y=1;z=x++-1;printf("(3)x=%d***z=%d\n",x,z);z=x++*++y;printf("(4)x=%d***y=%d***z=%d\n",x,y,z);}输出结果是:

(1)x=10(2)x=40(3)x=2***z=0(4)x=3***y=2***z=42.自减运算符“――n”就等价于:n=n-1它也分前缀减和后缀减两种形式。m=--n;等价于:n=n-1;m=n;而m=n--;却等价于:m=n;n=n-1;在使用增量运算符时,还应注意以下几点:①增量运算符

有副作用。就是说,增量运算符作用于运算分量时,如“++a”,不仅可以向外提供一个值,而且还改变运算分量自身的值。例如:x=++i+i或者x=i+(++i)②“++”和“――”是单个运算符,不是通常意义上的两个“加”号或者两个“减”号。③x=i+++j;是理解成(i++)+j

,还是i+(++j)呢?C语言词法分析遵循“最长匹配”原则,即:如果在两个运算分量之间连续出现多个表示运算符的字符(中间没有空格),那么,在保证有意义的条件下,就从左到右尽可能多地将若干个字符组成一个运算符。所以,表达式就解释为(i++)+j,而

不是i+(++j)。建议读者在录入程序时,在各个运算符之间加入空格,或者使用圆括号,把有关部分括起来,使之作为整体处理。④“++”和“――”只能作用在变量上,如“a++”,“――n”等,而不能用于常量和一般表达式(不是左值

的表达式)。另外,增量运算符与运算分量结合在一起构成的表达式带有自身赋值含义,但这种表达式不是左值,不能直接出现在赋值号左边。3.2.4关系运算符和关系表达式C语言有完整的一组关系运算符,用于比较两个运算分量间的大小关系。这组运算

符有6个,即:>>=<<===!=用关系运算符将两个运算分量连在一起构成的表达式称作关系表达式。根据运算符所作用的两个运算分量之间的指定关系是否成立,分别得到关系表达式的“真”、“假”结果。在C语言中

,没有表示“真”、“假”的逻辑量TRUE(真)和FALSE(假),就借用数值来表示。以数值0表示“假”,以非0值表示“真”。对于关系表达式来说,结果的真、假分别用1和0表示。关系运算只判定两个运算分量是否满足指定的关系,而不理睬二者具体数值相差多少。应注意,赋值号“=”与全等比较运算符“==”

的区别。关系运算符的优先级低于算术运算符。a+b<c+d应理解为:(a+b)<(c+d)前4个关系运算符的优先级相同,后两个相等比较运算符的优先级也相同。但前者的优先级恰好比后者高一级。例3-4:分析下面程序的运算结果。1voidmain(

)2{3inta,b,c;4a=b=c=10;5a=b==c;6printf("a=%d,b=%d,c=%d\n",a,b,c);7a==(b=c++*2);8printf("a=%d,b=%d,c=%d\n",a,b,c);9a=

b>c>=100;10printf("a=%d,b=%d,c=%d\n",a,b,c);11}上述程序运行之后的输出结果是:a=1,b=10,c=10a=1,b=20,c=11a=0,b=20,c=113.2.5条件运算符和条

件表达式C语言中提供的条件运算符“?:”是惟一的三目运算符。由条件运算符组成的表达式简称为条件表达式,或三目表达式。其一般构成形式是:表达式1?表达式2:表达式3决定条件表达式值的方法是:先计算表达式1的值;若该值不

为0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的值;否则,就计算表达式3的值,并将该值作为整个条件表达式的值。例如,要求出x和y中最大的一个,并赋予变量max。max=(x>y)?x:y;使用条件运算符时,还要注意以下几点:①条件运算符的优

先级稍高于赋值运算符,但比其他运算符的优先级都低。②三个运算分量不限于简单的算术表达式,甚至可以是函数调用。③分析条件表达式时,关键是先找出“?”和“:”,把三个运算分量区分开,然后按一般方法进行计算。例3-5:分析下面程

序运行的结果。1voidmain()2{3inta,b,c;4a=b=c=1;5a+=b;6b+=c;7c+=a;8printf("(1)%d\n",a>b?a:b);9printf("(2)%d\n",a>c?a--:c++);10

(a>=b>=c)?printf("AA"):printf("CC");11printf("\na=%d,b=%d,c=%d\n",a,b,c);12}3.2.6逗号运算符和逗号表达式在C语言中,逗号

的用途主要有两种:一是作为分隔符,二是作为运算符。(1)逗号分隔符用来分开相应的多个数据。inta,b,c;printf("A=%d\tB=%d\n",a,b);(2)逗号运算符逗号作为运算符时,是把两个运算分量“连接”起来,使之构成一个逗号表达式。逗号表达式的一般

形式是:表达式1,表达式2它的执行过程是:先计算表达式1,然后计算表达式2。整个逗号表达式的值是表达式2的值。逗号表达式的扩展形式是:表达式1,表达式2,…表达式n各个表达式必须从左到右顺序执行,而整个逗号表达式的值是其中最右边表达式的值。x

=(i=10,j=5,i*j)逗号运算符在所有运算符中是级别最低的。3.2.7逻辑运算符和逻辑表达式C语言中逻辑运算符有3个,它们是:!逻辑非(相当于其他语言中的NOT)&&逻辑与(相当于其他语言中的AND)||逻辑或(相当于其他语言中的OR)其中,“!”是单目运算符,

而&&和||是双目运算符。由逻辑运算符和运算分量构成的表达式称为逻辑表达式。(1)逻辑非运算符!作用在单个运算分量上,其结果是运算分量逻辑值的“反”。(2)逻辑与运算符&&作用在前后两个运算分量上,其结

果是:仅当两个运算分量同时为真时,结果才为真;否则,只要其中有一个为假,结果就为假。(3)逻辑或运算符||作用在前后两个运算分量上,其结果是:只要其中有一个运算分量为真,结果就为真;仅当二者同时为假时,结果才为假。这三个逻辑运算符的优先级是:!的优先级高于&&的优先级,&&的优先

级又高于||的优先级。例3-7:判断给定的某一年是否是闰年。什么是闰年呢?如果某年号能被4整除而不能被100整除,或者能被400整除,那么这年就是闰年;否则就是平年。下面的程序对用户输入的年号判别是否

是闰年。1/*determingifayearisaleapyear*/2#include<stdio.h>34Voidmain()5{6intyear,leap;7printf("Inputyouryear.\n");8scanf("%d",&year);9lea

p=year%4==0&&year%100!=0||year%400==0;10if(leap)11printf("%disaleapyear.\n",year);12else13printf("%disno

taleapyear.\n",year);14}在使用逻辑运算符时应注意以下几点:①用逻辑运算符把运算分量连接起来就构成逻辑表达式。其运算分量可以是关系表达式、算术表达式等,甚至还可以是逻辑表达式。②!的优先级高于算术运算符的优先级。运算符!的结合性是从右到左,而&&和||的结合性是从左到

右。③逻辑表达式的值只有两个:0和1。以0代表逻辑结果为假;以1代表逻辑结果为真。④运算符&&和||保证左边的运算分量优先得到计算。就是说,由&&和||构成的逻辑表达式严格地从左到右进行计算,并且一旦根据左分量的值就能确定整个逻辑表达式的值

时,就不再执行后面的运算。例如,x=y=z=1;++x||++y&&++z;执行之后,x、y和z的值分别是2,1,1。3.2.8位逻辑运算符和位逻辑表达式1.二进制只用0和1两个数字来表示所有的数。二进制数的基本规则是“逢二进一”。2.八进制和十六进制八进制数是以8为基底的数,用到的数字

是0,1,2,…,7,一共8个。它的基本进位规则是“逢八进一”。八进制整常数是以数字0开头的八进制数字串。二进制数与八进制数之间很容易进行转换。对于一个二进制数来说,从右向左每三个数字为一组分开,把每组二进制数转为八进制数表示。将八进制数转换成二

进制数时,只要将每位八进制数字用三位二进制数表示,串起来就是相应的二进制数。十六进制数是以十六为基底的数,它由数字0,1,2,…,9和字母A,B,C,D,E,F(或者a,b,c,d,e,f)来表示。其基本进位规则是“逢十六进一”。在C语言中,十六进制整常数是以0x或0X开头的十六进制数字串,例

如0x12、0X5a8。二进制与十六进制的转换也很容易:对于一个二进制数来说,从右向左每四个数字为一组,把每组二进制数用十六进制数字表示。把十六进制数的每一位数字用四位二进制数表示,串起来就是相应的二进制数。3.原码、反码和补码在计算机内表示数值

的方法是不同的,一般有:原码、反码和补码。(1)原码通常,整数用一个字长表示。一般用最左边的一位(称作最高位)表示数的符号:以0代表正,1代表负。二进制数的原码表示形式是:最高位用于符号位,其余各位是数值的绝对值。(2)反码正数的反码与原码相同。负数的反码是:原码除符号位外(仍为1),各位

取反。(3)补码正数的补码与原码相同。除最高位仍为1外,原码的其余各位求反,最后再加14.位逻辑运算符和位逻辑表达式在C语言中,位逻辑运算符有以下4个:&(按位与)|(按位或)~(按位反)^(按位异或)它们都是按二进制一位一位地进行运算,相邻位之间不发生联系,即没有“进位”、“借位

”等问题,所以称为位逻辑运算符。各个位逻辑运算符的优先级关系是:~最高,其余3个运算符的优先级从高到低依次是&、^、|,但三者都高于逻辑运算符而低于关系运算符。由位逻辑运算符和运算分量构成的表达式称作位逻辑表达式。位逻辑运算符与逻辑运算符之间的区

别:①位逻辑运算符是针对二进制位的,而逻辑运算符是针对整个表达式的;位逻辑运算符要计算表达式的具体数值,而逻辑运算符只判别表达式的真与假。②位逻辑运算符&、|和^的两个运算分量是可交换的;而逻辑运算符&&和||的两

个运算分量都是不可交换的,并且它们严格从左到右运算。3.2.9移位运算符和移位表达式C语言中实现移位功能的运算符有两个:<<(左移)和>>(右移)。它们都是双目运算符,并且要求两个运算分量都是整型量。由移位运算符和运算分量构成的表达式称作移位表达式。(1)左移运算符<<它的一般使

用形式是:表达式1<<表达式2它的功能是:把表达式1的值(以二进制形式表示)向左移动n位,n值由表达式2确定,并且表达式2的值必须是正整数。例如,a=00001011,那么,移位表达式a<<3的结果是01011000,即:把a的各二进位全部向左移3位,右边空出的位补0,而左边溢

出的位被丢弃不管。(2)右移运算符>>它的一般使用形式是:表达式1>>表达式2它的功能是:把表达式1的值(以二进制形式表示)向右移n位,n的值由表达式2确定(该值必须是正整数)例如,a=00001011,那么,移

位表达式a>>3的结果是00000001,即:把a的各二进位全都向右移3位,右边溢出的位被丢弃,而左边空出的位(在本例情况下)补0。在右移时,要注意符号位问题。3.2.10其他运算符(1)&和*单目运算符&用来取出其运算分量的

地址,例如,inta,*p;p=&a;“*”也是单目运算符,它是“&”的逆运算。它把运算分量(应是指针量)所指向的内存单元中的内容取出来。例如,b=*p;(2)强制类型运算符()一般使用形式是:(类型名)表达式它把表达式的类型强制转换成圆括号中“类型名”所指定的类型。(doub

le)a这是类型的临时转换方法。(3)sizeof单目运算符sizeof用来计算某种类型的变量或某种数据类型在计算机内部表示时所占用的字节数。例如:sizeof(int)(4)单目加“+”和单目减“-”运算符单目加“+”运算的结果仍是其运算分量的值负号(―)的

运算结果是其运算分量的负值(5)基本运算符[]()->·其中,[]用于数组下标的表示,()用于标识函数,“->”和“”用于存取结构或联合中的成员。它们的优先级在所有运算符中是最高的。3.3运算符优先级和结合性①所有运算符的优先级共分为15级。基本运算符的优先级最高(为15

),逗号运算符的优先级最低(为1)。②当不同类型的运算符出现在一个表达式中,那么在计算该表达式的值时,应先执行优先级高的运算,再依次执行优先级低的运算。x|y&b+c该表达式就等价于:x|(y&(b+c))③表中同一行上的运算符有相同的

优先级。如果它们出现在同一个表达式中,则按结合性的顺序进行计算。a%b*c等价于:(a%b)*c④在分析C源程序或者编写C程序时,要注意运算符的作用和其运算分量的个数。3.3.2运算符嵌套leap=year%4==0&&year%100!=0||year%400==03.3.3表达式计算顺序

在很多情况下,C语言中表达式的计算顺序是不确定的。应注意以下几点:①掌握C语言中对各个运算符的优先级和结合性的规定。特别要注意区分具有同样外形而语义不同的运算符(如+、-、*、&等)。②C语言中有5个运算符保证计算顺序严格从

左到右进行,它们是:&&、||、?:、,和函数调用运算符()。③在一个表达式中出现多个有不同优先级的运算符时,可以通过加圆括号的方式改变运算顺序,例如:(a+b)*(c/d)④为了强调某部分是作为一个“整体

”参与运算,可以引用“中间变量”,把“整体”的值赋给这个变量,然后由这个变量参与有关运算。例如:t=a+b;x=t*c;例3-8:分析下面程序运行的结果。#include<stdio.h>voidmain(){intx,y=1,z;x=((9+6)%5>=9%5+6%5)?1:0;pri

ntf("x=%d\n",x);y+=z=x+3;printf("y=%d\tz=%d\n",y,z);x=y=z=1;――x&&++y||z++;printf("x=%d\ty=%d\tz=%d\n",x,y,z);}运行结果如下:x=0y=4z=3

x=0y=1z=2

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?