ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:50.06KB ,
资源ID:12904266      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12904266.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言教材C语言教材第3章.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言教材C语言教材第3章.docx

1、C语言教材 C语言教材 第3章第3章 运算符与表达式本章要点 了解运算符及其表达式的概念,熟练掌握各种运算符的运算规则。重点掌握各种运算符的优先级和结合性。本章的难点在于自增自减运算符的正确运用。第一节 算术运算符与算术表达式C语言中基本的算术运算符有:(1)+:加法运算符,用于计算任意两个数的和。如:3+2,结果为5;(2)-:减法运算符,用于计算任意两个数的差。如:3.5-2,结果为1.500000;(3)*:乘法运算符,用于计算任意两个数的乘积。如:4*3,结果为12;(4)/:除法运算符,用于计算任意两个数的商。如:3.6/3,结果为1.200000;(5)%:模运算符(求余运算符),

2、用于求余数。如:13%4,结果为1。这几个运算符要求运算符两边都有数据,即运算对象为两个,所以称为双目算术运算符。关于算术运算符的几点说明:(1)用算术运算符和括号将运算对象连接起来的、符合C语言语法规则的式子称为算术表达式。运算对象可以是变量、常量、函数等。算术表达式中运算符的结合方向为“从左至右”;*,/,%运算的优先级高于+,-运算,可以使用圆括号改变优先级别。如:表达式3+4*3/2-1,按照从左至右的顺序,先计算优先级别较高的*、/运算,4*3,结果为12,12/2,结果为6,6和左边的3进行加法运算,得到结果9,最后计算9-1,结果为8。(2)对于除法运算“/”,如果运算符两边的运

3、算对象都是整数,则运算结果也是整数。如:5/2的结果为2,而不是2.5,小数部分被舍去了。(3)对于模运算符“%”,要求其左右两边的运算对象都为整数,结果也为整数,即只有整数才能进行求余运算;(4)“+,-”运算符有时作为正值运算符(+)和负值运算符(-),此时“+、-”变为单目运算符。如:+3,-6。 例3.1 算术运算符和算术表达式#includevoid main() int a=3,b=4; printf(a+b/4%2-2.5=%fn,a+b/4%2-2.5); /* 从左至右,按照优先级别运算 */ printf(4*a/b=%d,a/b*4=%dn,4*a/b,a/b*4); /

4、* 两个表达式结果不同,不满足数学中的交换律 */ printf(9/4=%d,-9/4=%d,9/4,-9/4); /* 两个整数做除法运算,所得结果也是整数*/程序运行结果:a+b/4%2-2.5=1.5000004*a/b=3,a/b*4=09/4=2,-9/4=-2第二节 关系运算符与关系表达式关系运算符相当于数学中的比较运算符,用于将两个值进行比较,判断比较的结果是否符合给定的条件。如a5表示将a的值和5进行比较,判断a的值大于5是否成立。当a的值为8时,a的值大于5是成立的,该关系运算的结果为“真”,即符合给定的条件;当a的值为3时,a的值大于5是不成立的,该关系运算的结果为“假”

5、,不符合给定的条件。C语言中提供了6种关系运算符:(1) 大于(2)= 大于或等于(3) 小于(4)3的值为“真”,即表达式的值为1; 3=0的值为“假”,即表达式的值为0。例3.2 关系运算符的应用及关系表达式的值。#includevoid main() int a=3,b=4; printf(%d,%dt,a+b=7,a+(b=7); /* 优先级别低于算术运算符 */ printf(%dt,3=3b); /* “=”优先级别低于”a1); /* 先计算ba,值为1,再比较11,值为0 */程序运行结果:1,3 0 0第三节 逻辑运算符与逻辑表达式逻辑运算通常用来判断一个或多个条件的真假值

6、。通过逻辑运算符连接多个条件,可以判别某一个给定的复合条件是否成立。C语言提供了3种逻辑运算符:(1)逻辑与“&”:当且仅当两个运算对象的值都为“真”时,运算结果为“真”,否则为“假”;逻辑与相当于“并且”。例如,a是一个能同时被2和5整除的数,a必须要满足的条件为,a能被2整除并且能被5整除。仅当两个条件都成立时,才能满足给定的条件。用C的表达式表示出来就是“a%2=0&a%5=0”,当这个表达式值为“真”时,就表示a是一个能同时被2和5整除的数,否则数a就不是一个能同时被2和5整除的数。(2)逻辑或“|”:当且仅当两个运算对象值都为“假”时,运算结果为“假”,否则运算结果为“真”;逻辑或相

7、当于“或者”。例如,b是一个绝对值不为0的数,只需要满足b0之中任意一个条件。只要两个条件中的其中一个成立就符合给定的条件。用C的表达式表示出来就是b0,当这个表达式值为“真”时,b就是一个绝对值不为0的数。(3)逻辑非“!”:属于单目运算符,当运算对象值为“真”时,运算结果为“假”,当运算对象的值为“假”时,运算结果为“真”。三种逻辑运算符运算的优先次序为: (1)逻辑运算符的优先级别由高到低为:!,&,|,即优先级别最高的为逻辑非(!)。(2)逻辑运算符中的“!”优先级别高于算术运算符,而“&”和“|”优先级别低于关系运算符。例如:x3&y5与(x3)&(y5)等价x3|x3)|(x3 与

8、 (!a)+b)&(a3)等价逻辑表达式是指用逻辑运算符将一个或多个表达式连接起来的式子,常用来表示多个条件的组合。例如,要判断某一年是否闰年,需要符合下列条件之一: 能被4整除,但不能被100整除 能被400整除如果用year表示某一年份,则判断year是否闰年的组合条件可表示为:(year%4=0&year%100!=0)|year%400=0也可表示为(year%4=0&!(year%100=0)|year%400=0当表达式值为“真”时,year为闰年,否则为非闰年。与关系表达式一样,逻辑表达式的值也是一个逻辑量,“真”或“假”。如前所述,C语言中用1代表“真”,用0代表“假”。因此,

9、逻辑表达式的值要么为1,要么为0。需要注意的是,在将一个量作为逻辑量来判断真假时,以0代表“假”,以非0代表“真”。也就是说,在C语言中,只要是一个非0的数,都作为“真”来处理。数据的逻辑运算真值表如表3-1所示。表3-1 逻辑运算真值表ab!a!ba&ba|b非0非00011非0001010非01001001100例3.3 逻辑运算符及其表达式的值。#includevoid main() int a=3,b=0; float x=3.5,y=0.0; char c=a; printf(%d,a&b); /* 非0判断为“真”,0判断为“假”*/ printf(%d,x&y); /* 浮点数也

10、可作为逻辑运算的运算对象 */ printf(%dn,c|n); /* 字符型作为运算对象时,以ASCII码值判别真假*/程序运行结果:0,0,1关于逻辑运算符的几点说明:(1)逻辑运算符的运算对象,可以是0或非0的整数,也可以是其他任何类型的数据,如实型、字符型等,系统最终按照“0”和“非0”来判定其“真”或“假”。例如:a&b 值为1。对于字符型数据,系统按照它们的ASCII码值来处理,a的ASCII码值为97,b的ASCII码值为98,都为非0,系统按照“真”来处理,表达式的值为1。(2)在求解逻辑表达式的过程中,只是在必须执行下一个逻辑运算符才能求出表达式的结果时,才执行该运算符,而不

11、是所有的逻辑运算符都被执行。如: 对于逻辑与运算,如果第一个运算对象被判定为“假”,则无论第二个运算对象是“真”或“假”都不会影响表达式的结果。因此,系统将不再判定或求解第二个运算对象。例如:a&b&c当a为“假”时,表达式值为“假”,系统不再判断求解b和c,只有当a为“真”时,才判断b,只有当a和b都为“真”时,才需要判断求解c。如图3-1所示。 对于逻辑或运算,如果第一个运算对象为“真”,则无论第二个运算对象是“真”或“假”,表达式的值都为真。因此,系统将不再判定或求解第二个运算对象。例如:a|b|c当a为“真”时,表达式值为“真”,系统不再判断求解b和c,只有当a为“假”时,才判断b,只

12、有当a和b都为“假”时,才需要判断求解c。如图3-2所示。例3.4 逻辑运算符的运算规则。 #includevoid main() int a=1,b=2,c=3,d=0; int m=2,n=2; int x=2,y=2; (m=ab)&(n=cd); /* n=cd没有被执行 */ (x=ab)|(y=cd); /* y=cd没有被执行 */ printf(m=%d,n=%d,m,n); printf(x=%d,y=%dn,x,y); 程序运行结果:m=0,n=2,x=1,y=2第四节 赋值运算符与赋值表达式一、赋值运算符及其表达式程序中的变量在使用之前必须要有一个确定的值,而这个确定的值

13、就需要通过赋值运算来赋予变量。因此,赋值操作是程序中一个最基本的操作。C语言中,将等于号“=”作为赋值运算符。用赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。其一般格式为:变量名=表达式;其作用是将“=”右边表达式的值赋给左边的变量。表达式可以是常量表达式,也可以是其它表达式(还可以是另一个赋值表达式)。如:a=5; /* 把常量5赋给变量a */b=a+5; /* 把表达式a+5的值赋给变量b */a=b=10; /* 先把常量10赋给变量b,再把变量b的值赋给变量a */在使用赋值运算符的过程中应注意以下几点:(1)在C语言中,赋值运算符的优先级别只高于逗号运算符,而低

14、于其他任何运算符。其结合方向为右结合方向。如表达式a=b=2+3执行的顺序是从右到左,按照运算符的优先级别,先计算2+3的值,得到5,然后执行b=5,把数值5赋给变量b,最后执行a=b,把变量b的值赋给变量a,执行完毕后变量a的值为5。(2)赋值运算符左侧的标识符称为“左值”。左值可以是变量,但不能是常量或表达式,因为常量和表达式不能够被赋值。如“a+b=8”“10=a”都是不合法的赋值表达式。出现在赋值运算符右侧的表达式称为“右值”。在赋值表达式中,凡是左值都可以出现在赋值运算符的右端成为右值。(3)赋值表达式的值就是赋值表达式左边变量所得到的值。如表达式a=3,执行后变量a的值为3,变量a

15、的值作为整个表达式的值,表达式的值为3。(4)需要特别注意赋值运算符“=”与关系运算符“=”的区别。“=”是赋值运算符,只是将其右边表达式的值赋予左边的变量,而不表示左右两边的值相等。“=”是关系运算符中的“等于”,表示判断其左右两边运算对象的值是否相等。例如,有定义:int a=3;则:表达式a=4是一个赋值表达式,执行后a的值变为4,表达式的值为4;表达式a=4则是一个关系表达式,执行后a的值未被改变,还是3,表达式所做的操作是将变量a的值与常量4进行比较,判断值是否相等,执行后表达式的值为0。二、数据类型转换如前面第2章所述,在赋值运算中可能会发生数据类型转换。在赋值表达式中,当赋值运算

16、符左右两端的运算对象数据类型不一致时,就会发生隐式数据类型转换,系统会将右边运算对象值的类型强制转换为左边运算对象的类型,再把它赋给左边的变量。例如:执行“ int a=3.14”,变量a定义为整型,而赋值表达式右值是一个实数,表达式执行时先把3.14强制转换为整数3,再赋给变量a。赋值后,变量a的值为3。需要说明的是,在赋值运算中发生的数据类型转换可能会使所赋的值产生较大误差。因此,在程序中应尽量避免不同数据类型的赋值。三、复合赋值运算符为了简化程序,提高编译的效率,C语言中允许在赋值运算符“=”之前加上其他的双目运算符,构成复合的赋值运算符。例如:在“=”前面加上一个“+”就构成了一个复合

17、赋值运算符“+=”。可以使用表达式“a+=5”对变量a进行赋值,相当于表达式“a=a+5”,也就是每执行一次表达式“a+=5”,变量a的值就在原来的基础上加上5。如果变量a原来的值为3,则执行该表达式后,变量a的值变为8。同样的,赋值运算符“=”也可以和其他双目运算符一起构成其他的复合赋值运算符。例如:a-=8,相当于a=a-8;a*=3,相当于a=a*3;a/=2,相当于a=a/2;a%=2,相当于a=a%2。凡是双目运算符,都可以与赋值运算符一起组合成复合赋值运算符。C语言中可以使用的复合赋值运算符有10种,如表3-2所示。表3-2 C语言中的复合赋值运算符复合赋值运算符名称运算规则+=加

18、赋值a+=b相当于a=a+b-=减赋值a-=b相当于a=a-b*=乘赋值a*=b相当于a=a*b/=除赋值a/=b相当于a=a/b%=求余赋值a%=b相当于a=a%b=左移位赋值a=b相当于a=a=右移位赋值a=b相当于a=ab&=按位与赋值a&=b相当于a=a&b=按位异或赋值a=b相当于a=ab|=按位或赋值a|=b相当于a=a|b表中后5种复合赋值运算符涉及到位运算,将在本章第七节中详细介绍。复合赋值运算符的结合方向同样是从右至左。例3.5 复合赋值运算符的结合方向。#includevoid main() int a=3; a+=a-=a*a; printf(%dn,a);程序运行结果:

19、-12对于表达式a+=a-=a*a;按照赋值运算符的右结合性,先执行a-=a*a,即a=a-a*a=3-9=-6,再执行a+=a,此时a的值已经更新为-6,a+=a相当于a=a+a=-6+(-6)= -12,最终a的值为-12。第五节 逗号运算符与逗号表达式逗号运算符又称为“顺序求值运算符”,是C语言提供的一种特殊的运算符。通过逗号运算符,可以将两个或多个表达式连接起来,构成逗号表达式。逗号表达式的一般形式为:表达式1,表达式2其求解过程:先求解表达式1,再求解表达式2。表达式2的值作为整个逗号表达式的值。例如:2+3,4+5 先求解2+3,值为5,再求解4+5,值为9,9作为整个逗号表达式的

20、值;a=4,a=8 先求解a=4,再求解a=8,执行完毕后a的值为8,整个表达式的值为8;a=2*4,a+4 先求解a=2*4,得到a=8,再求解a+4,a+4的值为12,执行完毕后,a的值为8,但整个表达式的值为12(注意:表达式2“a+4”并没有赋值操作,a的值没有被改变,但是表达式的值作为整个逗号表达式的结果)。逗号运算符不仅能够连接两个表达式,还能够连接多个表达式,其一般形式为:表达式1,表达式2,表达式3,表达式n求解过程也是顺序求解,先求解表达式1,再求解表达式2、表达式3表达式n,表达式n的值作为整个逗号表达式的值。逗号运算符是C语言所有运算符中优先级别最低的。如果要将一个逗号表

21、达式的值赋给某个变量,则需要将逗号表达式加上括号。例如:b=(a=2,a+4) 表示将逗号表达式“a=2,a+4”的值赋给变量b,执行完毕后,变量a的值为2,变量b的值为6,表达式是一个赋值表达式,值为6;如果写成b=a=2,a+4,则表达式为一个逗号表达式,执行完毕后,变量a和变量b的值都为2,表达式2“a+4”的值为6,整个逗号表达式的值为6。在C语言中,逗号并不仅仅只作为逗号运算符来使用,通常还被用作分隔符来使用。也就是说,并不是任何地方出现的逗号都是逗号运算符。例如:int a,b,c;printf(“%d,%d,%d”,a,b,c);以上两个语句中的“a,b,c”中的逗号都不是逗号运

22、算符,而是作为分隔符。前一个语句表示定义了3个整型变量,3个变量之间用逗号作为分隔符;后一个语句中,a、b、c作为函数printf的3个参数,它们之间的逗号作为函数参数之间的分隔符。例3.6 逗号运算符与分隔符。#includevoid main() int a=3,b=4,c=5; printf(%d,%d,%dn,a,b,c); /* a,b,c”中的逗号作为函数参数的分隔符 */ printf(%dn,(a,b,c); /* “a,b,c”中的逗号作为逗号运算符 */程序运行结果:3,4,5 5第六节 条件运算符与条件表达式在某些情形下,我们对某一个给定的条件进行判断,希望系统根据判断的

23、结果自行选择条件为真或为假时的结果。例如:要判断一个整数n是奇数还是偶数,判断条件为n是否能被2整除,如果n被2整除为“真”则选择偶数,否则选择奇数。C语言为这样的选择运算提供了专门的运算符,即条件运算符“? :”。条件运算符是一个三目运算符,要求有三个运算对象。条件表达式的一般形式为:表达式1?表达式2:表达式3它的执行顺序如图3-3所示: 求解表达式1,并对表达式1进行逻辑判断; 如果表达式1值为“真”,则求解表达式2,表达式2的值作为整个条件表达式的值;如果表达式1的值为“假”,则求解表达式3,表达式3的值作为整个条件表达式的值。说明:(1)条件运算符优先级别高于赋值运算符,低于算术运算

24、符和关系运算符。常常把条件运算符应用于当表达式1的值无论是“真”或“假”时,都对同一个变量进行赋值的情形。例如:max=ab?a:b该表达式中,优先级别最低的是赋值运算符“=”,优先级别最高的是关系运算符“”。执行过程先求解表达式“ab”,如果值为“真”,把a的值赋给max,否则将b的值赋给max。该表达式的功能是求a和b的最大值,并将最大值赋给变量max。(2)条件运算符的结合方向为从右至左。例如:表达式z=a0 ? a : a0 ? a : (ab?a:b”外,还可以写成以下形式:ab ? (max=a) : (max=b)或者直接用输出函数将最大数直接输出:ab ? printf(“%d

25、”,a) : printf(“%d”,b)以上三个表达式的功能都是求a和b的最大值。表达式“max=ab?a:b”是一个赋值表达式,将条件表达式“ab?a:b”的结果赋给变量max;表达式“ab ? (max=a) : (max=b)”是一个条件表达式,其中,表达式2和表达式3采用了赋值表达式,当表达式1的值为“真”时,将a的值赋给max,否则将b的值赋给max;表达式“ab ? printf(“%d”,a) : printf(“%d”,b)”也是一个条件表达式,其中,表达式2和表达式3采用了函数表达式,该表达式的功能是将a和b中的最大值输出。(4)条件表达式中,表达式1、表达式2和表达式3的

26、类型可以各不相同。表达式1作为判断条件,其值作为逻辑值进行判断,如果是“非0”,执行表达式2,如果是“0”,则执行表达式3。当表达式2和表达式3的值数据类型不相同时,整个条件表达式值的类型为表达式2和表达式3中级别较高的类型(数据类型级别高低可参看第2章中的数据类型转换规则)。例如:ab?2.5:3其中表达式2为实型数据,表达式3为整型数据。当“ab”值为“真”时,整个条件表达式的值为2.5,当“ab”值为“假”时,整个条件表达式的值本来应该是3,但是因为表达式2中的数值类型为实型,其级别高于表达式3中的整型,这就要求整个条件表达式的值应为实型。所以,当“ab”值为“假”时,整个条件表达式的值

27、为3.0。例3.7 输入一个整数,判断其是奇数还是偶数。#includevoid main() int n; scanf(%d,&n); n%2=0?printf(%d是偶数n,n):printf(%d是奇数n,n);程序运行结果:88是偶数例3.8 输入3个正整数,输出其中最大数。#includevoid main() int a,b,c,max; scanf(%d,%d,%d,&a,&b,&c); max=ab?a:b; max=maxc?max:c; printf(a,b,c中的最大数为:%dn,max);程序运行结果:3,5,7a,b,c中的最大数为:7例3.9 将输入的字母一律按照小

28、写字母形式输出。#includevoid main() char n; scanf(%c,&n); n=(n=A&n=Z)?n+32:n; printf(%cn,n);程序运行结果:Hh第七节 自增、自减运算符C语言提供了一类特有的运算符,自增(+)和自减(-)运算符。它们是单目运算符,运算对象只有一个,而且只能是变量。自增、自减运算符的作用是使变量的值增1或减1。其可通过前缀和后缀两种方式作用于变量,使变量的值增1或减1。例如:+i,-i (前缀方式:在使用变量i之前,先使变量i的值增(减)1)i+,i- (后缀方式:先使用变量i的值,使用完之后再使变量i的值增(减)1)实际上,+i和i+最终的作用都是相当于i=i+1。但是在应用的中间过程中,二者是有区别的。+i是先执行i=i+1之后再使用i的值。例如,设有i=3;则:n=+i; (先执行i=i+1,使i的值变为4,再使用i的值执行赋值操作,执行完毕后n的值为4,i的值为4)i+是先使用i的值,之后再执行i=i+1的操作。同上,假设有i=3;则:n=i+; (先使用i的原值3进行赋值操作,再执行i=i+1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1