《c语言-第二章基本数据类型.ppt》由会员分享,可在线阅读,更多相关《c语言-第二章基本数据类型.ppt(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、比比培训_C语言程序设计第二章基本数据类型本章主要任务:1、了解C语言丰富的数据类型;常量、变量的概念。2、掌握变量定义原则和符号常量定义方法。3、掌握常用基本数据类型(整型、实型、字符型)数据的常量表示、机内存储、变量分类以及掌握正确选择数据类型。4、了解数值型数据混合运算及类型转换规律。5、了解:C语言的丰富运算符,丰富的运算符可以构成灵活的表达式。6、掌握算术、赋值、逗号运算符及它们构成的表达式。7、掌握运算符的优先级、结合性规律。比比培训_C语言程序设计一、C C的数据类型数据类型总表C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum
2、整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作比比培训_C语言程序设计基本数据类型类型符号关键字数的表示范围所占位数(signed)int16-3276832767-215(215-1)(signed)short16-3276832767(signed)long32-2147483648214748364716unsignedint0655350(216-1)3204294967295unsignedlongunsignedshort1606553
3、5有Float(有效数字67位)323.4e-383.4e38有double(有效数字1516位)641.7e-3081.7e308有char8-128127无unsignedchar80255整型字符型实型有无说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例:比比培训_C语言程序设计0111111111111111int型:最大:327671000000000000000最小:-327681111111111111111unsignedint型:最大:655350000000000000000最小:0比比培训_C语言程序设计一、C的数据类型说明(1)数据有类型。(2)不同
4、的数据类型有不同的取值范围。如有符号整数取值范围-3276832767,浮点数-3.4e-383.4e38。(3)不同的数据类型有不同的操作。如整型数可以取余操作,实型数据却不行;整型、实型数据可以有加法,字符数组不行。(4)不同的数据类型即使有相同的操作有时含义也不同,如指针数据自增1与整数自增1含义是不同的。比比培训_C语言程序设计一、C的数据类型(5)C语言的数据类型可以构造复杂的数据结构。如使用结构体数组可以构造线性表。使用指针类型、结构体类型可以构造线性链表(栈、队列)、树、图。(6)C语言中的数据有变量与常量,它们分别属于上述这些类型。比比培训_C语言程序设计0、标识符定义:用来标
5、识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长32个字符命名原则:见名知意不宜混淆如l与I,o与0例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3charab_above$1233days#33char$123ab比比培训_C语言程序设计二、常量与变量1、常量(1)定义在程序的运行过程中,其值不能改变的量称为常量。比比培训_C语言程序设计二、常量与变量(2)常量类型如:12、0、-3为整型常量4.6、-1.23为实型常量a、d字符
6、常量。常量可以从字面形式即可判断-字面常量或直接常量。比比培训_C语言程序设计二、常量与变量(3)符号常量#definePI3.1416使用符号常量的好处:含义清楚、见名知意。修改方便、一改全改。例2-1:符号常量应用#definePI3.14voidmain()floatarea;area=10*10*PI;printf(area=%fn,area);结果:area=314.000000比比培训_C语言程序设计二、常量与变量2、变量(1)定义在程序的运行过程中,其值可以改变的量称为变量。比比培训_C语言程序设计二、常量与变量(2)变量名(用标识符表示)、变量在内存中占据的存储单元、变量值三者
7、关系。变量名在程序运行过程中不会改变,变量的值可以改变。变量名遵守标识符准则。比比培训_C语言程序设计二、常量与变量(2)C语言中变量:“先定义,后使用”。C要求对所有用到的变量做强制定义。只有申明过的变量才可以在程序中使用,这使得变量名的拼写错误容易发现。申明的变量属于确定的类型,编译系统可方便地检查变量所进行运算的合法性。在编译时根据变量类型可以为变量确定存储空间,“先定义后使用”使程序效率高。比比培训_C语言程序设计三、整型数据1、整型常数的表示方法1)十进制。123,-456,0。2)八进制。以0开头,后面跟几位的数字(0-7)。0123=(123)8=(83)10;-011=(-11
8、)8=(-9)10。3)十六进制。以0 x开头,后面跟几位的数字(0-9,A-F)。0 x123=291,-0 x12=-18。比比培训_C语言程序设计三、整型数据2、整型变量(1)整型数据在内存中的存放形式数据在内存中以二进制形式存放,事实上以补码形式存放。比比培训_C语言程序设计三、整型数据例如:定义一个整型变量i=10。其内存模型如下:比比培训_C语言程序设计三、整型数据(2)整型变量的分类1)根据表达范围可以分为:基本整型(int)、短整型(shortint)、长整型(longint)。用long型可以获得大范围的整数,但同时会降低运算速度。2)根据是否有符号可以分为:有符号(sign
9、ed,默认),无符号(unsigned)-目的:扩大表示范围,有些情况只需要用正整数。比比培训_C语言程序设计三、整型数据6种整型变量:l有符号基本整型:signedintl有符号短整型:signedshortintl有符号长整型:signedlongintl无符号基本整型:unsignedintl无符号短整型:unsignedshortintl无符号长整型:unsignedlongint比比培训_C语言程序设计三、整型数据例如:保存整数13的各种整型数据类型。比比培训_C语言程序设计三、整型数据比比培训_C语言程序设计三、整型数据(3)整型变量的定义格式:数据类型名变量名表;例如:voidm
10、ain()inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“%d,%dn”,c,d);比比培训_C语言程序设计三、整型数据说明:(1)变量定义时,可以说明多个相同类型的变量。各个变量用“,”分隔。类型说明与变量名之间至少有一个空格间隔。(2)最后一个变量名之后必须用“;”结尾。(3)变量说明必须在变量使用之前。(4)可以在定义变量的同时,对变量进行初始化。比比培训_C语言程序设计三、整型数据(4)整型数据的溢出整型数最大允许值+1,最小允许值-1,会出现什么情况?结论:超出范围就发生“溢出”,运行时不报错。例2-2a:整型数据的溢
11、出voidmain()inta,b;a=32767;b=a+1;printf(na=%d,a+1=%dn,a,b);a=-32768;b=a-1;printf(na=%d,a-1=%dn,a,b);getch();a=32767,a+1=-32768a=-32768,a-1=32767比比培训_C语言程序设计四、实型数据1、实型常量的表示方法(1)十进制小数形式。由数字,小数点组成(必须有小数点)。例如:.123、123.、123.0、0.0(2)指数形式。格式:aEn。例如:123e3、123E3都是实数的合法表示。比比培训_C语言程序设计四、实型数据说明:1)字母e或E之前必须有数字,e后
12、面的指数必须为整数。例如:e3、2.1e3.5、.e3、e都不是合法的指数形式。2)规范化的指数形式。在字母e或E之前的小数部分,小数点左边应当有且只能有一位非0数字。用指数形式输出时,是按规范化的指数形式输出的。例如:2.3478e2、3.0999E5、6.46832e12都属于规范化的指数形式。3)实型常量都是双精度,如果要指定它为单精度,可以加后缀f(实型数据类型参看实型变量部分说明)。比比培训_C语言程序设计四、实型数据2、实型变量(1)实型数据在内存中的存放形式一个实型数据一般在内存中占4个字节(32位)。与整数存储方式不同,实型数据是按照指数形式存储的。系统将实型数据分为小数部分和
13、指数部分,分别存放。比比培训_C语言程序设计四、实型数据(2)实型变量的分类单精度(float)、双精度(double)、长双精度(longdouble)。类型比特数有效数字数值范围float326-7-3.4x10+383.4x10+38double6415-16-1.7x10+3081.7x10+308longdouble12818-19-1.2x10+49321.2x10+4932比比培训_C语言程序设计四、实型数据(3)实型数据的舍入误差实型变量是用有限的存储单元存储的,因此提供的有效数字是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。例2-3a:实型数据的舍入误差(实型
14、变量只能保证7位有效数字,后面的数字无意义)voidmain()floata,b;a=123456.789e5;b=a+20;printf(a=%f,b=%fn,a,b);printf(a=%e,b=%en,a,b);a=1.23457e+10,b=1.23457e+10比比培训_C语言程序设计四、实型数据结论:由于实数存在舍入误差,使用时要注意:(1)不要试图用一个实数精确表示一个大整数,记住:浮点数是不精确的。(2)实数一般不判断“相等”,而是判断接近或近似。(3)避免直接将一个很大的实数与一个很小的实数相加、相减,否则会“丢失”小的数。(4)根据要求选择单精度、双精度。比比培训_C语言程
15、序设计五、字符型数据1、字符常量(1)定义用单引号()括起来的一个字符。比比培训_C语言程序设计五、字符型数据(2)形式:1)可显示的字符常量直接用单引号括起来,如,a、D、?、$等都是字符常量。2)使用字符的转义表示法表示转义表示格式:ddd或xhh(其中ddd,hh是字符的ASCII码,ddd八进制、hh十六进制)。注意:不可写成0 xhh或0ddd(整数)。比比培训_C语言程序设计五、字符型数据(3)预定义常用转义字符比比培训_C语言程序设计五、字符型数据2、字符变量(1)定义字符型变量是用来存放字符数据,同时只能存放一个字符。所有编译系统都规定以一个字节来存放一个字符,或者说,一个字符
16、变量在内存中占一个字节。比比培训_C语言程序设计五、字符型数据3、字符数据在内存中的存储形式字符数据在内存中的存储形式:以字符的ASCII码,以二进制形式存放,占用1个字节。比比培训_C语言程序设计五、字符型数据说明:1)字符数据以ASCII码存储的形式与整数的存储形式类似,这使得字符型数据和整型数据之间可以通用(当作整型量)。2)可以将整型量赋值给字符变量,也可以将字符量赋值给整型变量。3)可以对字符数据进行算术运算,相当于对它们的ASCII码进行算术运算。4)一个字符数据既可以以字符形式输出(ASCII码对应的字符),也可以以整数形式输出(直接输出ASCII码)。比比培训_C语言程序设计五
17、、字符型数据例2-7a:给字符变量赋以整数(字符型、整型数据通用)voidmain()/*字符a的各种表达方法*/charc1=a;charc2=x61;/*note:x.,.*/charc3=141;charc4=97;charc5=0 x61;/*note:0 x.,0.*/charc6=0141;printf(nc1=%c,c2=%c,c3=%c,c4=%c,c5=%c,c6=%cn,c1,c2,c3,c4,c5,c6);printf(c1=%d,c2=%d,c3=%d,c4=%d,c5=%d,c6=%dn,c1,c2,c3,c4,c5,c6);getch();c1=a,c2=a,c3=
18、a,c4=a,c5=a,c6=ac1=97,c2=97,c3=97,c4=97,c5=97,c6=97过程:整型数=机内表示(两个字节)=取低8位赋值给字符变量比比培训_C语言程序设计五、字符型数据例2-8a:大小写字母的转换(ASCII码表:小写字母比对应的大写字母的ASCII码大32,本例还可以看出允许字符数据与整数直接进行算术运算,运算时字符数据用ASCII码值参与运算)voidmain()charc1,c2,c3;c1=a;c2=b;c1=c1-32;c2=c2-32;c3=130;printf(n%c%c%cn,c1,c2,c3);printf(%d%d%dn,c1,c2,c3);g
19、etch();AB?6566-126比比培训_C语言程序设计五、字符型数据4、字符串常量(1)定义是一对双引号(“”)括起来的字符序列。例如:“Howdowyoudo?”,“CHINA”,“a”,“$123.45”.比比培训_C语言程序设计五、字符型数据(2)区分字符常量与字符串常量如“a”和a。C语言规定:在每个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以0(ASCII码为0的字符)作为字符串结束标志。比比培训_C语言程序设计五、字符型数据如:“CHINA”在内存中的存储应当是:(长度=6)比比培训_C语言程序设计五、字符型数据(3)不能将字符串赋给字符变量
20、。(4)C语言没有专门的字符串变量,如果想将一个字符串存放在变量中,可以使用字符数组。即用一个字符数组来存放一个字符串,数组中每一个元素存放一个字符。比比培训_C语言程序设计六、各数值型数据的混合运算整型(包括int,short,long)和实型(包括float,double)数据可以混合运算,另外字符型数据和整型数据可以通用,因此,整型、实型、字符型数据之间可以混合运算。例如:表达式10+a+1.5-8765.1234*b是合法的。在进行运算时,不同类型的数据先转换成同一类型,然后进行计算,转换的方法有两种:自动转换(隐式转换);强制转换。比比培训_C语言程序设计六、各数值型数据的混合运算1
21、、自动动转换(隐式转换)自动转换发生在不同类型数据进行混合运算时,由编译系统自动完成。比比培训_C语言程序设计六、各数值型数据的混合运算转换规则:比比培训_C语言程序设计六、各数值型数据的混合运算1)类型不同,先转换为同一类型,然后进行运算。2)图中纵向的箭头表示当运算对象为不同类型时转换的方向。可以看到箭头由低级别数据类型指向高级别数据类型,即数据总是由低级别向高级别转换。即按数据长度增加的方向进行,保证精度不降低。比比培训_C语言程序设计六、各数值型数据的混合运算3)图中横向向左的箭头表示必定的转换(不必考虑其它运算对象)。4)赋值运算,如果赋值号“=”两边的数据类型不同,赋值号右边的类型
22、转换为左边的类型。这种转换是截断型的转换,不会四舍五入。比比培训_C语言程序设计六、各数值型数据的混合运算强制转换是通过类型转换运算来实现。一般形式:(类型说明符)表达式功能:把表达式的结果强制转换为类型说明符所表示的类型。比比培训_C语言程序设计六、各数值型数据的混合运算例如:(int)a 将a的结果强制转换为整型量。(int)(x+y)将x+y的结果强制转换为整型量。(float)a+b将a的内容强制转换为浮点数,再与b相加。比比培训_C语言程序设计六、各数值型数据的混合运算说明:1)类型说明和表达式都需要加括号(单个变量可以不加括号)2)无论隐式转换,强制转换都是临时转换,不改变数据本身
23、的类型和值。比比培训_C语言程序设计六、各数值型数据的混合运算voidmain()floatf=5.75;printf(int)f=%dn,(int)f);/*将f的结果强制转换为整型,输出*/printf(f=%fn,f);/*输出f的值*/结果:(int)f=5f=5.750000比比培训_C语言程序设计七、C运算符简介运算符:狭义的运算符是表示各种运算的符号。表达式:使用运算符将常量、变量、函数连接起来,构成表达式。比比培训_C语言程序设计七、C运算符简介C的运算符有以下几类:比比培训_C语言程序设计八、算术运算符和算术表达式1、算术运算符+(加法运算符。如3+5)-(减法运算符或负值运
24、算符。如5-2,-3)*(乘法运算符。如3*5)/(除法运算符。如5/3,5.0/3)%(模运算符或求余运算符,%要求两侧均为整型数据。如7%4的值为3)。除了负值运算符-单目运算符外,其它都是双目运算符。比比培训_C语言程序设计说明(1)两个整数相除的结果为整数,如5/3的结果为1,舍去小数部分。但是如果除数或被除数中有一个为负值,则舍入的方向是不固定的,多数机器采用“向0取整”的方法(实际上就是舍去小数部分,注意:不是四舍五入)。比比培训_C语言程序设计说明比比培训_C语言程序设计说明(2)如果参加+,-,*,/运算的两个数有一个为实数,则结果为double型,因为所有实数都按double
25、型进行计算。(3)求余运算符%,要求两个操作数均为整型,结果为两数相除所得的余数。求余也称为求模。一般情况,余数的符号与被除数符号相同。比比培训_C语言程序设计2、算术表达式用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为算术表达式。运算对象可以是常量、变量、函数等。例如:a*b/c-1.5+a比比培训_C语言程序设计注意:(1)C语言算术表达式的乘号(*)不能省略。例如:数学式b2-4ac,相应的C表达式应该写成:b*b-4*a*c。(2)C语言表达式中只能出现字符集允许的字符。例如,数学r2相应的C表达式应该写成:PI*r*r。(其中PI是已经定义的符号常量
26、)比比培训_C语言程序设计(3)C语言算术表达式不允许有分子分母的形式。例如,(a+b)/(c+d)。(4)C语言算术表达式只使用圆括号改变运算的优先顺序(不要指望用)。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。比比培训_C语言程序设计3、(算术)运算符的优先级与结合性C语言规定了进行表达式求值过程中,各运算符的“优先级”和“结合性”。比比培训_C语言程序设计(1)C语言规定了运算符的“优先级”和“结合性”。在表达式求值时,先按运算符的“优先级别”高低次序执行。如表达式:a-b*c等价于a-(b*c)“*”运算符优先级高于“-”运算符。比比培训
27、_C语言程序设计(2)如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。例如:a-b+c,到底是(a-b)+c还是a-(b+c)?(b先与a参与运算还是先于c参与运算?)+/-运算优先级别相同,结合性为“自左向右”,即就是说b先与左边的a结合。所以a-b+c等价于(a-b)+c。比比培训_C语言程序设计(3)在书写多个运算符的表达式时,应当注意各个运算符的优先级,确保表达式中的运算符能以正确的顺序参与运算。对于复杂表达式为了清晰起见可以加圆括号“()”强制规定计算顺序。比比培训_C语言程序设计九、赋值运算符和赋值表达式1、赋值运算符、赋值表达式赋值运算符:赋值符号“=”
28、就是赋值运算符。赋值表达式:由赋值运算符组成的表达式称为赋值表达式。一般形式:变量赋值符表达式比比培训_C语言程序设计赋值表达式的求解过程:将赋值运算符右侧的表达式的值赋给左侧的变量,同时整个赋值表达式的值就是刚才所赋的值。赋值的含义:将赋值运算符右边的表达式的值存放到左边变量名标识的存储单元中。例如:x=10+y;执行赋值运算(操作),将10+y的值赋给变量x,同时整个表达式的值就是刚才所赋的值。比比培训_C语言程序设计说明:(1)赋值运算符左边必须是变量,右边可以是常量、变量、函数调用或常量、变量、函数调用组成的表达式。例如:x=10y=x+10y=func()都是合法的赋值表达式。比比培
29、训_C语言程序设计(2)赋值符号“=”不同于数学的等号,它没有相等的含义。(“=”相等)例如:C语言中x=x+1是合法的(数学上不合法),它的含义是取出变量x的值加1,再存放到变量x中。比比培训_C语言程序设计(3)赋值运算时,当赋值运算符两边数据类型不同时,将由系统自动进行类型转换。转换原则:先将赋值号右边表达式类型转换为左边变量的类型,然后赋值。比比培训_C语言程序设计(4)C语言的赋值符号“=”除了表示一个赋值操作外,还是一个运算符,也就是说赋值运算符完成赋值操作后,整个赋值表达式还会产生一个所赋的值,这个值还可以利用。赋值表达式的求解过程是:l先计算赋值运算符右侧的“表达式”的值l将赋
30、值运算符右侧“表达式”的值赋值给左侧的变量。整个赋值表达式的值就是被赋值变量的值。比比培训_C语言程序设计应用举例例如:分析x=y=z=3+5这个表达式。运算步骤:比比培训_C语言程序设计2、复合赋值运算符+=,-=,*=,/=,%=,=,&=,|=,=例如:n+=1等价于n=n+1x*=y+1 等价于x=x*(y+1)注意:赋值运算符、复合赋值运算符的优先级比算术运算符低。比比培训_C语言程序设计3、自增、自减运算符单目运算符,使变量的值增1或减1。如:+i,i+,-i,i比比培训_C语言程序设计说明:(1)+i,-i(前置运算):先自增、减,再参与运算;(后置运算):先参与运算,再自增、减
31、。例如:i=3时,分析j=+i;j=i+;的区别。比比培训_C语言程序设计(2)自增、减运算符只用于变量,而不能用于常量或表达式。例如:6+,(a+b)+,(-i)+都不合法。比比培训_C语言程序设计(3)+,-的结合方向是“自右向左”(与一般算术运算符不同)。例如:-i+-(i+)合法。比比培训_C语言程序设计(4)自增、自减运算符常用于循环语句中,使循环变量自动加1,也用于指针变量,使指针指向下一个地址。比比培训_C语言程序设计十、逗号运算符和逗号表达式1、逗号表达式的一般形式:表达式1,表达式2,表达式n例如:3+5,6+8比比培训_C语言程序设计2、逗号表达式的求解过程:自左向右,求解表达式1,求解表达式2,求解表达式n。整个逗号表达式的值是表达式n的值。例如:逗号表达式3+5,6+8的值为14。比比培训_C语言程序设计voidmain()intx,a;x=(a=3,6*3);/*a=3x=18*/printf(%d,%dn,a,x);x=a=3,6*a;/*a=3x=3*/printf(%d,%dn,a,x);输出:3,183,3比比培训_C语言程序设计3、逗号表达式主要作用:将若干表达式“串联”起来,表示一个顺序的操作(计算),在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值。