C语言程序设计实例教程(第3版)
上QQ阅读APP看书,第一时间看更新

2.2 数据类型

学习目标

1)掌握几种常用的数据类型。

2)理解不同数据类型间的转换。

实例6

实例6 基本数据类型——输出不同数据类型的值

实例任务

定义不同类型的变量,并进行一定的简单运算,要求输出不同类型表达式的值。程序运行结果如图2-4所示。

图2-4 程序运行结果

程序代码

相关知识

1.整型数据

根据占用内存字节数的不同,整型变量又分为以下4类。

1)基本整型(类型关键字为int)。

2)短整型(类型关键字为short [int])。

3)长整型(类型关键字为long [int])。

4)无符号整型。无符号型又分为无符号基本整型(unsigned int或unsigned)、无符号短整型(unsigned short)和无符号长整型(unsigned long)3种,只能用来存储无符号整数。

整型数据或变量占用的内存字节数随系统而异。在16位操作系统中,一般用2字节表示一个int型变量,且long型(4字节)≥int型(2字节)≥short型(2字节)。显然,不同类型的整型变量,其值域不同。有符号整型变量的值域为-215~(215-1);无符号整型变量的值域为0~(216-1)。不同整型数据类型的字节长度和取值范围如表2-2所示。

表2-2 整型数据类型的字节长度和取值范围

2.实型数据

C语言的实型变量,分为以下两种。

1)单精度型:类型关键字为float,一般占4字节,提供7位有效数字。

2)双精度型:类型关键字为double,一般占8个字节,提供15~16位有效数字。

实型常量即实数,在C语言中又称为浮点数,其值有以下两种表达形式。

1)十进制形式:如3.14、10.5等。

2)指数形式:它由字母e或E连接两边的数字,如2.3e-7代表2.3×10-7。e的两边必须有数值,且e后的指数部分必须是整型数,6.1e、.e+5、e-3、1.3e4.8都是非法的。

3.字符型数据

字符型数据是用一对单引号括起来的单个字符,如'A'、'+'、'5'等。另外,转义字符也属于字符型数据。转义字符在上一节已经介绍过。

字符变量的类型关键字为char,一般占用1字节内存单元。字符变量通常也分为两类:一般字符类型(char)和无符号字符类型(unsigned char)。字符型数据的字节长度和取值范围见表2-3。

表2-3 字符型数据的字节长度和取值范围

对于字符型数据,既可以字符形式输出,也可以整数形式输出。实例中,输出变量c1、c2的值,读者可以对比一下两种格式。

4.字符串数据

字符串常量是用一对双引号括起来的若干字符序列。字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串。

C语言规定,在存储字符串常量时,由系统在字符串的末尾自动加'\0'作为字符串的结束标志。如果有一个字符串为“CHINA”,则它在内存中的实际存储为6个字符,最后一个字符'\0'是系统自动加上的,它占用6字节而非5字节内存空间。

对于字符型指针变量可按下列形式定义:

语句中符号*是指针运算符,表示p为指针变量,整个语句表示指针p指向这个字符串。printf()函数中,可以用%s格式控制符进行字符串输出。

实例7

实例7 不同数据类型间的转换——不同类型数据身份的转换

实例任务

定义一些不同类型的变量,进行简单运算,并根据不同要求将运算结果强制类型转换。程序运行结果如图2-5所示。

程序代码

图2-5 程序运行结果

相关知识

1.数据类型的自动转换

不同类型数据间进行混合运算时,要先将数据类型转换成一致后才能进行相应的运算,这种转换是自动完成的,称为数据类型的自动转换。数据类型的自动转换遵循如下原则。

1)若参与运算量的类型不同,则先转换成同一数据类型再进行运算。

2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型量运算时,先把int型的量转成long型再进行运算。

3)所有的浮点运算都是以双精度进行的,即使是仅含单精度(float)量运算的表达式,也要先转换成double型,再进行运算。

4)char型量和short型量参与运算时,必须先将其转换成int型。

5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的数据类型将转换为赋值号左边量的类型。如果赋值号右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。

2.数据类型的强制转换

数据类型的强制转换是根据程序的需要通过类型定义符来完成的,其形式如下:

其功能是把表达式的运算结果强制转换成类型说明符所表示的数据类型。如实例中的(int)b1把b1转换为整型,(float)(a1+a2)把a1+a2的结果转换为单精度型并赋值给变量c。

在强制类型转换时,一定要注意将类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(float)(a1+a2)写成(float)a1+a2,就变成把a1转换成float型之后再与a2相加了。

课堂精练

1)定义两个字符型变量,输出相应的字符及对应的ASCII值。程序运行结果如图2-6所示。

根据以上程序运行结果,请将下面的程序补充完整并调试。

2)定义不同类型的变量,然后进行输出。程序运行结果如图2-7所示。

根据程序的运行结果,请将下面的程序补充完整并调试。

图2-6 程序运行结果(1)

图2-7 程序运行结果(2)