高考小说阅读_第1页
高考小说阅读_第2页
高考小说阅读_第3页
高考小说阅读_第4页
高考小说阅读_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

1、1 1第2章 数据类型、运算符与表达式2.1 字符集和标识符字符集和标识符2.2 常量和变量常量和变量2.3 数据类型数据类型2.4 运算符与表达式运算符与表达式2.5 数据类型转换数据类型转换2 2数据是程序处理的对象。程序的主要任务就是对数据进行加工、处理,而计算机中的数据包括数值型数据和非数值型数据。数据类型是按照数据的性质、表示形式和占据存储空间的大小以及构造特点来划分的。数据类型系统是一种抽象机制,它将具有相同性质的数据抽象成同一种类型的数据。运算是对数据进行加工的过程;运算符是用来表示各种不同运算的符号;参加运算的数据称为运算量(也称运算对象或操作数)。表达式是用运算符将各种运算量

2、连接起来的、符合C语言语法规则的式子。3 32.1.1 字符集字符集字符集是高级语言的编译系统所能识别的字母、数字和特殊符号。每种高级语言都有自己特定的字符集。2.1 字符集和标识符字符集和标识符4 4C语言的字符集包括: 大、小写英文字母:A,B,Z,a,b,z 数字:0,1,2,9 运算符:+ - * / % 、=、=、=、!= 逻辑运算符:&、|、! 赋值运算符:=及其扩展运算符 条件运算符:? :5151 逗号运算符:, 位运算符:&、|、 指针运算符:*、& 长度运算符:sizeof 强制类型转换:类型名 分量运算符:.、- 下标运算符: 其它运算符:( )52522) 运算符的优先

3、级和结合性在进行表达式求值过程中,C语言规定了各运算符的优先级和结合性。当各种不同的运算符与运算量组成表达式时,运算符的优先级和结合性将起着十分重要的作用。运算符的优先级是指当一个表达式中有多个运算符时,表达式中各运算符的运算是有先后次序的,这种运算的先后次序称为相应运算符的优先级。运算符的结合性是指当一个运算量两侧的运算符的优先级相同时,运算进行的结合方向。如果按照“从左向右”的顺序运算,称为左结合性;如果按照“从右向左”的顺序运算,称为右结合性。5353各种运算符的优先级和结合性详见附录。在一个表达式中,如果运算符的优先级不同,则按运算符的优先级由高到低执行;如果运算符的优先级相同,则按运

4、算符的结合性进行。可以在表达式中使用圆括号运算符限定运算顺序(要符合C语言语法规则),即使圆括号多余也没有关系。例如:在表达式x+y*z中,*的优先级高于+,所以先进行乘法运算,再进行加法运算。在表达式(x+y)*z中,由于使用了圆括号,所以先进行加法运算,再进行乘法运算。5454算术运算符“+、-、*、/、%”的结合性是左结合性,表达式a+b-c就是按“从左向右”的顺序运算的,相当于(a+b)-c,即先把a和b相加,所得结果再和c相减。赋值运算符“=”是右结合性,表达式a=b=c=3就是按“从右向左”的顺序运算的,相当于a=(b=(c=3),即先把3赋值给c,然后再将表达式c=3的值(3)赋

5、值给b,最后再将表达式b=c=3的值(3)赋值给a。这样,a、b、c三个变量的值都为3。55553) 运算符所要求的运算量的个数每个运算符都要求有运算量,根据运算符所要求的运算量的个数,运算符分为单目运算符、双目运算符和三目运算符。单目运算符要求有一个运算量,双目运算符要求有两个运算量,三目运算符要求有三个运算量。56562. 表达式表达式根据运算符的分类,将C语言表达式主要分为以下几类: 算术表达式 关系表达式 逻辑表达式 赋值表达式 条件表达式 逗号表达式 位表达式 其它表达式5757以上几类表达式可以按照C语言语法规则再组合,形成新的表达式。一个表达式可能从整体上看是某一类表达式,局部看

6、又可能是由别的某几类表达式组成。称一个表达式是某一类表达式就是从整体上来看是哪一类表达式,例如:a+bc+d 整体:关系表达式 局部:两个算术表达式组成a+(bc)+d 整体:算术表达式 局部:两个算术表达式和一个关系表达式组成58582.4.2 算术运算符与算术表达式算术运算符与算术表达式1. 算术运算符算术运算符1) 基本算术运算符基本算术运算符有5个,它们分别是:+(加)、-(减)、*(乘)、/(除)、%(模除),如表2-4所示。它们都是双目运算符。5959表2-4 基本算术运算符及其功能6060说明:(1) 除法:除法运算包括整数除法和实数除法。整数除法要求除法运算符两边必须是整数,运

7、算结果也是整数(舍去小数部分)。例如:5/3的结果为1,1/5的结果为0,0/7的结果为0。如果被除数或除数中有一个是负整数,则结果随不同的机器系统而不同,一般情况是多数机器采用“向零取整”原则。例如:-7/4的结果为-1,7/-4的结果为-1。实数除法的除法运算符两边只要有一个是实数,运算结果就是实数(双精度型)。例如:1.0/2的结果为0.5,3.0/4.0的结果为0.75,7/5.0的结果为1.4。6161(2) 模除:模除运算也叫求余运算,模除运算符两边必须都是整数,运算结果也是整数,即两数整除后的余数。对于有负数参加的模除,一般情况是余数的符号与被除数的符号相同,但也可能随不同的机器

8、系统而不同。例如:9%4的结果为1,-3%5的结果为-3,3%-5的结果为3。62622) 自增、自减运算符自增运算符是+,自减运算符是-,它们都是单目运算符,即只对一个运算量施加运算,运算的结果仍赋予该运算量,且参加运算的量必须是变量,如表2-5所示。表表2-5 自增、自减运算符及其功能自增、自减运算符及其功能6363自增、自减运算符既可以在运算量之前,也可以在运算量之后,前者称做前置运算,后者称做后置运算。对一个变量来说,自增、自减运算不论是前置运算还是后置运算,其最终运算结果都是一样的。但如果在一个表达式中除了自增、自减运算符外,还有别的运算符,则自增、自减运算的前置运算和后置运算是不同

9、的,其区别为:(1) 自增、自减运算的前置运算是使变量的值先增1或减1,然后再以该变量变化后的值参加其它运算。(2) 自增、自减运算的后置运算是先以该变量的值参加其它运算,然后再使变量的值增1或减1。6464例如:如果整型变量k的值为10,则i=+k;/*先将k的值自增1变为11,然后将k的值11赋给i,i的值为11。*/i=k+;/*先将k的值10赋给i,i的值为10,然后k的值自增1变为11。*/如果多个自增、自减运算出现在表达式中,也符合此规律。65653) 正、负运算符正运算符是“+”,负运算符是“-”,它们都是单目运算符,即只对一个运算量施加运算,参加运算的量可以是常量、变量、函数和

10、表达式等,如表2-6所示。表表2-6 正、负运算符及其功能正、负运算符及其功能66662. 算术表达式算术表达式用算术运算符将运算量(常量、变量和函数)连接起来的符合C语言语法规则的式子称为算术表达式。例如:a+b-c(x+y)*(x-z)(-b+sqrt(b*b-4*a*c)/(2*a)以上都是合法的C语言算术表达式。6767在C语言中,表达式的书写与数学中表达式的书写有所不同,使用时要注意以下几点:(1) 表达式中的乘号不能省略。例如:数学表达式b2-4ac的C语言表达式为b*b-4*a*c。(2) C语言表达式只能使用系统允许的标识符。例如:数学表达式r2的C语言表达式为3.141592

11、6*r*r。6868(3) C语言表达式中的内容必须书写在一行,不允许有分子分母形式,必要时要使用圆括号保证运算的正确顺序。例如:数学表达式的C语言表达式为(a+b)/(c-d)。(4) C语言表达式不允许使用方括号和花括号,只能使用圆括号。可以使用多层圆括号,但必须保证左右圆括号配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。6969例如:数学表达式的C语言表达式为x*(a*(b*(c-d/e)-y)+z)。(5) 在书写包含多种运算符的表达式时,应注意各个运算符的优先级,要确保表达式中运算符能以正确的顺序执行,如果对复杂表达式中运算符的计算顺序没有把握,可以使用圆括号强制计算顺序

12、按照设计要求进行。70703. 算术运算符的优先级和结合性算术运算符的优先级和结合性表表2-7 算术运算符的优先级和结合性算术运算符的优先级和结合性7171优先级举例:-a-b*c+a/c/*运算顺序为:取负、乘、除、减、加,相当于(-a)-(b*c)+(a/c)。*/结合性举例:a+b-c/*运算顺序为:加、减,相当于(a+b)-c。*/72722.4.3 赋值运算符与赋值表达式赋值运算符与赋值表达式1. 赋值运算符赋值运算符赋值运算符是“=”,它是一个双目运算符,结合性为从右向左。赋值运算的一般形式为变量名=表达式它的含义是将右边表达式的值存储到以左边变量名为标识的存储单元中。例如:x=1

13、0/*使变量x的值为10。*/c=a+b/*使变量c的值为表达式“a+b”的值。*/7373说明:(1) 赋值运算符“=”不要和数学中的等号“=”相混淆。在数学中,等号“=”的含义是等号连接的两边的量相等,而赋值运算符的含义是将右边表达式的值存储到以左边变量名为标识的存储单元中。(2) 赋值运算的左边必须是变量,右边的表达式可以是常量、变量、表达式和调用的函数。7474(3) 在进行赋值运算时,当赋值运算符两边的数据类型不同时,将由系统自动进行类型转换。转换原则是:赋值运算符右边的数据类型转换为左边的变量的数据类型。例如:若右边是实型数据,左边是整型数据,转换时截去实型数据的小数部分;若右边是

14、整型,左边是实型数据,转换时增加小数部分为0。75752. 赋值表达式赋值表达式用赋值运算符将运算量(常量、变量和函数)连接起来的符合C语言语法规则的式子称为赋值表达式。例如:a=3/*使变量a的值为3。*/x=i+1/*取出变量i中的值加1后,再存入变量x中。*/x=y=z=1.234/*相当于x=(y=(z=1.234)。*/y=sin(x)+cos(x) /*使变量y的值为表达式“sin(x)+cos(x)”的值。*/76763. 复合赋值运算符复合赋值运算符为了简化程序并提高编译效率,C语言允许在赋值运算符“=”之前加上一些其它运算符,以构成复合赋值运算符。C语言规定,所有双目运算符都

15、可以与赋值运算符一起组合成复合赋值运算符,共有10种,它们是:+=、-=、*=、/=、%=、=、&=、=、|=后5种是与位运算符组合而成的,位运算符将在后面介绍。7777复合赋值运算的一般形式为变量名 双目运算符=表达式例如:x+=1/*相当于x=x+1。*/x-=2/*相当于x=x-2。*/x*=3/*相当于x=x*3。*/x/=4/*相当于x=x/4。*/x%=5/*相当于x=x%5。*/特别地,如果复合赋值运算符右边是一个包含若干项的表达式,则要将该表达式当作一个整体来对待。7878例如:x*=y+3/*相当于x=x*(y+3)。(注意右边表达式要当作整体,而不是x=x*y+3)*/79

16、792.4.4 关系运算符与关系表达式关系运算符与关系表达式1. 关系运算符关系运算符关系运算就是比较两个数值的大小。如果比较时两个数值符合比较条件,则比较的结果值为“真”;如果比较时两个数值不符合比较条件,则比较的结果值为“假”。“真”和“假”是两个逻辑值,在C语言中没有专门的逻辑值,用非0表示“真”,用0表示“假”。关系运算符有6个,它们分别是:(大于)、=(大于等于)、(小于)、=”和“”、“b/*比较变量a的值是否大于变量b的值。*/a+b=b+c/*比较表达式“a+b”的值是否大于等于表达式“b+c”的值。*/(ab)(ab”的值是否小于关系表达式“ab/*值为1。*/(ab)=1/

17、*值为1(ab的值为1,1=1的值为1)。*/abc/*值为0(ab的值为1,11的值为0。不要和数学中的abc混淆,在数学中,abc表示a的值大于b的值,b的值大于c的值)。*/84843. 关系运算符的优先级和结合性关系运算符的优先级和结合性表表2-9 关系运算符的优先级和结合性关系运算符的优先级和结合性8585优先级举例:a=bc/*运算顺序为:大于、等于,相当于a=(bc)。*/结合性举例:abb)y、!x、!(a+b*c)(2) 在逻辑表达式的求解中,并不是所有的逻辑运算都需要被执行,只有在必须执行下一个逻辑运算后才能求出整个逻辑表达式的值时,才执行该逻辑运算。8989例如: a&(

18、bc|dc|dc|dc|dc|dc|de&!(f-g)中各变量的值并对其进行相应的运算,最后再和a进行“或(|)”运算。91912. 逻辑表达式逻辑表达式用逻辑运算符将运算量(常量、变量和函数)连接起来的符合C语言语法规则的式子称为逻辑表达式。例如:a&b(ab)&(by)|(xb)&(bc)/*值为0。*/!a/*值为0。*/!(a=0)?1:-1此条件表达式的值取决于x的值。若x0,则此条件表达式的值为1;否则,此条件表达式的值为-1。说明:(1) 条件表达式中的表达式1、表达式2和表达式3的值可以是不同的类型,但条件表达式最终的值取占用字节数较长的类型。例如:(xy)?1:1.5若xy,

19、则表达式的值为1.0(将整型1转换为实型1.0);否则,表达式的值为1.5。9797(2) 在C语言中,条件运算符的优先级仅高于赋值运算符和后面介绍的逗号运算符,低于前面介绍的算术运算符、关系运算符、逻辑运算符以及其它任何运算符。例如:max=ab?a:b此表达式根据各运算符的优先级,先计算ab,若ab,则条件表达式的值为a,然后将此值赋值给max,即max的值为a;若a0)?1:(x0,则整个表达式的值为1;若x=0,则整个表达式的值为0;若x0?1:x0?-1:01001002.4.7 逗号运算符与逗号表达式逗号运算符与逗号表达式逗号运算符是“,”,用于把两个表达式连接起来组合成一个表达式

20、,也即逗号表达式。它是一个双目运算符,优先级是C语言运算符中最低的,结合性为从左向右。逗号表达式的一般形式为表达式1,表达式2逗号表达式的计算过程为:先计算表达式1的值,再计算表达式2的值,最后整个表达式的值为表达式2的值。例如:1+2 , 3+4/*值为7*/101101一个逗号表达式可与任意一个表达式再用逗号运算符连接起来而成为一个新的逗号表达式,所以逗号运算符更多的应用情形是:表达式1 , 表达式2 , , 表达式n整个逗号表达式的值为表达式n的值。注意:在C语言中,并不是所有地方出现的逗号都是逗号运算符,像在函数参数表中出现的逗号并不是逗号运算符,它起分隔各参数的作用。例如:print

21、f(%d %d %dn, a,b,c);/*a、b、c之间的逗号起分隔参数的作用。*/102102在C语言中,不同类型的数据在进行混合运算时必须先转换成同一种类型,然后再进行运算。转换的方式有两种:自动转换和强制转换。2.5.1 数据类型的自动转换数据类型的自动转换在一个表达式(特别是算术表达式)中出现各种数据类型时,C语言会自动将不同类型的数据转换成同一类型,然后再进行计算。各种数据类型间的转换规则如图2-2所示。2.5 数据类型转换数据类型转换103103说明:(1) 图中横向向左的箭头表示必定的转换,即在运算之前,char和short类型的数据必须先转换成int类型(即使是两个short类型的数据相加

温馨提示

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

最新文档

评论

0/150

提交评论