第3章数据类型与表达式_第1页
第3章数据类型与表达式_第2页
第3章数据类型与表达式_第3页
第3章数据类型与表达式_第4页
第3章数据类型与表达式_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

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

文档简介

第3章数据类型与表达式第3章数据类型与表达式3.1引例3.2C语言的数据类型3.3常量与变量3.4基本数据类型3.5运算符和表达式3.6类型转换本单元内容3.1引例计算机的应用7.1引例高级语言程序设计计算机程序数据任何高级语言的程序设计都要规定数据类型,以及数据的运算方式的规范3.2C语言的数据类型C语言丰富的数据类型3.3常量与变量3.3.1常量3.3.2变量3.3.3常变量3.3.4标识符本节内容3.3.1常量在程序执行过程中其值不发生改变的量。整型常量、字符型常量、实型常量、枚举常量(第10章介绍)、字符串常量、符号常量概念和种类3.3.1常量整型常量进制整数19整数-19表示特点十进制19-19由0~9的数字序列组成,数字前可带正负号八进制023-023由数字0开头,后跟0~7的数字序列组成十六进制0x13-0x1F以0x或0X开头,后面跟一串十六进制数字(0~9,a~f,A~F)组成3.3.1常量实型常量形式实例表示特点十进制小数3.14,-1.25,.87由数字、小数点与正负号组成,且必须有小数点指数形式1.2e3,3.15e-6分别等价于1.2×103,3.15×10-6指数形式由数字、小数点、字母e或E及正负号组成,注意:e或E之前必须有数字,可以表示成整数或小数形式,e或E其后指数必须为整数,如不能写成e6、13e3.53.3.1常量普通字符常量。使用单撇号括起来的一个字符,如'A','?','7','#',等.转义字符常量。就是在某些特定字符前加“\”,表示某种特殊的意义或控制动作。(如表3.3.3)字符型常量3.3.1常量字符串常量是用一组双撇号括起来的若干字符序列。如果在一个字符串中一个字符也没有,将其称为空串。例如,"china"、"hello!"、"2014130789"字符串常量关于字符串常量需要注意以下几点。(1)字符串常量是双撇号中的全部字符,但是不包括双撇号本身。(2)注意不能错写成单撇号,如'china','girl'。单撇号中只能包含一个字符,双撇号才可以包含一个字符串。3.3.1常量用一个符号名代表的常量。使用#define指令可以指定常量的符号名。符号常量【例3.1】使用符号常量来表示单价,根据给出的销售量num,计算出总销售额,最后输出结果。3.3.1常量符号常量含义清楚能做到“一改全改”这行行尾没有分号,符号常量名一般用大写3.3.2变量变量就是在程序运行过程中,其值可改变的量。变量用来存放数据,也就是存放变量的值。变量在内存中占据一定的存储单位,一般要占用多个字节概念3.3.2变量3.3.2变量(1)使用变量必须遵循“先定义,后使用”的原则。使用变量的注意事项3.3.2变量(2)变量的定义方法。在定义变量时,需要声明变量的类型和变量名。变量定义的一般形式为:使用变量的注意事项类型关键字

变量名;例如:intsum;表示定义一个整型变量,变量名是sum。3.3.2变量(3)变量名和变量值是两个不同的概念。一个变量有三要素,分别是变量类型、变量名和变量值。变量名是一个符号地址,对应一个物理地址。变量类型决定了变量所占用的存储单元的多少。变量的值是存储单元中的值(二进制数)。使用变量的注意事项3.3.2变量使用变量的注意事项例如:shortintsum=3;变量名:sum变量类型:短整型,占2字节变量值:33.3.2变量(4)变量值的存取步骤。通过变量名找到相应的内存单元。根据变量的类型确定要存取的字节数。按要求读或写变量的值。使用变量的注意事项3.3.3常变量在程序运行过程中值不改变的变量。常变量的定义需要使用const关键字。需要注意的是,const定义的常变量只能在定义的时候赋初值,不能在程序中改变其值。概念其形式如下:const

变量类型变量名=变量值;例如:constfloatprice=35.5;常变量与直接常量有什么区别?常变量与符号常量又有什么不同呢?思考#definePRICE35.5 //定义符号常量constfloatprice=35.5; //定义常变量3.3.4标识符概念名字在日常生活中的重要性?人名、地名、事物名等。在数学中也常常用到变量名或函数名在编程语言中,对于变量、常量、函数、类型等也有名字,这些名字在程序设计语言中统称为标识符。3.3.4标识符在C语言中把标识符分为三类:关键字预定义标识符用户自定义标识符。标识符分类3.3.4标识符(1)关键字是事先定义的,有特别意义的标识符,有时称为保留字。ANSIC定义了32个关键字。关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile

3.3.4标识符(2)预定义标识符是C语言中系统预先定义的标识符,如系统类库名、系统常量名、系统函数名(如:scanf,printf)。预定义标识符3.3.4标识符(3)用户自定义标识符用户自定义标识符命名规则:①标识符由字母(A~Z,a~z)、数字(0~9)、下画线“_”组成,并且首字符不能是数字,只能是字母或者下画线。②不能把C语言关键字作为用户标识符③标识符长度是由机器上的编译系统决定的。④标识符对大小写敏感,即严格区分大小写。⑤标识符命名应做到“见名知意”,如长度(length)、求和(sum)、圆周率(pi)等。以下是正确的用户自定义标识符是:A.stu-scoreB.2015stuC.charD.stu2014E.$num答案:D3.4基本数据类型3.4.1整型数据3.4.2浮点型数据3.4.3字符型数据3.4.1整型数据分类类型名称关

字字

数基本整型intTurboC2.0中占2个,VC++6.0中占4个短整型shortintVC++6.0中占2个字节长整型longintVC++6.0中占4个字节双长整型longlongint8个字节,C99新增的类型7.4.1字符数组的定义与引用定义字符数组的方法与定义数值型数组的方法类似,只是数组的基类型是char字符数组元素值为字符

存储的是字符对应的ASCII码字符数组的定义3.4.1整型数据1.基本整型(int)基本整型在存储单元中的存储方式是:用整型的补码形式存储。3.4.1整型数据1.基本整型(int)--溢出【例3.2】下面举一个整型变量溢出的例子。3.4.1整型数据短整型使用的关键字是shortint或short。如果使用VisualC++6.0,编译系统分配给int数据4个字节,分配短整型2个字节。短整型在内存中的存储方式与int型相同。因此可以计算出一个短整型变量的值的十进制取值范围为:-32768~32767。2.短整型3.4.1整型数据长整型使用的关键字longint或long。如果使用VisualC++6.0,编译系统分配给long数据4个字节。长整型在内存中的存储方式与int类型也相同,因此可以计算出一个长整型变量的值的十进制取值范围是-2147483648~2147483647。3.长整型(longint)3.4.1整型数据双长整型使用关键字longlongint或longlong,一般为双长整型分配8个字节,该类型是C99新增的数据类型,但许多C编译系统尚未实现。4.双长整型(longlongint)3.4.1整型数据5.sizeof运算符sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(longlong)3.4.1整型数据6.扩展的整型数据类型名称关键字字节数取值范围有符号基本整型[signed]int2-32768~32767,即-215~215-14-2147483648~2147483647,即-231~231-1无符号基本整型unsigned[int]20~65535,即216-1有符号短整型[signed]short[int]2-32768~32767,即-215~215-1无符号短整型unsignedshort[int]20~65535,即216-1有符号长整型[signed]long[int]4-2147483648~2147483647,即-231~231-1无符号长整型unsignedlong[int]40~4294967295,即0~232-1有符号双长整型[signed]longlong[int]8-9223372036854775808~9223372036854775807即-263~263-1无符号双长整型unsignedlonglong[int]80~18446744073709551615,即0~264-13.4.2浮点型数据浮点数的一般表示形式为:N=2E×D,其中,D称为尾数,E称为阶码表示形式3.4.2浮点型数据3.4.2浮点型数据类型类型字节数有效数字数值范围(绝对值)float46~70以及1.2×10-38~3.4×1038double815~160以及2.3×10-308~1.7×10308longdouble815~160以及2.3×10-308~1.7×103081619~200以及3.4×10-4932~1.1×1049323.4.2浮点型数据精度比较【例3.4】将同一个实型数分别赋值给单精度实型和双精度实型变量,然后输出结果。3.4.3字符型数据字符在计算机中是按其ASCII码形式存储的,因此C99把字符型数据作为整数类型的一种。存储形式注意:在编写程序中,不是任意的字符与字符代码程序都能识别。例如,圆周率π、≠、≤、≥等符号,在程序中是不能被识别的,因此在编写程序的时候,只能使用系统规定的字符集中的字符。3.4.3字符型数据字符变量使用关键字char定义。char是英文character(字符)的缩写。字符变量charcChar;/*定义字符型变量*/cChar=’?’;/*为字符变量赋值*/从字符变量的存储形式可以看出,cChar是字符变量,实际上是一个字节的整型变量,因为它常用来存放字符,所以称为字符变量。实际可以把0~127之间的整数赋值给一个字符变量。3.4.3字符型数据使用字符变量时,需要注意以下几方面:(1)用来存放字符常量,只能是一个字符。注意事项charc1,c2;c1='a';c2='A';charc1,c2;c1='ab';c2='AB';3.4.3字符型数据使用字符变量时,需要注意以下几方面:

(2)字符数据和整型数据之间可以通用,可以按字符形式输出,也可以按整型输出。注意事项3.4.3字符型数据使用字符变量时,需要注意以下几方面:(3)字符数据与整数直接进行算术运算。注意事项3.4.3字符型数据使用字符变量时,需要注意以下几方面:(4)字符数据与整型数据可互相赋值注意事项3.4.3字符型数据使用字符变量时,需要注意以下几方面:(5)由于字符型数据在内存中只占用一个字节,因此当大于255的整型数据赋给它时要产生溢出。(6)整型变量可以用signed和unsigned关键字修饰,字符型也属于整型,也可以使用signed和unsigned关键字修饰。注意事项3.4.4如何确定常量的类型常量的类型常量类型表示形式字符型由单撇号界定起来的单个字符或转义字符整型1.用不带小数点的合法数值表示,但是因为各种整型类型有取值范围。2.一个整数末尾如果加大写字母L或小写字母l,表示该数是长整型,如345l、345L等。鉴于VisualC++中int和longint型数据的取值范围一样,因此也没有必要非要选择longint型浮点型1.在浮点型的实型常量的末尾加专用字符,可以强制指定常量的类型。2.VisualC++编译系统把合法表示的浮点型中的实型常量末尾不加任何字符,都默认按照双精度处理,分配8个字节。3.在浮点型的实型常量的末尾加字母F或f,则表示是单精度float类型。4.在浮点型的实型常量的末尾加字母L或l,则表示是longdouble类型3.5运算符和表达式程序要进行计算除了需要数据之外,还需要什么?引题运算符表达式3.5运算符和表达式3.5.1运算符和表达式简介3.5.2算术运算符和算术表达式3.5.3赋值运算符和赋值表达式3.5.4逗号运算符和逗号表达式3.5.5位运算符与位运算表达式3.5.1运算符和表达式简介C语言提供了34种运算符(附录B,303页)运算符按照操作数的个数分为单目运算符、双目运算符和三目运算符运算符的运算优先级共分为15级。1级最高,15级最低运算符的结合性表明运算时的结合方向。有两种结合方向:一种是左结合,即从左向右计算;一种是右结合,即从右向左计算。运算符3.5.1运算符和表达式简介左结合右结合运算符的结合性例如,算术运算符的结合性是自左至右,即先左后右。如有表达式a-b+c则b应先与“-”号结合,执行a-b运算,然后再执行+c的运算。最典型的右结合性运算符是赋值运算符。如a=b=c,由于“=”的右结合性,应先执行b=c再执行a=(b=c)运算。3.5.1运算符和表达式简介由运算符及操作数组成的式子。操作数也称为运算对象,它既可以是常量、变量,也可以是函数调用。根据运算符的种类,可以分成不同类别的表达式。算术运算符和算术表达式、赋值运算符和赋值表达式、逗号运算符和逗号表达式、位运算符与位运算表达式表达式3.5.2算术运算符和算术表达式1.基本算术运算符符号含义类别优先级结合性-取相反数单目2右结合*乘法双目3左结合/除法双目3左结合%求余双目3左结合+加法双目4左结合-减法双目4左结合3.5.2算术运算符和算术表达式“/”运算符除法运算的两个操作数都是整数,则除法运算相当于数学中的取整,结果仍为整数。1.基本算术运算符例如,3/4与3.0/4的结果是不相同的,3/4=0,3.0/4=0.75。所以除法可以分为整数除法和浮点数除法。两个操作数中只要有一个数是浮点数,则可以按照浮点数除法对待。特别注意例如,在VisualC++6.0编译环境下4/-3=-1 -4/3=-1 -4/-3=1 4/3=13.5.2算术运算符和算术表达式“%”求余运算限制求余运算的两个操作数必须为整数,不能对两个实型数进行求余运算。其中求余运算符的左操作数作为被除数,右操作数作为除数,两个数整除后的余数即为求余运算的结果,其中余数的符号与被除数的符号相同。1.基本算术运算符例如,在VisualC++6.0编译环境下,求余的计算结果:13%4=1,13%-4=1,-13%4=-1,-13%-4=-1。特别注意3.5.2算术运算符和算术表达式表达式先使用优先级高的运算符,相同优先级的运算符进行混合运算时,需要考虑运算符的结合性。1.基本算术运算符例如,算术表达式:-2*8/4%3+10-6式子等价于(((-2)*8)/4)%3+10-6,式子的结果值是3。?给出一个3位数,如123,如何计算出这个3位数的个位、十位、百位?3.5.2算术运算符和算术表达式对变量的加1和减1,是一种很常见的运算2.自增自减运算符优先级结合性符号含义类别例子2右结合++自增运算符单目运算符i++++i2右结合--自增运算符单目运算符i----i3.5.2算术运算符和算术表达式对变量的加1和减1,是一种很常见的运算++i,--i:在使用i之前,先使i的值加(减)1i++,i--:在使用i之后,使i的值加(减)12.自增自减运算符m=++i;<=>i=i+1;

m=i;m=i++;<=>m=i;i=i+1;下面的语句尽量少用,可读性差,并且环境不同,计算结果可能不同。M=++a+a++-a--;通常良好的编程风格提倡在一行语句中一个变量最多只出现一次自增或自减运算符。因为过多的自增1和自减1混合运算,会导致程序的可读性变差。3.5.3赋值运算符和赋值表达式符号及含义优先级结合性符号含义类别例子14右结合=简单赋值运算符双目x=a+b+=复合赋值运算符双目x+=ax=x+a-=双目x-=ax=x-a*=双目x*=ax=x*a/=双目x/=ax=x/a%=双目x%=ax=x%a<<=双目x<<=ax=x<<a>>=双目x>>=ax=x>>a&=双目x&=ax=x&a∧=双目x∧=ax=x∧a|=双目x|=ax=x|a3.5.3赋值运算符和赋值表达式赋值表达式简单赋值运算符很简单,赋值表达式的一般形式是:变量名=表达式右侧表达式的值赋值给左侧的变量,因此“=”号左侧不允许是表达式。例如,在C语言中x+y=z是错误的,虽然该式子在数学中是正确的。3.5.3赋值运算符和赋值表达式注意+=、-=、*=、/=、%=之间不能有空格。复合赋值运算符注:在数学中i=i+1是无意义的且不成立,而在C语言中是有意义的,其意思是取出i的值后加1,然后再赋值给i(存入i所在的存储单元)3.5.3赋值运算符和赋值表达式复合赋值表达式复合赋值表达式的一般等价形式:变量名

其他运算符=表达式

等价于

变量名=变量名其他运算符(表达式)例如,表达式x*=y+1等价于x=x*(y+1)思考:已知变量sum的初值为5,请思考表达式sum+=sum*=sum%3求解之后变量sum的值。答案:203.5.4逗号运算符和逗号表达式逗号表达式逗号表达式的一般形式为:表达式1,表达式2,…,表达式n逗号表达式的求解过程是:先求解表达式1,再求解表达式2,…,一直求解到表达式n。整个逗号表达式的值是表达式n的值。逗号运算符的优先级是15,在所有基本运算符中优先级是最低的。逗号运算符的结合性是左结合。逗号运算符通常配合for循环使用。for(sum=0,i=0;i<100;i++){……..}3.5.4逗号运算符和逗号表达式逗号表达式对于逗号表达式还要说明以下两点:(1)程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。(2)并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。3.5.4逗号运算符和逗号表达式逗号表达式请计算变量a1和变量a2的值。inta1,a2,b=2,c=7,d=5;

a1=(b+1,c-1,d+3); //变量a1的赋值语句a2=b+1,c-1,d+3; //变量a2的赋值语句答案:a1=8a2=33.5.5位运算符与位运算表达式符号含义类别优先级结合性~取反单目运算符2右结合<<

左移双目运算符5左结合>>

右移双目运算符5左结合&按位与双目运算符8左结合^按位异或双目运算符9左结合|按位或双目运算符10左结合3.5.5位运算符与位运算表达式1.取反运算符取反运算符“~”是单目运算符,具有右结合性。其功能是对参与运算的数的各二进制位按位求反,即将二进制位的0变为1,1变为0。例如,~(1001)2=(0110)2。3.5.5位运算符与位运算表达式1.取反运算符【例3.5】使用程序实现把整数b赋值为由整数a进行取反后的结果。3.5.5位运算符与位运算表达式2.左移运算符左移运算符“<<”是双目运算符。其功能把“<<”左边的运算数的各二进制位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。例如:若a=00000011(十进制数3),左移4位后为00110000(十进制数48)。3.5.5位运算符与位运算表达式2.左移运算符左移一位相当于该数乘以2,左移2位相当于该数乘以22=4。(此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况)3.5.5位运算符与位运算表达式3.右移运算符右移运算符“>>”是双目运算符。其功能是把“>>”左边的运算数的各二进制位全部右移若干位,“>>”右边的数指定移动的位数。例如,a>>2指把a的各二进制位向右移动2位。若a=000001111(十进制数15),左移2位后为00000011(十进制数3)。3.5.5位运算符与位运算表达式4.按位与运算符按位与运算符“&”是双目运算符。其功能是参与运算的两个数各对应的二进制位相与。只有对应的两个二进制位均为1时,结果位才为1,否则为0。注意参与运算的数以补码方式出现。例如,3&4(假设以一个字节存储一个整数)。00000011&0000010000000000由此得3&4=0。按位与运算通常用来对某些位清0或保留某些位。3.5.5位运算符与位运算表达式5.按位异或运算符按位异或运算符“^”是双目运算符。其功能是参与运算的两个数各对应的二进制位相异或。运算法则是当两个数对应的二进制位相异时,结果为1。参与运算数仍以补码出现。例如,3^4的计算方法如下(假设以一个字节存储一个整数)。00000011^0000010000000111由此得3^4=7。异或运算符可以用来将一个数据的某些特定位取反3.5.5位运算符与位运算表达式6.按位或运算符按位或运算符“|”是双目运算符。其功能是参与运算的两个数各对应的二进制位相或。运算法则是只要对应的两个二进制位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。例如,3|4(假设以一个字节存储一个整数)。00000011|0000010000000111由此得3|4=7。按位或运算可以将一个数的某些制定的位设置为13.6类型转换在实际计算中,所有操作数的数据类型都一样么?比如:S=3.14*5*5;结果应该是什么类型呢?引题3.6类型转换隐含类型转换在运算中类型转换由计算机自动完成,所以也被称为自动类型转换。强制类型转换通过类型转换运算来实现。分类3.6.1隐含类型转换类型级别从高到低的顺序是longdouble、double、float、unsignedlonglong、longlong、unsignedlong、long、unsignedint和int。转换按数据长度增加的方向进行,以保证精度不降低。在包含两种类型的任何运算里,两个值都转换成两种类型里较高级别。有符号和无符号的char和short类型都将自动转换为int。在赋值语句中,计算的最后结果被转换成将要被赋值的那个变量的类型。当作为函数的参数被传递时,char和short会被转换为int,float会被转换为double。转换规则3.6.1隐含类型转换转换规则精度低精度高字节数少字节数多小类型大类型范围小范围大例:inti=10;long

温馨提示

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

评论

0/150

提交评论