单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二章 数据类型与运算规则,基本数据类型与特点,各种数据类型表示范围,常量的表示方法,变量说明语句,运算符与基本运算规则,本 章 要 点,第二章 数据类型和运算规则,$1,数据与数据类型,$2,常量与常量定义,$3,变量与变量说明,2-1 数据与数据类型,数据,程序操作的对象和产生的结果,。,数据类型,指数据的内在表现形式,亦指,数据在计算机内部的存储形式(占用的,内存单元数量,、,编码方式,、,取值范围,等)。,常量,在程序运行过程中,不允许改变,的量。,变量,在程序运行过程中,允许改变,的量。,基本概念,基本类型,字符型,char,整型,int,浮点型,单精度,float,双精度,double,指针类型,构造类型,数组,结构,struct,联合,union,枚举 enum,无值类型,指针类型,C语言的数据类型,本章,C,语言基本数据类型有,四种,:,字符型,整型,单精度浮点型,双精度浮点型,char,int,float,double,类型说明符,C,语言有,四种,类型修饰符:,短,长,有符号,无符号,short,long,signed,unsigned,类型修饰符,基本数据类型,决定数据所占,存储,空间的大小,和,数据,的范围,类型,符号,关键字,数的表示范围,所占位数,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(signed),int,16,-3276832767,(,signed),short,16,-3276832767,(signed),long,32,-21474836482147483647,16,unsigned,int,065535,32,04294967295,unsigned,long,unsigned,short,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,signed char,8,-128127,无,unsigned char,8,0255,说明,:数据类型所占字节数随机器硬件不同而不同:,不同类型机器所对应的不同形式整型数据的存储情况,2-2 常量与常量定义,整型常量,即整常数,(3,种形式,),10,进制,8,进制,16,进制,实型常量,即浮点数,(2,种形式,),十进制,指数,字符常量,字符串常量,:0,9,:0,7,以数字,0,开头,:0,9,,A,F/a,f,,以,0 x,或,0X,开头,:符号,、,整数、,小数点,和小数,:用,e,或,E,和表示指数部分,常量,整型常量的不同表示方法:,10,进制:,100 -8 0 +123,8,进制:,010 024 0100,16,进制:,0 x38 0 x10 0X10 0XFF 0 xa,整型常量的类型:,1.,在整型表示范围之内,根据值大小默认类型,2.,在常量后面加,l,或,L,,,则认为它是,long int,型,例如:,都是,long,int,型常量,10,进制:,-123L 0L 432l,8,进制:,010L 024L 0100L,16,进制:,0 x38L 0 x1000L 0XFFl 0 xa0000l,例 30000 为int,型,65536 为long int 型,整型数据的存储,整数占2个字节,1 000 0001 1000 0001,0 000 0001 1000 0001,符号位,1:负数,0:正数,整型数据在计算机中以,补码,形式存储,正数的原码、反码和补码相同,1的补码 0 000 0000 0000 0001,32767的补码 0 111 1111 1111 1111,(2,15,-1),负数 -1,原码 1 000 0000 0000 0001,反码 1 111 1111 1111 1110 原码取反,补码 1 111 1111 1111 1111 反码1,实型常量的不同表示方法:,十进制小数形式:(必须有小数点),1.0 1.+12.0 -12.0 0.0,指数形式,(,e,或,E,前,后,必须有数字;指数必须为整数),1e3 1.8e-3 -123e-6,等价于:,1000 1.8*10,-3,-123*10,-6,-.1,e-3 .1E-10,等价于:,-0.1*10,-3,0.1*10,-10,实型常量的类型,默认,double,型,;,在,实型常量后加字母,f,或,F,,,认为它是,float,型,长双精度型常量由常量值后跟,L,或,l,来表示,字符型常量:用,一对单引号,括起来的,单个,(,可显示,),字符,实例:,A,g,#,0,2,+,;(),字符定界符:,单引号,字符型数据的存储格式:,每个字符占用一个字节,存储该字符的,ASCII,码,(,见书附录),每个字符:惟一的次序值(ASCII码),字符,ASCII,码 内存,A 65 0100 0001,B 66 0100 0010,字符的数值特征,字符可以当整数用,,ASCII,码,A+1=,?,如何表示不可显示字符?,回车/退格/TAB?,如何表示定界符?,“,产生歧异,转义符,:将,后面的字符转换为其它含义,字符形式 功能 使用举例,n 换行(,ASCII码为10)printf(,”,n,”,);,t 横向跳格,printf(,”,t,”,);,b 退格,r 回车(,ASCII码为13),f 走纸换页,字符(,ASCII码为92),表示字符,单引号 ,表示字符,”双引号 ,”表示字符”,ddd 用8进制表示字符,a,=,141,A,=,101,x,hh 用16进制表示字符,a,=,x,61,A,=,x,41,输出格式控制,输,出,字,符,注意:,转义符实际作为,一个字符,来对待.,若反斜线之后的字符和它不构成转义序列,则不起转义作用,将被忽略,.,语句printf(“ANbcnDEFn”);,printf(“tabrcdnefghx”);,根据其范围,分为三类:,基本整型(,int,)短整型(,short int,)长整型(,long int,),2byte,2byte,4byte,为了充分利用变量的表达范围,又可以将变量定义为:,有符号数(,signed,),(,可省略,),无符号数(,unsigned,),4,字节存储,8,字节存储,16,字节存储,main(),int i;,i=1;,i=i*2;printf(”n i=%d”,i);,i=i*3;printf(”n i=%d”,i);,i=i*4;printf(”n i=%d”,i);,i=i*5;printf(”n i=%d”,i);,i=i*6;printf(”n i=%d”,i);,i=i*7;printf(”n i=%d”,i);,i=i*8;printf(”n i=%d”,i);,i=i*9;printf(”n i=%d”,i);,i=i*10;printf(”n i=%d”,i);,期望结果,i=2,i=6,i=24,i=120,i=720,i=5040,i=40320,i=362880,i=3628800,实际运行结果,i=2,i=6,i=24,i=120,i=720,i=5040,i,=-25216,i,=-30336,i=,24320,产生数据溢出,上溢,下溢,数据精度 取值范围,单精度 67位有效数字 3.4e-38 3.4e+38,双精度 1516位有效数字 1.7e-308 1.7e+308,长双精度,1819位有效数字 1.2e-4931 1.2e4932,实型变量,数据精度,与,取值范围,是两个不同的概念:,float x=1.23456789;,float y=123456789;,虽在数据表示范围内,但无法精确表达。,float z=1.2e55,z的精度要求不高,但数据表示范围超出。,并不是所有的实数都能在计算机中精确表示。,x=1.234568,y=1.234567e8,假定float的精度为7位,double的精度为16位,#include,main(),float x=0.0;,double y=0.0;,int i=1;,while(i=10000),x=x+100000;,y=y+100000;,i=i+1;,x=x/100000;,y=y/100000;,printf(x=%f,y=%fn,x,y);,运行结果为:,x=9998.517578,y=10000.00000,虽然实型数据的表示形式有两种,但在内存中,均是以,指数形式,存放,数,小数,阶符,指数,有效位数,数值范围,例:指数表示,3.14159,+0.314159 +1,规格化:小数点在第一个,有效数字前面;小数部分,小于1的纯小数,字符变量,char,c1,c2,c3;,c1=2;,c2=#;,c3=A;,或,c3=65;,int,i;,i=65;,或,i=A;,整型变量和字符变量的定义和赋值可以互换,【,ASCII,码,范围,】,通过关键字,char,来说明,例,main(),char c1,c2;,c1=a;,c2=A;,printf(“c1=%c,c2=%cn”,c1,c2);,printf(“c1=%d,c2=%dn”,c1,c2);,程序输出为:,c1=a,c2=A 说明:字符数据与整型数据之间可以相互赋值。,c1=97,c2=65 字符数据可以以字符或整型数据两种方式,输出。,变量在说明之后,没有固定的初始值,,,要,先,赋值(给定一个初始值),,后,使用。,变量赋初值,将变量说明与赋初值合一,在说明变量时同时完成。,实例,char cc=a,sex=f,;,int x=10,y=,-,10,z;,double try=28.5,w=1e10;,变量赋初值,让变量使用之前有值,初始化,方法,int a=5;,int a,b,c=5;,int a=b=c=5;,初始化不是在编译时进行,而是在程序运行时完成的。,定义变量的同时为其赋值称初始化,变量的,4,个属性:,变量,名称,:,编程时使用(进行编程,按名引用),变量,数据类型,:,编程和运行时使用(决定占用多少存储单元),变量的,值,:,程序运行时使用(进行运算),变量,地址,:,程序运行时,要将变量的,值,保存在计算机的存储单元中,每个存储单元都有唯一的内存地址。变量,在内存中占据的存储单元的地址,就是,变量的地址,。,指针:变量的,地址,一般变量:存储变量的,值,指针变量:保存变量,地址,的变量,指针与指针变量,指针变量说明:,数据类型,*,变量名,;,例:有变量说明语句:,char,c=,A,;,若变量,c,在内存中对应的地址为,1000,;,变量名称:,c,,,类型为,char,,,占用,1,个字节,变量,c,的值:字母,A,变量,c,的,地址:,1000,若有:,char,*,pc;,则称指针变量,pc,是,char,型指针,pc=,/*,&,取,c,的地址*,/,则称,指针变量,pc,指向变量,c,