《语言数据类型》PPT课件.ppt
普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材第第2 2章章 C C语言数据类型语言数据类型 普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材第第2 2章章 C C语言数据类型语言数据类型 数据是程序处理的对象,程序的主要任务就是对数据进行加工、处理,而计算机中的数据包括数值型数据和非数值型数据。比如,数学中的整数、实数就是数值型的数据,计算机能够处理的文字、声音、图像等就是非数值型的数据。数据类型是按照被说明量的性质、表示形式和占据存储空间的多少以及构造特点来划分的。本章主要介绍C语言程序中的基本数据类型。49-2普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.1 2.1 数据类型间简介数据类型间简介普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.1 2.1 数据类型简介数据类型简介C语言为我们提供了丰富的数据类型 49-4普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2 2.2 常量常量普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2 2.2 常量常量 常量是指在程序运行的整个过程中,其值始终不变的量。常量可以有不同的类型,可分为直接常量和符号常量。直接常量也就是日常所说的常数。符号常量则是指用标识符定义的常量,从字面上不能直接看出其类型和值。49-6普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2 2.2 常量常量常量常量49-7普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.1 2.2.1 整型常量整型常量 C语言中整型常量有十进制、八进制、十六进制3种形式。十进制整型常量的表示与数学上的整数表示相同,十进制整型常量没有前缀,由09的数字组成。以下各数是合法的十进制整型常量:237,-568,65535,1627 以下各数不是合法的十进制整型常量:023(不能有前导0),23D(含有非十进制数码)49-8普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.1 2.2.1 整型常量整型常量 八进制整型常量的表示以数字0开头,即以0作为八进制数的前缀,由07的数字组成,八进制数通常是无符号数。以下各数是合法的八进制常数:015(十进制为13)0101(十进制为65)0177777(十进制为65535)以下各数不是合法的八进制常数:256(无前缀0),03A2(包含了非八进制数字A)-0128(出现了非八进制数字8和负号)49-9普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.1 2.2.1 整型常量整型常量 十六进制整型常量的表示以0 x或0X开头,即以0 x或0X作为前缀(注:十六进制数前缀字符0 x,x前面是数字0而不是字符o),由09,AF或af的数字组成。以下各数是合法的十六进制整型常量:0X2A(十进制为42)0XA0(十进制为160)0XFFFF(十进制为65535)以下各数不是合法的十六进制整型常量:5A(无前缀0X)0X3H(含有非十六进制数码H)49-10普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.2 2.2.2 实型常量实型常量 在C语言中,实型常量只能用十进制形式表示,不能用八进制和十六进制形式表示。它有两种形式:小数形式和指数形式。49-11普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.2 2.2.2 实型常量实型常量1.小数形式 由正负号、07的数字和最多一个小数点组成(必须有小数点)。如:-1.85,0.3456,120.0,.426,-11 都是十进制小数形式实数。小数点前面和后面可以没有数字。49-12普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.2 2.2.2 实型常量实型常量2.指数形式 由十进制数加上阶码标志“e”或“E”以及阶码组成。其一般形式为:a E n。其中a为十进制数,n为十进制整数(n为正数时“+”可以省略)其值为:a10n。例如,1.234e+12 表示 1.234*10 0.25e-8 表示 0.25*10-8。以下是合法的实数:1.234e+12(等于1.2341012),3.7E-2(等于3.710-2)2.34e+8(等于2.34108)以下是非法的实数:568(无小数点),e-5(阶码标志“e”之前无数字),-5(无阶码标志),58.+e5(负号位置不对)2.7E(无阶码),6.4e+5.8(阶码为小数)49-13普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.3 2.2.3 字符常量字符常量 字符常量是用单引号括起来的一个字符。例如:a、0、A、-、*都是合法字符常量,注意,a和A是不同的字符常量。除了以上形式的字符常量以外,C语言还定义了一些特殊的字符常量,是以“”开头的字符序列,称为转义字符。转义字符是一种特殊的字符常量,具有特定的含义,不同于字符原有的意义,故称“转义”字符。如n中的n不表示字母n而作为“换行”符。49-14普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.3 2.2.3 字符常量字符常量转义字符及其含义转义字符及其含义 字符形式字符形式含含 义义ASCIIASCII代代码码nn换换行,将当前位置移到下一行开行,将当前位置移到下一行开头头1010tt水平位移,跳到下一个水平位移,跳到下一个tabtab位置位置9 9bb 退格,将当前位置移到前一列退格,将当前位置移到前一列8 8rr 回回车车,将当前位置移到本行开,将当前位置移到本行开头头1313ff 换页换页,将当前位置移到下一,将当前位置移到下一页页开开头头1212 反斜杠字符反斜杠字符“”“”9292 单单引号字符引号字符“”“”3939 双引号字符双引号字符“”“”343400 空字符空字符0 0dddddd 1 1到到3 3位八位八进进制数所代表的制数所代表的ASCIIASCII码码字符字符xhhxhh 1 1到到2 2位十六位十六进进制数所代表的制数所代表的ASCIIASCII码码字符字符49-15普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材注意:注意:(1)字符常量只能用单引号括起来,不能用双引 号或其他括号。(2)字符常量只能是单个字符,不能是字符串。(3)字符可以是字符集中任意字符,但数字被定 义为字符型之后就以ASCII码值参与数值运 算。如,6和6是不同的,6是字符常量,而6是 整型常量。2.2.3 2.2.3 字符常量字符常量49-16普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 在C语言中,字符串常量是用双引号括起来的字符序列。例如,以下是合法的字符串常量:“CHINA”“This is a C program.”“402754”“+?ab”“*”“”表示一个空格 “”表示什么字符也没有 “n”表示一个转义字符换行 ab 既不是字符常量,也不是字符串常量。2.2.4 2.2.4 字符串常量字符串常量49-17普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 字符串常量在内存中存储时,系统自动在每一个字符串常量的尾部加一个“字符串结束标志”,即字符0(ASCII码值为0)。因此,长度为n个字符的字符串常量在内存中要占用n+1个字节的空间。例如,字符串“C program”的长度为9(即字符的个数),但在内存中所占的字节数为10,即存放“C program0”。2.2.4 2.2.4 字符串常量字符串常量49-18普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.4 2.2.4 字符串常量字符串常量 字符串常量在内存中存储时,系统自动在每一个字符串常量的尾部加一个“字符串结束标志”,即字符0(ASCII码值为0)。因此,长度为n个字符的字符串常量在内存中要占用n+1个字节的空间。例如,字符串“C program”的长度为9(即字符的个数),但在内存中所占的字节数为10,即存放“C program0”。Cprogram 049-19普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 再如,字符常量A与字符串常量“A”在内存中存储的方式如下:2.2.4 2.2.4 字符串常量字符串常量49-20普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.4 2.2.4 字符串常量字符串常量例2.1 分析下面程序的运行结果。void main()char string=“Chinan101t”;printf(“%sn”,string);程序运行结果:程序运行结果:ChinaA 49-21普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.4 2.2.4 字符串常量字符串常量字符常量与字符串常量的区别:定界符不同。字符常量使用单引号,而字符串常量使用双引号。长度不同。字符常量的长度固定为1,而字符串常量的长度可以是0,也可以是某个整数。49-22普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.4 2.2.4 字符串常量字符串常量 字符常量与字符串常量的区别:存储要求不同。字符常量存储的是字符的ASCII码值,而字符串常量除了要存储字符串常量的有效字符外,还要存储一个字符串结束标志0。说明:在C语言中,没有专门的字符串变量,字符串常量如果需要存放在变量中要用字符数组来处理。49-23普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.5 2.2.5 符号常量符号常量 在程序中,可以定义一个符号来代表一个常量,这种相应的符号称为符号常量。例如:用PI代表圆周率,即3.14159。符号常量可以增加程序的易读性。例如:用PI代表圆周率,NAME代表姓名等。符号常量提高了程序的通用性和可维护性,使用符号常量可以使修改该常量变得十分方便。49-24普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.2.5 2.2.5 符号常量符号常量 C语言中,用编译预处理命令#define来定义符号常量。例如:#define PI 3.14159#define NUM 35#define NAME “liming”#define END$*它不是C语句,故末尾不要加分号。*习惯上,符号常量用大写,变量用小写以示区别。另外,符号常量一旦定义,就不能在程序的其它地方给该标识符再赋值。49-25普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3 2.3 变量变量普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.1 2.3.1 变量的概念变量的概念 变量是指在程序运行过程中,其值可以改变的量。例如,计算圆的周长的C语句:i=2*3.14159*r;i和r都是变量,其中,r可以有不同的值,i的值因r的值不同而不同。49-27普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.1 2.3.1 变量的概念变量的概念 变量的特征:(1)它有一个变量名,变量名的命名方式符合标识符的 命名规则。例如,可以用name,sum作为变量名。(2)变量有类型之分。不同类型的变量占用的内存单元(字节)数不同,因此每个变量都有一个确定的类型。例如,整型变 量、实型变量、字符型变量等。(3)变量可以存放值。程序运行过程中用到的变量必须有确切的值,变量 在使用前必须赋值,变量的值存储在内存中。在程 序中通过变量名来引用变量的值。49-28普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.1 2.3.1 变量的概念变量的概念 程序运行过程中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中取数据。49-29普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材例例2.2 任意任意输输入两个整数,入两个整数,输输出它出它们们的和、差、的和、差、积积#include void main()int a,b;/*定定义义a,b为为整型整型变变量量*/printf(“input a,b=”);/*输输出提示字符串出提示字符串input a,b=*/scanf(“%d,%d”,&a,&b);/*由由键盘输键盘输入入a和和b的的值值*/printf(“%d+%d=%dn”,a,b,a+b);/*计计算算a和和b之和,并之和,并输输出出结结果果*/printf(“%d-%d=%dn”,a,b,a-b);/*计计算算a和和b之差,并之差,并输输出出结结果果*/printf(“%d*%d=%dn”,a,b,a*b);/*计计算算a和和b之之积积,并,并输输出出结结果果*/2.3.1 2.3.1 变量的概念变量的概念程序运行结果程序运行结果:5,8 5+8=13 5-8=-35*8=4049-30普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.2 2.3.2 变量的定义与初始化变量的定义与初始化1.变量的定义 在C语言程序中,常量是可以不经定义而直接引用的,而程序中用到的所有变量必须先定义后使用。变量定义的一般格式为:数据类型标识符 变量名1,变量名2,变量名3,变量名n;其中,表示可选项。例如:int a;/*定义a为整型变量*/int m,n;/*定义m和n为整型变量*/float x,y,z;/*定义x,y,z为单精度实型变量*/char ch;/*定义ch为字符型变量*/long int t;/*定义t为长整型变量*/static double r;/*定义r为长静态的双精度实型变量*/49-31普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.2 2.3.2 变量的定义与初始化变量的定义与初始化 进行变量定义时,应注意以下几点:(1)允许在一个数据类型标识符后,说明多个相同类型的变量,各变量名之间用逗号隔开。(2)数据类型标识符与变量名之间至少用一个空格隔开。(3)最后一个变量名之后必须以分号“;”结尾。(4)变量说明必须放在变量使用之前,一般放在函数体的开头部分。(5)在同一个程序中变量不允许重复定义。例如,以下是不合法的定义。int x,y,z;int a,b,x;/*变量x被重复定义*49-32普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.2 2.3.2 变量的定义与初始化变量的定义与初始化 2.2.变量的初始化变量的初始化 在定义变量的同时可以给变量赋初值,称为变量初始化。变量初始化的一般格式为:数据类型标识符 变量名1=常量1,变量名2=常量2,变量名n=常量n 例如:int m=3,n=5;/*定义m和n为整型变量,同时m,n分别赋初值3,5*/float x=0,y=0,z=0;/*定义x,y,z为单精度实型变量,同时x,y,z都赋初值为0*/char ch=a;/*定义ch为字符型变量,同时赋初值字符a*/long int a=1000,b;/*定义a,b为长整型变量,同时a赋初值1000*/49-33普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.3 2.3.3 整型变量整型变量 整型变量的基本类型符为int。可以根据数值的范围将整型变量定义为基本整型变量、短整型变量或长整型变量。基本整型变量,用int 表示。短整型变量,用short int 表示或用short表示。长整型变量,用long int 表示或用long表示。49-34普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.3 2.3.3 整型变量整型变量 计算机中数据是以二进制形式表示的,基本整型变量占用内存2个字节,即16位。16位中最左边的一位表示符号,该位为0,表示正数;该位为1,表示负数。一个基本整型变量的取值范围为-215(215-1),即-3276832767。带符号基本整型变量 signed int无符号基本整型变量 unsigned int带符号短整型变量 signed short int无符号短整型变量 unsigned short int带符号长整型变量 signed long int无符号长整型变量 unsigned long int49-35普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.3 2.3.3 整型变量整型变量有符号数无符号数49-36普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.4 2.3.4 实型变量实型变量 实型数据与整型数据在内存中的存储方式不同,实型数据是按照指数形式存放的。系统把一个实数分成小数部分和指数部分分别存放。指数部分采用规范化的指数形式。49-37普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.4 2.3.4 实型变量实型变量 实型变量分为以下3种:单精度(float)双精度(double)长双精度(long double)类型类型 类型标识符类型标识符 所占字节所占字节 有效数字有效数字 数值范围数值范围单精度型 float 4 67 10-381038 双精度型 double 8 1516 10-30810308长双精度实型 long double 10 1819 10-493210493249-38普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材 实型变量是用有限的存储单元进行存储的,因此提供的有效数字总是有限的,在有效位以外的数字将变得没有意义,由此可能会产生一些误差。单精度实数只能保证7位有效数字,双精度实数只能保证15位有效数字,后面的数字无意义。例如:float a=12345.678;float b=12345.6789;变量a和b的有效数值都是12 345.67,在内存中存储时,a为12 345.677 734,b为12 345.678 711,在忽略无效位后,两者相等。2.3.4 2.3.4 实型变量实型变量49-39普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.4 2.3.4 实型变量实型变量由于实数存在舍入误差,在使用时应注意:(1)不要试图用一个实数精确表示一个大整数。(2)由于实数在计算和存储时会有一些微小的误差,因此实 数一般不能直接进行判断“相等”,而是判断接近或近似(3)避免直接将一个很大的实数与一个很小的实数相加、相 减,否则会“丢失”小的数。例如:某计算机允许表示具有七位有效数字的十进制数,计算333.3333+0.0002222222,若计算时没有位数的限制,则结果应当是3.3335222222。计算机由于字长位数的限制,只能表示七位有效数字,于是只得将小数点后的七个数字全部删掉,而仅保留其整数部分,得到和值333.3335。(4)根据实际要求选择单精度或双精度。49-40普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.5 2.3.5 字符型变量字符型变量 字符型变量用来存放字符常量,注意只能存放一个字符。例如:char c1,c2,c3,c4,c5;c1=a;正确正确 c2=“a”;不正确不正确 c3=abc;不正确不正确 c4=107;正确正确 c5=6;正确正确49-41普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.5 2.3.5 字符型变量字符型变量1.1.字符型数据在内存中的存放形式字符型数据在内存中的存放形式 将一个字符常量放到一个字符变量中,实际上并不是把该字符本将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的身放到内存单元中去,而是将该字符的相应的ASCIIASCII代码放到存储单代码放到存储单元中。例如:元中。例如:char c1,c2;c1=a;c2=b;字符字符aa的的ASCIIASCII代码为十进制数代码为十进制数9797,字符,字符bb的的ASCIIASCII代码为十进代码为十进制数制数9898,在内存中变量,在内存中变量c1c1、c2c2的值如图所示。的值如图所示。实际上是以二进制形式存放的实际上是以二进制形式存放的49-42普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.5 2.3.5 字符型变量字符型变量2.字符型数据的使用 字符型数据在内存中是以ASCII码存储,因此,字符型和整型可以通用,字符型数据可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,先将内存中ASCII码转换成对应的字符,再输出。以整数形式输出时,则直接将ASCII码作为整数输出。字符数据还可参加算术运算,此时相当于对它们的ASCII码值进行算术运算,先将其1个字节转换为2个字节,然后进行运算。49-43普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.5 2.3.5 字符型变量字符型变量例2.3 向字符变量赋予整数。#include void main()char c1,c2;/*定义c1,c2为字符型变量*/c1=65;/*将整数65赋给c1*/c2=67;/*将整数67赋给c2*/printf(“%c%cn”,c1,c2);/*以字符形式输出c1和c2的值*/printf(“%d%dn”,c1,c2);/*以整数形式输出c1和c2的值*/程序运行结果:A C 65 67 可以看到:字符型数据和整型数据是通用的。它们既可以用字符形式输出(用%c),也可以用整数形式输出(用%d)。但是应注意字符数据只占一个字节,它只能存放0255范围内的整数。49-44普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.5 2.3.5 字符型变量字符型变量例2.4 大小写字母的转换。#include void main()char c1,c2;/*定定义义c1,c2为为字符型字符型变变量量*/c1=65;/*将整数将整数65赋给赋给c1*/c2=67;/*将整数将整数67赋给赋给c2*/printf(“%c%cn”,c1,c2);/*以字符形式以字符形式输输出出c1和和c2的的值值*/printf(“%d%dn”,c1,c2);/*以整数形式以整数形式输输出出c1和和c2的的值值*/程序运行结果:程序运行结果:A BA B65 6665 66a ba b97 9897 9849-45普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.5 2.3.5 字符型变量字符型变量例2.5 字符型和整型可以相互赋值。#include void main()int k;/*定定义义k为为整型整型变变量量*/char ch;/*定定义义ch为为字符型字符型变变量量*/k=b;/*将字符将字符b赋给赋给整型整型变变量量k*/ch=66;/*将整数将整数66赋给赋给字符字符变变量量ch*/printf(“%d%cn”,k,k);/*以不同形式以不同形式输输出出k的的值值*/printf(“%d%cn”,ch,ch);/*以不同形式以不同形式输输出出ch的的值值*/程序运行结果:程序运行结果:98 b66 B49-46普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.3.6 2.3.6 基本数据类型描述基本数据类型描述 基本数据类型和基本数据类型加上修饰以后,各数据类型所占的内存空间字节数和所表示的数值范围。类类型型 类类型型标识标识符符 字字节节 数数值值范范围围字符型 char 1C字符集基本整型 int 2-3276832767短整型 short int 2 -3276832767长整型 long int 4-214783648214783647无符号型 uns igned 2 065535无符号长整型 unsigned long 4 04294967295单精度实型 float 4 3/4E-383/4E+38双精度实型 double 81/7E-3081/7E+30849-47普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.4 2.4 程序举例程序举例 例2.5 实型数据的舍入误差。#include void main()float a,b;/*定义a和b为单精度实型变量*/a=123456.789e5;/*将123456.789e5赋给单精度实型变量a*/b=a+20;/*将a的值加上20赋给单精度实型变量b*/printf(%fn,a);/*以实型形式输出a的值*/printf(%fn,b);/*以实型形式输出b的值*/程序运行结果:由于实型变量是由有限的存储单元组成的,因此,能提供的有效数字总是有限的。49-48普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材2.4 2.4 程序举例程序举例例2.6 分析下面程序的运行结果。#include void main()float a;/*定义定义a为单精度实型变量为单精度实型变量*/double b;/*定义定义b为双精度实型变量为双精度实型变量*/a=33333.33333;/*将将33333.33333赋给单精度实型变量赋给单精度实型变量a*/b=33333.33333333333333;/*将将33333.33333333333333 赋给双精度实型变量赋给双精度实型变量b*/printf(“%fn%fn”,a,b);/*以实型形式输出以实型形式输出a和和b的值的值*/程序运行结果:程序运行结果:33333.332031 33333.333333 由于由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,故小数是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。二位后之后均为无效数字。b是双精度型,有效位为十六位。但是双精度型,有效位为十六位。但Turbo C 规规定小数后最多保留六位,其余部分四舍五入。定小数后最多保留六位,其余部分四舍五入。49-49普通高等教育普通高等教育“十一五十一五”国家级规划教材国家级规划教材本本 章章 小小 结结 数据是程序处理的对象。在处理数据之前,要确定该数据处理类型和它是作为常量还是变量来使用。C语言提供了丰富的数据类型,其中的基本数据类型有整型、实型、字符型和枚举型。常量是指在程序运行期间其值固定不变的量。常量有4类:整型常量、实型常量、字符型常量和字符串常量。程序中可以用符号来代替常量的值,从而使程序直观、易改。变量是指在程序运行期间其值可以被改变的量。变量其实代表了某块存储空间。49-50