首页 理论教育C语言数据类型:基础知识-第3版

C语言数据类型:基础知识-第3版

【摘要】:在C语言中,数据类型可分为4类,它们是基本数据类型、构造数据类型、指针类型、空类型,如图2.2所示。图2.2C语言的数据类型不同数据类型的存储空间大小和取值范围都不同,与使用的编译器版本也有一定的关系,见表2.2。表2.2C语言的标准数据类型1.整型数据整型数据分为两大类:有符号型和无符号型。在C程序中,用于存放整型数据的变量称为整型变量。C语言中,有十进制小数形式和指数形式两种表示实型常量的方法。

数据类型是数据的基本属性,描述数据的存储格式和运算规则。不同类型的数据在内存中所占存储空间的大小是不同的,能够支持的运算和相应的运算规则也不同。

在C语言中,数据类型可分为4类,它们是基本数据类型、构造数据类型、指针类型、空类型,如图2.2所示。

图2.2 C语言的数据类型

不同数据类型的存储空间大小和取值范围都不同,与使用的编译器版本也有一定的关系,见表2.2。

表2.2 C语言的标准数据类型

1.整型数据

整型数据分为两大类:有符号型和无符号型。有符号的整数既可以是正数,也可以是负数。不带符号位(只包含0和正数)的整数为无符号整数。

在C语言中整型数据用机器的一个字长来存储,所以整型数据的表示范围与计算机系统的软硬件环境有关。在字长为16位的计算机系统中,整型数据占用2个字节,在字长为32位的计算机系统中,整型数据占用4个字节。同样一个整型数据,在取值范围能满足要求的情况下,应尽量使用较短的数据类型。

在C语言中,整型常量可以用以下形式表示:

·十进制整数:没有前缀,其数码为0~9,如76、-33等。

·八进制整数:以0作为前缀,其数码为0~7,如016、-052等。

·十六进制整数:以0x或0X为前缀,其数码为0~9,A~F或a~f,如0x5d、0X4af等。

若要表示一个长整型常量,则应在数字后面加上后缀“l”或“L”表示,如136L。而无符号数则应在数字末尾加后缀“u”或“U”表示。例如:0xE5LU表示十六进制无符号长整数E5。

在C程序中,用于存放整型数据的变量称为整型变量。整型变量有短整型、基本整型、长整型和无符号整型四种,其数据类型名分别由关键字short int(或short)、int、long int(或long)与unsigned int(或unsigned)表示。例如:

变量定义时可以进行初始化,即在定义变量的同时通过赋值号(=)给变量赋值,例如:int a=10,b=24;等。

【例2.3】 整型数据在程序中的使用示例。

上面程序中的格式输入函数scanf和格式化输出函数printf的使用将在稍后章节中讨论,目前仅需知道可以通过这种方式输入输出数据即可。程序一次运行的情况如下所示:

请输入整型变量b的值:68

a=45,b=68,c=196

请输入长整型变量x和y的值:7895678,2346485

7895678-2346485=5549193

2.实型数据

C语言中,实型常量也称为实型常数、实数或者浮点数。在计算机内存中,实数一律以指数形式存放。C语言中,有十进制小数形式和指数形式两种表示实型常量的方法。

(1)十进制小数形式

小数形式即为在数学中常用的实数形式,它是由数字和小数点组成的,且必须要包含小数点,其书写的一般形式为:

整数部分.小数部分

例如:0.3、25.0、5.0等均为合法的实数。

(2)指数形式

类似于数学中的指数形式,在C语言中,是以e或E后跟一个整数来表示以10为底的幂数,其书写的一般形式为:

整数部分.小数部分E/e阶码部分(整数)

例如:2.1E5表示数据2.1*105,3.7E-2表示3.7*10-2

在使用指数书写形式时应该注意两点:

①字母“e”或“E”后面的指数部分必须是整数,如100E4.5是错误的表示方法。

②字母“e”或“E”之前必须有数字,即使是1也不能省略,如10-5不能只写为E-5,而应该写成1E-5(或者1e-5)。

C程序中,用于存放实型数据的变量称为实型变量,根据所表示的数据范围和精度不同,实型变量分为单精度型和双精度型,分别用float和double进行定义。

在32位开发环境中,单精度型占4个字节存储空间,其数值范围为3.4E-38~3.4E+38,只能提供6~7位有效数字。双精度型占8个字节存储空间,其数值范围为1.7E-308~1.7E+308,可提供15~16位有效数字。

float x,y;     //定义单精度实型变量x和y

double a,b,c;//定义双精度实型变量a、b和c

【例2.4】 实型数据在程序中的使用示例。(www.chuimin.cn)

上面程序运行时,若分别为变量b和y输入值20.6,则输出结果如下所示:

3.字符型数据

字符型数据包括字符常量和字符变量。字符常量是由一对单引号括起来的单个字符,如'C','9'等均为字符常量。这里单引号只起定界作用,不代表字符。在C语言中,一个字符占用一个字节的存储空间,用对应的ASCII值(整数)来存储字符。

转义字符是一种特殊的字符常量,转义字符是由反斜杠'\'开头的字符序列,此时字符具有特定的含义,一般表示控制功能,或者用于表示不能直接从键盘上输入的字符数据,例如,'\n'表示换行,将屏幕上的光标移动到下一行的开头,'\a'产生响铃信号,使计算机通过声卡或扬声器输出一个短的蜂鸣声。表2.3中列出了常用的转义字符。

表2.3 常用转义字符表

使用转义字符表中的最后两种形式可以表示ASCII表中的任何一个字符,例如,'\101'或'\x41'分别用八进制数形式和十六进制数形式表示了字符A。

在C语言中,字符是按它所对应的ASCII码值来存储的,例如,字符'a'存储到计算机内的是ASCII码97,所以字符常量可以像整数一样参与运算。例如:

ch='a'-18         //ch的值为97-18=79

字符类型变量用以存储和表示一个字符,在内存中分配一个字节的空间,字符型变量的定义形式如下:

char<变量列表>;

例如:char ch,c;//定义变量ch、c为字符型变量

【例2.5】 字符数据使用示例。

程序运行的结果如下所示:

A,B,a

从程序的输出结果中可知,一个字符变量加上一个整数即可以得到另外一个字符,例如c1+1即得到字符B。如果一个字符变量的值为大写英文字母,则将其加32后即得到对应的小写字母。当希望通过小写英文字母得到对应的大写字母时,仅需将其减32即可。

程序运行时,若为变量c1提供的值为字符k,则输出结果如图2.12所示。

4.字符串常量

在C语言中,字符串常量是用一对双引号括起来的字符序列,如"CHINA"。其中,双引号只是作为定界符使用,并不是字符串中的字符。系统在存储字符串常量时分配一段连续的存储单元,依次存放字符串中的每一个字符,然后在字符串的最后一个字符后添加转义字符'\0'表示字符串的结尾,所以其需要的空间长度是串中字符存储所需要的长度再加一个字节。

字符串常量中可以包含转义字符,在统计字符串中的字符个数时需要特别注意。例如,"ABCD\t123\n\\\101"是一个合法的字符串常量,其长度为11个字符。字符串常量中字符的大小写是有区别的。例如,"ABCDEFG"与"abcdefg"是两个不同的字符串常量。

由于字符串常量可以是0个字符,所以一对双引号之间没有任何字符也是合法的字符串(空字符串);但在一对单引号中如果没有任何字符则是非法字符。

C语言中没有字符串变量,处理字符串问题时需要使用字符数组或指针,相关内容将在后续章节中讲述。特别值得注意的是,由于一个汉字需要占用两个字节的空间,C程序中即使对于单个汉字的处理,也需要使用字符串的方式进行。

5.符号常量

C程序中,可以用标识符来表示一个常量,称为符号常量。符号常量在使用之前必须先用预处理语句定义,其一般形式为:

#define 标识符 常量

其中:#define是一条预处理命令,称为宏定义命令,其功能是把该标识符定义为其后的常量值。定义符号常量时,习惯使用大写字母构成标识符名,以区别于一般的变量。程序处理时,首先用对应的常量替换标识符,然后再进行编译处理。

在C程序设计中使用符号常量的好处是:

·能清晰地描述某些常量的意义。

·便于修改程序。当需要修改多处使用的某一个常量数据时,能“一改全改”。

【例2.6】 符号常量的定义和使用示例。