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