资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,*,第二章 数据类型、运算符和表达式,第,2,章,C,语言程序设计初步知识,2.1,标识符、常量和变量,2.2,简单数据类型,2.3,基本运算表达式,学习目标:,1,、了解,C,的数据类型及基本类型数据的使用,2,、掌握,C,运算符的种类、运算优先级和结合性,3,、掌握不同类型数据间的转换与运算,4,、掌握,C,表达式和求值规则,2.1,标识符、常量和变量,2.1.1,标识符,标识符是用来标识变量名、符号常量名、函数名、文件名以及一些具有专门含义的有效字符序列。,2.1.1,标识符,C,语言规定:合法的标识符只能由字母、数字和下划线组成,第一个字符必须为字母或下划线。大写字母和小写字母被视为两个不同的字符。标识符的长度规定取前,8,个字符为有效字符。例如:,sum,、,area,、,aver,、,PI,、,_above,、,L_1_2_3,、,S12,是合法的标识符,A.B.C,、,A.123,、,13,、,3area,、,a+b,是不合法的标识符,1.,关键字标识符,关键字又称为命令符,在程序中具有特定的含义,不能另作它用,其他字符又无法直接替代。,2.,预定义标识符,预定义标识符是指,C,语言提供的库函数名和预编译处理命令(如,printf,、,scanf,、,define,),等。,3.,用户标识符,由用户根据需要自定义的标识符称为用户标识符。使用用户自定义标识符时,应注意:,(1),最好根据其含义选用英文缩写及汉语拼音作标识符,这样便于阅读程序。,(2),不能与关键字相同。,(3),如果与预定义标识符相同系统并不报错,程序仍能运行,只是预定义标识符失去原来的含义,代之以用户确认的含义。,2.1.2,常量和变量,1.,常量,在程序运行过程中,其值不能被修改的固定量称为常量,,C,语言中有,3,种常量:,(1),算术型运算常量(如整型常量、实型常量等);,(2),字符型常量(如字符常量、字符串常量);,(3),标识符所定义的常量,。,2.,变量,程序运行过程中,其值可以改变的量叫变量;程序中使用的变量,属于用户自定义标识符,任何一个变量名必须先定义(即确定变量名和变量的类型)后使用。,变量也有类型之分,常用的有整型变量、实型变量、字符型变量等。,2.2,简单数据类型,图,2.1 C,语言中的数据类型,无符号型(,unsigned,),长整型(,long,),短整型(,short,),整型(,int,),单精度型(,float,),双精度型(,double,),整型,数据类型,指针类型,空类型,基本类型,(简单类型),数值类型,字符型(,char,),构造类型,数组类型,结构体类型(,struct,),共用体类型(,union,),实型,枚举类型(,enum,),2.2.1,整型数据,1.,整型常量,整型常量,即整型常数。,C,语言整型常量可用以下,3,种形式表示:,(1),十进制整型常数。,(2),八进制数。以,0,开头的数。,(3),十六进制整数。以,0 x,开头的数为十六进制数。,2.,整型变量,1),整型变量的分类,整型变量可分为以下,4,种整型类型:,a.,基本型,以,int,表示;,b.,短整型,以,short,表示;,c.,长整型,以,long,表示;,d.,无符号整型,以,unsigned,表示。,2),整型变量的定义、使用,变量必须先定义后使用。定义整型变量的格式为:,int,i,j;/*,定义,i,j,为整型变量 *,/,long e,f;/*,定义,e,f,为长整型变量 *,/,int,a=3,b=4;/*,定义,a,b,为整型变量同 时将,3,和,4,分别赋予,a,和,b */,3.,整型数据在内存中的存放形式,在,C,语言中,一个整型数通常占用,2,个字节,。,2.2.2,实型数据,1.,实型常量,在,C,语言中实型表示实数的集合,实型常量又称实数。实型常量有两种表现形式。,1),十进制数形式,十进制数形式和数学中的实数形式类同,由数字和小数点组成,小数点是实数的标志。,2),指数形式,实数的指数形式类似于数学中的指数形式。组成格式如下:,数字,小数,E,整数 (,内为可省项),2.,实型变量,在,C,语言中实型变量分为单精度(,float,),和双精度(,double,),两类。,实型变量的定义:,float a,b;/*,定义,a,b,为单精度实型变量 *,/,double x,y;/*,定义,x,y,为双精度实型变量,*,/,2.2.3,字符型数据,1.,字符型常量,字符型常量(简称字符常量)是一个字符,在表示时由两个单引号括起来。例如,A,、,a,、,+,、,2,等。,字符型常量在内存中占用一个字节,存放的是字符的,ASCII,码值,如字符,A,的值为,65,;,B,的值为,66,。所有字符常量还可作为整型量进行运算,以及参与相应的各种操作。,2.,转义字符,C,语言中有一种特殊的字符常量,转义字符,这类字符常量是以反斜杠字符“,”,开头的字符序列,它表示某个特定的,ASCII,码字符。在程序中,转义字符要放在一对单引号内。,常用的转义字符及其含义:,n,回车换行至下一行开头,r,回车至本行开头,b,退格符,反斜杠字符,单引号字符,ddd,1-3,位八进制数所代表法的字符,xdd,1-2,位十六进制数所代表法的字符,3.,字符变量,字符变量用于存放一个字符常量。字符变量的定义格式为:,char c1,c2,;,其中,c1,和,c2,分别被定义为字符型变量。,一个字符型变量在内存中占一个字节,字符型变量可以参加任何整型运算。,2.3,基本运算表达式,2.3.1,算术运算符及表达式,1.,基本算术运算符,基本算术运算符及特性,见表,2-4,。,表,2-4,基本运算符列表,运算符,功能,操作数个数,结合方向,优先级,+,-,求正,求负,单目,单目,自右至左,自右至左,高,低,*,/,%,乘法,除法,求余,双目,双目,双目,自左至右,自左至右,自左至右,+,-,加法,减法,双目,双目,自左至右,自左至右,2.,算术表达式,由算术运算符将操作数连接起来的有意义的式子称为算术表达式。例如,2+a*b,。,使用运算符时,应注意:,(1),表达式本身的功能。,(2),操作数的个数。,(3),操作数的类型。,(4),运算符的优先级。,(5),结合性。,(6),任何一个表达式除了有其所实现的功能外,还有表达式其自身的值。,2.3.2,赋值运算符及表达式,1.,赋值运算符,“,=”,符就是赋值运算符,赋值运算符构成的表达式格式如下:,变量名,=,表达式,2.,复合赋值运算符,在“,=”,前面加上双目运算符,如“,+”,、“,-”,、“*”、“,%”,、“,/”,即构成复合赋值运算符。,例如:,a+=3,等价于,a=a+3,2.3.2,赋值运算符及表达式,所有复合赋值运算符级别相同,且与赋值运算符同一优先级,都具有右结合性。,例如,表达式,a+=a-=a*=a,等价于:,a+=(a-=a*=a),问题:设,a,的初值为,10,,表达式,a+=a-=a*=a,的值?,2.3.3,不同类型数据间的转换,1.,数据类型自动转换,数据类型的自动转换常发生在以下情况中:,(1),进行运算时转换。,(2),赋值转换。,(3),输出转换。,(4),函数调用转换。,2.3.3,不同类型数据间的转换,2.,不同类型数据间的混合运算,整型、实型、字符型数据可以进行混合运算。在进行运算时,应先把不同类型的数据转换为同一类型,然后进行运算,转换规则,参见图,2.2,所示。,图,2.2,混合运算时不同类型数据间的转换,double,long,unsigned,int,char,short,float,高,低,3.,赋值转换,(1),将整型数据赋给实型变量,这时数值不变,但以实型数据形式存到变量中。,(2),将实型数据赋给整型变量,这时舍弃小数部,分,取整数部分赋给整型变量中。,(3),将,int,型整型数据赋给无符号型整型变量,,int,型数据按存储单元中实际二进制位的内容直接赋给,unsigned,型变量。,若,int,型数据为正数,即存储单元中最高位为,0,,赋值后,则,int,型数据与,unsigned,型数据的数值相同。,若,int,型数据为负数,即存储单元中最高位为,1,,赋值后,,unsigned,型数据在使用时,最高位将代表一定的数值。,(4),字符型数据赋给整型变量。,字符型数据占,1,个字节,而整型变量占,2,个字节,因此赋值转换过程中,存在位的扩展。,a.,对于,unsigned,型变量,字符型数据(,8,位)传送给,unsigned,变量的低,8,位,而,unsigned,变量的高,8,位只须补,0,;,b.,对于,int,型变量,若字符型数据最高位为,0,,则,int,型变量高,8,位补,0,。若字符型数据最高位为,1,,,则,int,型变量的高,8,位补,1,。这样可以保持数值不变。,4.,强制类型转换,在,C,语言中,可以利用强制类型转换符,将表达式的类型转换为所需类型。,一般形式:,(,类型名,),表达式,例如:,(,int)a,表示将,a,转换成,int,类型;,5.,sizeof,运算,形式:,sizeof,数据对象;,sizeof,(,类型说明符,);,int,a,b,c,;,b=,sizeof,a;/*b,的值为,2*/,c=,sizeof(float,);/*c,的值为,4*/,2.3.4,自增、自减运算符及表达式,1.,格式与功能,格式:,i+i-,功能:先使用,i,的值,然后,变量,i,的值增加(减少),1,,即,i=i1,。,格式:,+i -i,功能:变量,i,先增加(减少),1,,即,i=i1,,,然后,再使用,i,的值。,2.,自增、自减运算符的运算,自增、自减运算为单目运算,其,运,算数据为单操作数,且操作数只能是变量,不能是常量或表达式。,3.,自增、自减运算符的结合性,自增、自减运算符属右结合性。,注意:,(1),使用,+i,或,i+,单独构成语句时,其作用是等价的,均为,i=i+1,。,(2),运算对象只能是整型变量和实型变量。,(3),对于表达式,(i+)+(i+)+(i+),,,不同的编程环境,其结果不同。,2.3.5,逗号运算符及表达式,用逗号将表达式连接起来的式子称为逗号表达式。,1.,逗号表达式的一般形式,表达式,1,表达式,2,表达式,3,表达式,n,2.,逗号表达式的功能,先计算表达式,1,,再计算表达式,2,,最后计算表达式,n,。,最后一个表达式的值即为此逗号表达式的值。,3.,逗号运算符的优先级,在所有运算符中,逗号运算符级别是最低的。,利用逗号表达式可实现在一条,C,语言中对多个变量赋予不同的值。,2.4,关系运算符及表达式,关系表达式是由关系运算符连接表达式构成的。,1.,关系运算符,关系运算符都是双目运算符,共有如下,6,种:,,,=,,,=,)的优先级别相同,后两种运算符(,=,,!,=,)相同。前四种高于后两种。,关系运算符的优先级低于算数运算符。,关系运算符的优先级高于赋值运算符。,3.,关系表达式,由关系运算符组成的表达式,称为关系表达式。例如,xy,、,(x=5)=y,等。,关系表达式的值是整数,0,或,1,,其中,0,代表逻辑假;,1,代表逻辑真。,设:,int,a=2,;,char c=a,;,float f=3.0,;分析下列式子的结果。,a+2!=c-100,f/3=a-c,a=(f4),(a=2)=(f=3.0),(1,2)!=(2,1),2.5,逻辑运算符及表达式,1.,逻辑运算符,C,语言中提供了,3,种逻辑运算符:,(1),单目逻辑运算符:,!,(逻辑“非”)。,(2),双目逻辑运算符:,&,(逻辑“与”)。,(3),双目逻辑运算符:,|,(逻辑“或”)。,其中逻辑“与”,&,的优先级大于逻辑“或”,|,,它们的优先级都小于逻辑“非”,!,。逻辑运算符具有自左至右的结合性。,2.,逻辑表达式,由逻辑运算符组成的表达式称为逻辑表达式。,逻辑表达式的结果为,1,(结果为“真”时)或,0,(结果为“假“时)。,表达式,a,和表达式,b,进行逻辑运算时,其运算规则,见表,4-1,。,逻辑运算的真值表,a,b,!a,!b,a&b,a|b,非,0,非,0,0,0,1,1,非,0,0,0,1,0,1,0,非,0,1,0,0,1,0,0,1,1,0,0,设:,int,a=2,;,char c=a,;,float f=3.0,;分析下列式子的结果。,!(c-a),f/3&a-c,a,c|f,a)&(f,4),!(1&!a),(1,2,3)&(3,3,3),(a=0)|(f=1),若定义:,int,w=1,x=2,y=3,z=4,a=5,b=6;z,则执行语句,(a=w,x)&(b,=yz);,后,,a,b,的值为:,0,和,6,3.,短路表达式,在由,&,和,|,运算符组成的逻辑表达式中,只对能确定整个表达式值所需要的最少数目的子表达式进行计算。也就是说,当计算出一个子表达式的值之后便可确定整个逻辑表达式的值时,后面的子表达式就不需要再计算了,整个表达式的值就是该子表达式的值。这种表达式也称为短路表达式。,2.6,条件运算符,条件运算符是,C,语言中唯一的三目运算符,条件表达式的一般格式为:,表达式,1?,表达式,2 :,表达式,3,条件运算符的执行过程是:先求解表达式,1,,当值为非,0,(真),则求解表达式,2,,此时表达式,2,的值就作为整个条件表达式的值;否则求解表达式,3,,此时表达式,3,的值就作为整个条件表达式的值。,条件运算符的优先级高于赋值运算符,但是低于关系运算符和算术运算符。条件运算符的结合性为自右至左。,设,int,x=1,y=2,z=3,w=4,则表达式:,x,y?z:x,w?w:x,的结果为:,3,总结:,1,、标识符的命名规则,2,、整型、实型变量存储规则,3,、表达式的求值规则,
展开阅读全文