第 2章 数据类型、常量和变量
2.1 数据类型
2.2 常量
2.3 变量
2.1数据类型
数据是程序的必要组成部分,也是程序的处理对象。
数据有常量和变量之分,常量是指程序运行过程中,其值保持不变的量;而变量则是指程序运行过程中,其值可以改变的量。
每个数据对象,不管是常量还是变量,都必须有确定的类型,这是因为数据类型规定了一个数据的可能取值范围、在内存中的存储方式以及它所能进行的运算。
2.1.1 C语言数据类型
2.2常量
常量是程序执行过程中其值不发生变化的数据。常量分为数值型常量、字符型常量和地址常量。其中,数值型常量包括整型常量、实型单精度常量和实型双精度常量;
字符型常量包括字符常量和字符串常量。
2.2.1整型常量
整型常量就是整常数,它是由一系列数字字符组成的常数,不带小数点。整型常量的写法与日常算术整数的写法基本一致。 C语言中整型常量有以下三种表示形式:
①十进制的整型常量:如 123,-789,0等。
②八进制的整型常量:以 0开头的常量是八进制整型常量。
如 023表示八进制数 23,它等价于十进制数的 19;
③十六进制的整型常量:以 0x开头的数是十六进制整型常量。如 0x123表示十六进制数 123,即
0x123=1× 162+2× 161+3× 160=291
八进制数的有效数字字符是 0,1,2……6,7;十六进制数的有效数字字符是 0~ 15,其中 0,1,2……8,9
与十进制数相同,而 10,11……15 则用 A~ F表示。一个数的负值以在该常量的前边加 "-"负号表示,
2.2.2实型常量
实型常量又称浮点数或实数。 C语言中,实数只用十进制形式。它有两种表示方法,即小数形式和指数形式。
小数形式:由数字、小数点和可能的正负号组成。例如:
3.1416,-12.76,0.12,.12,12.,12.0都是 C语言合法的实数。
指数形式:由尾数部分、字母 e或 E和指数部分组成。如十进制数 320 000.0用指数法可表示为 3.2e5,其中 3.2称为尾数,
5为指数,e也可用 E表示。字母 e或 E之前 (即尾数部分 )必须有数字,e后的指数部分必须是整数,如 e-5,7.2e2.5都是不合法的实数 。
2.2.2实型常量
在一般计算机系统中,一个实数在内存中占 4个字节,
双精度实数占 8个字节。实数取值的绝对值范围约为 -
1038~ 1038,具有 6~ 7位十进制有效数字,双精度实数具有 15~ 16位十进制有效数字。
2.2.3字符常量
在 C语言中,字符常量是用单引号括起来的单个字符。
例如,'a','A','= ','+','?'都是合法字符常量,字符常量有以下特点:
①字符常量只能用单引号括起来,不能用双引号或其他括号。
②字符常量只能是一个字符,不能是字符串。
③字符可以是字符集中的任意字符。
2.2.3字符常量
在 C语言中,还有一种特殊的字符常量称为转义字符。
转义字符以反斜线,\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义。例如,
"\n"就是一个转义字符,其意义是 "回车换行 "。
①转义字符中只能使用小写字母,每个转义字符被看做一个字符。
②在 C语言程序中,对不可打印的字符,通常用转义字符表示。
2.2.4字符串常量
字符串常量是用一对双引号括起来的零个或多个字符序列。
在字符串常量中,双引号 ("")为字符串的定界符,而不属于字符串的一部分。如果输出字符串时需要输出双引号,则必须经过转义字符 "\"才能实现。
字符串中所含字符的个数称为该字符串的长度。长度为零的字符串 ("")称为空串。
若程序使用了字符串,经编译后,系统自动在每个字符串末尾加上空字符‘ \0’作为字符串的结尾标志,从而使程序能完整地识别一个字符串。
注意,'\0'和 '0'不同,'\0'是编码为 0的字符,而 '0'则是数字 0,
其编码为 48。
2.2.5符号常量
在 C语言中,常量可以用符号代替,代替常量的符号称为符号常量。为了便于与一般标识符、变量名相区别,
符号常量一般用大写英文字母序列构成。符号常量在使用之前必须预先进行定义,其定义的一般格式是:
在使用常量定义时,有以下 4点需要注意:
( 1)为了与源程序中的变量名有所区别,常量名一般采用大写字母表示。
( 2)对程序中用双引号括起来的字符串内的与常量名相同的字符,不进行常量替换。例如,语句 printf("PI"):
中的 PI不被替换,因为这里的 "PI"代表一个字符串,不是常量名。
( 3)常量替换只是一种简单的替换,替换时不做任何语法检查,只有在对已被替换后的源程序进行编译时才会发现错误。
( 4)常量定义是一种编译预处理命令,不是 C语句,不必在行末加分号。如果加了分号,会连同分号一起进行替换。
2.2.5符号常量
2.2.6枚举常量
所谓“枚举 (Enumeration)”就是一一列举之意,当某些量仅由有限个数据值组成时,通常用枚举类型来表示。
枚举数据类型 (Enumerated Data Type)描述的是一组整型值的集合,可用关键字 enum来定义这种类型。
在枚举类型声明语句中,包含在大括号内的标识符均为整型常量,称为枚举常量。除非特别指定,否则这组常量中的第 1个标识符的值为 0,第 2个标识符的值为 1,第
3个标识符的值为 2,以后依次递增 1。
枚举标记后面变量表中的每个符号代表的是一个整数值,
这些符号只是一个整数值的名字,不是字符串,因此,
它们可以用于使用整数值的任何场合,但不能将其作为字符串直接输入和输出。
2.3变量
在程序运行过程中其值可以改变的量称为变量。所有变量在使用前必须先说明。说明一个变量包括:
( 1)给变量指定一个标识符,即变量的名称。
( 2)指定变量的数据类型 (变量的数据类型决定了变量值的数据类型、表现形式和分配内存空间的大小,同时也指定了对该变量能执行的操作 )。
( 3)指定变量的存储类型和变量的作用域。
C语言中,最基本的数据类型有整型、实型、字符型,相应的变量就有整型变量、实型变量和字符型变量。
2.3.1变量的定义和初始化
1.变量的定义
C程序中的变量必须先定义,然后才能引用。定义变量的格式:类型说明符 变量名表;
( 1)在设计程序时,应当根据数据本身的特点和变化范围正确选择变量类型。
( 2)在不同的 C编译程序中,同一类型的数据所占的字节数可能有所不同,一般情况下,这种差异不会影响 C程序的通用性。
2.变量的初始化
C语言允许在对变量进行说明的同时为需要初始化的变量赋予初始值,并可以在一个数据类型说明符说明多个同类型变量的同时,给多个同类型变量赋初值。但需要注意的是,当给多个变量赋同一初值时,要将它们分开赋值。
2.3.2整型变量
C语言的整型变量分为基本型、短整型、长整型和无符号型四种,其定义的关键字为:
①基本型:用 int表示,在内存中占 2个字节。
②短整型:以 short int或 short表示,在内存中占 2个字节。
③长整型:用 long int或 long表示,在内存中占 4个字节。
④无符号型:无符号整型变量在存储单元中的全部二进制位 (bit)都用于存放数据本身,没有符号位。无符号型变量又分为无符号整型、无符号短整型和无符号长整型三种,分别以 unsigned int(或 unsigned),unsigned short
int(或 unsigned short)和 unsigned long int(或 unsigned
long)表示。各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。
2.3.3实型变量
实型变量分为单精度型和双精度型两类
实型类型分类表变量类型名 类型说明符 所占字节数 取值范围单精度实型 float 4 10-38~ 1038
双精度实型 Double 8 10-308~ 10308
2.3.4字符型变量
字符变量的数据类型说明符是 char,每个字符变量被分配一个字节的内存空间,所以字符变量用来存放字符常量,即单个字符。字符变量类型说明的格式和书写规则都与整型变量相同。
在 C语言中字符型数据和整型数据之间可以通用,即可以将字符型数据以整型数据处理。 C语言允许对整型变量赋予字符值,也允许对字符变量赋予整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。整型数据占两个字节,字符数据占一个字节,当整型数据按字符型数据处理时,只有低八位字节参与操作。
2.3.5数据类型转换
2.3.5 数据类型转换
1.自动类型转换当一个表达式中有不同数据类型的数据参加运算时,要进行类型转换,
由少字节类型向多字节类型转换,先将低级类型的运算对象向高级类型的运算对像进行类型转换,然后再进行同类型运算,这种转换是由编译自动完成的,称为自动类型转换也称为隐式类型转换
float类型先要转换成
double类型,然后再进行运算
char和 short型先要转换成 int类型,然后再进行运算
2.强制类型转换
系统除了自动进行的类型转换外,还提供了使用强制类型转换运算符进行强制转换的功能。强制类型转换也称为显示类型转换,强制类型转换的一般形式为:
(数据类型说明符 )(表达式 )
其功能是把表达式的运算结果强制转换成数据类型说明符所表示的类型。
#include<stdio.h>
void main()
{
float x=3.6,y=6.6;
printf("x+y=%f\n",x+y);
printf("x+y=%d\n",(int)x+(int)y);
}
ANSl标准定义的数据类型数据类型及类型说明符 字节数( byte)
( 1byte=8 bit )
数值范围有符号整型( int) 2 -32768~ 32767
无符号整型( unsigned int) 2 0~ 65535
有符号长整型( long) 4 -231 ~ 231-1
无符号长整型 unsigned long 4 0~ 4294967295
浮点型 float 4 1037 ~ 1038
双精度型 double 8 10307 ~ 10308
长双精度型 long double 16 104931 ~ 104932
字附型 char 1 0 ~ 255