1 / 50

第 2 章 C 语言数据类型

第 2 章 C 语言数据类型. 第 2 章 C 语言数据类型. 数据 是程序处理的对象,程序的主要任务就是对数据进行加工、处理,而计算机中的数据包括数值型数据和非数值型数据。 比如,数学中的整数、实数就是数值型的数据,计算机能够处理的文字、声音、图像等就是非数值型的数据。数据类型是按照被说明量的性质、表示形式和占据存储空间的多少以及构造特点来划分的。 本章主要介绍 C 语言程序中的基本数据类型。. 2.1 数据类型间简介. 2.1 数据类型简介. C 语言为我们提供了丰富的数据类型. 2.2 常量. 2.2 常量.

Download Presentation

第 2 章 C 语言数据类型

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 C语言数据类型

  2. 第2章 C语言数据类型 • 数据是程序处理的对象,程序的主要任务就是对数据进行加工、处理,而计算机中的数据包括数值型数据和非数值型数据。 • 比如,数学中的整数、实数就是数值型的数据,计算机能够处理的文字、声音、图像等就是非数值型的数据。数据类型是按照被说明量的性质、表示形式和占据存储空间的多少以及构造特点来划分的。 • 本章主要介绍C语言程序中的基本数据类型。

  3. 2.1 数据类型间简介

  4. 2.1 数据类型简介 • C语言为我们提供了丰富的数据类型

  5. 2.2 常量

  6. 2.2 常量 • 常量是指在程序运行的整个过程中,其值始终不变的量。 • 常量可以有不同的类型,可分为直接常量和符号常量。直接常量也就是日常所说的常数。符号常量则是指用标识符定义的常量,从字面上不能直接看出其类型和值。

  7. 2.2 常量 • 常量

  8. 2.2.1 整型常量 • C语言中整型常量有十进制、八进制、十六进制3种形式。 • 十进制整型常量的表示与数学上的整数表示相同,十进制整型常量没有前缀,由0~9的数字组成。 • 以下各数是合法的十进制整型常量: • 237,-568,65535,1627 • 以下各数不是合法的十进制整型常量: • 023 (不能有前导0),23D (含有非十进制数码)

  9. 2.2.1 整型常量 • 八进制整型常量的表示以数字0开头,即以0作为八进制数的前缀,由0~7的数字组成,八进制数通常是无符号数。 • 以下各数是合法的八进制常数: • 015(十进制为13) • 0101(十进制为65) • 0177777(十进制为65535) • 以下各数不是合法的八进制常数: • 256(无前缀0),03A2(包含了非八进制数字A) • -0128(出现了非八进制数字8和负号)

  10. 2.2.1 整型常量 • 十六进制整型常量的表示以0x或0X开头,即以0x或0X作为前缀(注:十六进制数前缀字符0x,x前面是数字0而不是字符o),由0~9,A~F或a~f的数字组成。 • 以下各数是合法的十六进制整型常量: • 0X2A(十进制为42) • 0XA0 (十进制为160) • 0XFFFF (十进制为65535) • 以下各数不是合法的十六进制整型常量: • 5A(无前缀0X) • 0X3H (含有非十六进制数码H)

  11. 2.2.2 实型常量 • 在C语言中,实型常量只能用十进制形式表示,不能用八进制和十六进制形式表示。 • 它有两种形式: • 小数形式和指数形式。

  12. 2.2.2 实型常量 • 1.小数形式 • 由正负号、0~7的数字和最多一个小数点组成(必须有小数点)。 • 如: • -1.85,0.3456, 120.0,.426,-11 • 都是十进制小数形式实数。小数点前面和后面可以没有数字。

  13. 2.2.2 实型常量 • 2. 指数形式 • 由十进制数加上阶码标志“e”或“E”以及阶码组成。其一般形式为:a E n。其中a为十进制数,n为十进制整数(n为正数时“+”可以省略)其值为:a×10n。 • 例如,1.234e+12 表示 1.234*10¹² • 0.25e-8 表示 0.25*10-8。 • 以下是合法的实数: • 1.234e+12(等于1.234×1012), 3.7E-2(等于3.7×10-2) • 2.34e+8(等于2.34×108) • 以下是非法的实数: • 568(无小数点), e-5(阶码标志“e”之前无数字), • -5(无阶码标志), 58.+e5(负号位置不对) • 2.7E(无阶码), 6.4e+5.8(阶码为小数)

  14. 2.2.3 字符常量 • 字符常量是用单引号括起来的一个字符。例如:‘a’、‘0’、‘A’、‘-’、‘*’都是合法字符常量,注意,‘a’和‘A’是不同的字符常量。 • 除了以上形式的字符常量以外,C语言还定义了一些特殊的字符常量,是以“\”开头的字符序列,称为转义字符。转义字符是一种特殊的字符常量,具有特定的含义,不同于字符原有的意义,故称“转义”字符。如‘\n’中的n不表示字母n而作为“换行”符。

  15. 2.2.3 字符常量 • 转义字符及其含义

  16. 2.2.3 字符常量 • 注意: • (1)字符常量只能用单引号括起来,不能用双引 • 号或其他括号。 • (2)字符常量只能是单个字符,不能是字符串。 • (3)字符可以是字符集中任意字符,但数字被定 • 义为字符型之后就以ASCII码值参与数值运 • 算。 • 如,‘6’和6是不同的,‘6’是字符常量,而6是 • 整型常量。

  17. 2.2.4 字符串常量 • 在C语言中,字符串常量是用双引号括起来的字符序列。例如,以下是合法的字符串常量: • “CHINA” • “This is a C program.” • “402754” • “+++\\? ab” • “*****” • “”表示一个空格 • “” 表示什么字符也没有 • “\n”表示一个转义字符换行 • ‘ab’既不是字符常量,也不是字符串常量。

  18. 2.2.4 字符串常量 • 字符串常量在内存中存储时,系统自动在每一个字符串常量的尾部加一个“字符串结束标志”,即字符‘\0’( ASCII码值为0)。 • 因此,长度为n个字符的字符串常量在内存中要占用n+1个字节的空间。 • 例如,字符串“C program”的长度为9(即字符的个数),但在内存中所占的字节数为10,即存放“C program\0”。

  19. 2.2.4 字符串常量 • 字符串常量在内存中存储时,系统自动在每一个字符串常量的尾部加一个“字符串结束标志”,即字符‘\0’(ASCII码值为0)。因此,长度为n个字符的字符串常量在内存中要占用n+1个字节的空间。例如,字符串“C program”的长度为9(即字符的个数),但在内存中所占的字节数为10,即存放“C program\0”。

  20. 2.2.4 字符串常量 • 再如,字符常量‘A’与字符串常量“A”在内存中存储的方式如下:

  21. 2.2.4 字符串常量 • 例2.1 分析下面程序的运行结果。 • void main() • { char string[]=“China\n\101\t\\”; • printf(“%s\n”,string); • } • 程序运行结果: • China • A \

  22. 2.2.4 字符串常量 • 字符常量与字符串常量的区别: • ⑴ 定界符不同。 • 字符常量使用单引号,而字符串常量使用双引号。 • ⑵ 长度不同。 • 字符常量的长度固定为1,而字符串常量的长度可以是0,也可以是某个整数。

  23. 2.2.4 字符串常量 • 字符常量与字符串常量的区别: • ⑶ 存储要求不同。 • 字符常量存储的是字符的ASCII码值,而字符串常量除了要存储字符串常量的有效字符外,还要存储一个字符串结束标志‘\0’。 • 说明: • 在C语言中,没有专门的字符串变量,字符串常量如果需要存放在变量中要用字符数组来处理。

  24. 2.2.5 符号常量 • 在程序中,可以定义一个符号来代表一个常量,这种相应的符号称为符号常量。例如:用PI代表圆周率π,即3.14159。 • 符号常量可以增加程序的易读性。 • 例如:用PI代表圆周率π,NAME代表姓名等。 • 符号常量提高了程序的通用性和可维护性,使用符号常量可以使修改该常量变得十分方便。

  25. 2.2.5 符号常量 • C语言中,用编译预处理命令#define来定义符号常量。例如: • #define PI 3.14159 • #define NUM 35 • #define NAME “liming” • #define END ‘$’ • *它不是C语句,故末尾不要加分号。 • *习惯上,符号常量用大写,变量用小写以示区别。另外,符号常量一旦定义,就不能在程序的其它地方给该标识符再赋值。

  26. 2.3 变量

  27. 2.3.1 变量的概念 • 变量是指在程序运行过程中,其值可以改变的量。 • 例如,计算圆的周长的C语句: • i=2*3.14159*r; • i和r都是变量,其中,r可以有不同的值,i的值因r的值不同而不同。

  28. 2.3.1 变量的概念 • 变量的特征: • (1)它有一个变量名,变量名的命名方式符合标识符的 • 命名规则。例如,可以用name,sum作为变量名。 • (2)变量有类型之分。 • 不同类型的变量占用的内存单元(字节)数不同, • 因此每个变量都有一个确定的类型。例如,整型变 • 量、实型变量、字符型变量等。 • (3)变量可以存放值。 • 程序运行过程中用到的变量必须有确切的值,变量 • 在使用前必须赋值,变量的值存储在内存中。在程 • 序中通过变量名来引用变量的值。

  29. 2.3.1 变量的概念 • 程序运行过程中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中取数据。

  30. 2.3.1 变量的概念 • 例2.2 任意输入两个整数,输出它们的和、差、积 • #include <stdio.h> • void main( ) • { int a,b; /* 定义a,b为整型变量 */ • printf(“input a,b=”); /* 输出提示字符串input a,b= */ • scanf(“%d,%d”,&a,&b); /* 由键盘输入a和b的值 */ • printf(“%d+%d=%d\n”,a,b,a+b); /*计算a和b之和,并输出结果*/ • printf(“%d-%d=%d\n”,a,b,a-b); /*计算a和b之差,并输出结果*/ • printf(“%d*%d=%d\n”,a,b,a*b); /*计算a和b之积,并输出结果*/ • } • 程序运行结果: • 5,8↙ • 5+8=13 • 5-8=-3 • 5*8=40

  31. 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为长静态的双精度实型变量 */

  32. 2.3.2 变量的定义与初始化 • 进行变量定义时,应注意以下几点: • (1)允许在一个数据类型标识符后,说明多个相同类型的变量,各变量名之间用逗号隔开。 • (2)数据类型标识符与变量名之间至少用一个空格隔开。 • (3)最后一个变量名之后必须以分号“;”结尾。 • (4)变量说明必须放在变量使用之前,一般放在函数体的开头部分。 • (5)在同一个程序中变量不允许重复定义。例如,以下是不合法的定义。 • int x,y,z; • int a,b,x; /* 变量x被重复定义 *

  33. 2.3.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 */

  34. 2.3.3 整型变量 • 整型变量的基本类型符为int。可以根据数值的范围将整型变量定义为基本整型变量、短整型变量或长整型变量。 • 基本整型变量,用int 表示。 • 短整型变量,用short int 表示或用short表示。 • 长整型变量,用long int 表示或用long表示。

  35. 2.3.3 整型变量 • 计算机中数据是以二进制形式表示的,基本整型变量占用内存2个字节,即16位。16位中最左边的一位表示符号,该位为0,表示正数;该位为1,表示负数。 • 一个基本整型变量的取值范围为-215 ~(215-1),即 -32768~32767。 • 带符号基本整型变量 [signed] int • 无符号基本整型变量 unsigned int • 带符号短整型变量 [signed] short [int] • 无符号短整型变量 unsigned short [int] • 带符号长整型变量 [signed] long [int] • 无符号长整型变量 unsigned long [int]

  36. 2.3.3 整型变量 有符号数 无符号数

  37. 2.3.4 实型变量 • 实型数据与整型数据在内存中的存储方式不同,实型数据是按照指数形式存放的。系统把一个实数分成小数部分和指数部分分别存放。指数部分采用规范化的指数形式。

  38. 2.3.4 实型变量 • 实型变量分为以下3种: • 单精度(float) • 双精度(double) • 长双精度(long double)

  39. 2.3.4 实型变量 • 实型变量是用有限的存储单元进行存储的,因此提供的有效数字总是有限的,在有效位以外的数字将变得没有意义,由此可能会产生一些误差。 • 单精度实数只能保证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,在忽略无效位后,两者相等。

  40. 2.3.4 实型变量 • 由于实数存在舍入误差,在使用时应注意: • (1)不要试图用一个实数精确表示一个大整数。 • (2)由于实数在计算和存储时会有一些微小的误差,因此实 • 数一般不能直接进行判断“相等”,而是判断接近或近似 • (3)避免直接将一个很大的实数与一个很小的实数相加、相 • 减,否则会“丢失”小的数。 • 例如: 某计算机允许表示具有七位有效数字的十进制数,计算333.3333+0.0002222222,若计算时没有位数的限制,则结果应当是3.3335222222。 计算机由于字长位数的限制,只能表示七位有效数字,于是只得将小数点后的七个数字全部删掉,而仅保留其整数部分,得到和值333.3335。 • (4)根据实际要求选择单精度或双精度。

  41. 2.3.5 字符型变量 • 字符型变量用来存放字符常量,注意只能存放一个字符。 • 例如: • char c1,c2,c3,c4,c5; • c1=’a’; 正确 • c2=“a”; 不正确 • c3=’abc’; 不正确 • c4=’\107’; 正确 • c5=’6’;正确

  42. 2.3.5 字符型变量 • 1.字符型数据在内存中的存放形式 • 将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。例如:char c1,c2; c1=’a’; c2=’b’; • 字符’a’的ASCII代码为十进制数97,字符’b’的ASCII代码为十进制数98,在内存中变量c1、c2的值如图所示。 实际上是以二进制形式存放的

  43. 2.3.5 字符型变量 • 2.字符型数据的使用 • 字符型数据在内存中是以ASCII码存储,因此,字符型和整型可以通用,字符型数据可以以字符形式输出,也可以以整数形式输出。 • 以字符形式输出时,先将内存中ASCII码转换成对应的字符,再输出。以整数形式输出时,则直接将ASCII码作为整数输出。字符数据还可参加算术运算,此时相当于对它们的ASCII码值进行算术运算,先将其1个字节转换为2个字节,然后进行运算。

  44. 2.3.5 字符型变量 • 例2.3 向字符变量赋予整数。#include <stdio.h>void main(){ char c1,c2; /* 定义c1,c2为字符型变量 */ c1=65; /* 将整数65赋给c1 */ c2=67; /* 将整数67赋给c2 */ printf(“%c %c\n”,c1,c2); /*以字符形式输出c1和c2的值*/ printf(“%d %d\n”,c1,c2); /*以整数形式输出c1和c2的值*/} • 程序运行结果:A C 65 67 • 可以看到:字符型数据和整型数据是通用的。它们既可以用字符形式输出(用%c),也可以用整数形式输出(用%d)。但是应注意字符数据只占一个字节,它只能存放0~255范围内的整数。

  45. 2.3.5 字符型变量 • 例2.4 大小写字母的转换。 #include <stdio.h>void main(){ char c1,c2; /* 定义c1,c2为字符型变量 */ c1=65; /* 将整数65赋给c1 */ c2=67; /* 将整数67赋给c2 */ printf(“%c %c\n”,c1,c2);/* 以字符形式输出c1和c2的值 */ printf(“%d %d\n”,c1,c2);/* 以整数形式输出c1和c2的值 */} • 程序运行结果:A B65 66a b97 98

  46. 2.3.5 字符型变量 • 例2.5 字符型和整型可以相互赋值。#include <stdio.h>void main(){ int k; /* 定义k为整型变量 */ char ch; /* 定义ch为字符型变量 */ k=‘b’; /* 将字符’b’赋给整型变量k */ ch=66; /* 将整数66赋给字符变量ch */ printf(“%d %c\n”,k,k);/* 以不同形式输出k的值 */ printf(“%d %c\n”,ch,ch); /* 以不同形式输出ch的值 */} • 程序运行结果:98 b66 B

  47. 2.3.6 基本数据类型描述 • 基本数据类型和基本数据类型加上修饰以后,各数据类型所占的内存空间字节数和所表示的数值范围。

  48. 2.4 程序举例 • 例2.5 实型数据的舍入误差。#include <stdio.h>void main(){ float a,b; /* 定义a和b为单精度实型变量 */ a=123456.789e5; /* 将123456.789e5赋给单精度实型变量a */ b=a+20; /* 将a的值加上20赋给单精度实型变量b */ printf("%f\n",a); /* 以实型形式输出a的值 */ printf("%f\n",b); /* 以实型形式输出b的值 */} 程序运行结果:12345678848.00000012345678848.000000由于实型变量是由有限的存储单元组成的,因此,能提供的有效数字总是有限的。

  49. 2.4 程序举例 • 例2.6 分析下面程序的运行结果。#include <stdio.h>void main(){ float a; /* 定义a为单精度实型变量 */ double b; /* 定义b为双精度实型变量 */ a=33333.33333; /* 将33333.33333赋给单精度实型变量a */ b=33333.33333333333333; /* 将33333.33333333333333 • 赋给双精度实型变量b*/ printf(“%f\n%f\n”,a,b); /* 以实型形式输出a和b的值 */} 程序运行结果:33333.332031 33333.333333 由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。b是双精度型,有效位为十六位。但Turbo C 规定小数后最多保留六位,其余部分四舍五入。

  50. 本 章 小 结 • 数据是程序处理的对象。在处理数据之前,要确定该数据处理类型和它是作为常量还是变量来使用。 • C语言提供了丰富的数据类型,其中的基本数据类型有整型、实型、字符型和枚举型。 • 常量是指在程序运行期间其值固定不变的量。常量有4类:整型常量、实型常量、字符型常量和字符串常量。程序中可以用符号来代替常量的值,从而使程序直观、易改。 • 变量是指在程序运行期间其值可以被改变的量。变量其实代表了某块存储空间。

More Related