一、 概述
数据 是C语言程序操作的基本对象,在C语言中,按被定义变量的性质、表示形式、占据存储空间的多少、构造特点可把数据划分为基本数据类型、构造数据类型、指针类型和空类型,如图所示:

二、标识符
在C语言中,所谓标识符,是指用来标识程序中用到的变量名、函数名、类型名、数组名、文件名及符号常量名等的有效字符序列。标识符的命名规则是:
- 组成:由字母、数字及下划线组成;
- 开头:不能以数字开头,第一个字符必须是字母或下划线;
- 不能是关键字。
三、关键字
在c语言中,具有特别意义的字符串称为关键字,也称保留字。

四、常量和变量
C程序的数据中,按其值是否可改变分为常量和变量。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。
1.常量
常量可分为直接常量和符号常量两种。
- 直接常量又包括整型常量、实型(浮点型)常量和字符常量。
- 符号常量是用标识符来表示一个常量。符号常量在使用之前必须先定义,其一般形式为:
cpp
#define PI 3.1415926
其含义是以标识符PI来代表数据3.1415926。宏定义命令之后,程序中用到的3.1415926的地方都可以用标识符PI来替代。
宏定义可以增强程序的可维护性。例如,当需要修改某一常量时,只需要修改定义中的常量值即可。
习惯上符号常量的标识符用大写字母表示。
2.变量
每个变量都有一个名字,这个名字称为变量名。变量名必须是合法的标识符,它代表了某个存储空间及其所存储的数据。这个空间所存储的数据称为该变量的值。
(1)变量的定义
变量在使用之前必须先定义,定义变量的一般格式为:
cpp
类型说明符 变量名;
例如,定义一个整型变量a
cpp
int a;
定义变量时,应注意下面4点:
- 允许在一个类型说明符后定义多个相同类型的变量,各变量名之间用逗号隔开,具体格式为:
cpp
类型说明符 变量名1,变量名2,变量名3,......
- 类型说明符与变量名之间至少有一个空格;
- 最后一个变量名之后必须以;结尾
- 变量定义必须放在变量使用之前,一般放在函数体的开始部分。
(2)变量的赋值
在定义变量的时候,可以同时给变量赋初始值,这种形式也成为变量的初始化。例如,定义一个整型变量a,并为其赋值0
cpp
int a = 0;
也可以先定义变量,再对变量赋值。
cpp
int a;
a = 0;
五、基本数据类型
1.整型
(1)整型常量
整型常量的表示形式如下:
- 十进制整数:如18,-175
- 八进制整数:以0开头,用0~7这8个数字组合表达。例如:0154
- 十六进制数:以0x或0X开头,用0~9这10个数字及字母A~F组合表达。例如:0x15F
【注意】
默认整型常量为int类型
在常量后面加上字符L(l)和U(u)进行修饰,L表示该常量为长整型,U表示该常量为无符号整型。例如:12567895468L、500U等。
(2)整型变量
整型变量可分为有符号整型和无符号整型两大类。
有符号整型指的是所存储的数值可以带正负号,所以需要一个符号位。
无符号整型指的是数值只有整数。
【注意】默认情况下,C程序的整型表里是有符号的,若要使用无符号整型,需要用关键字unsigned声明。
为了适应不同的应用场合,C程序中可以定义多种整数类型,其长度各不相同。其中,最常用的是有符号整型(用关键字int表示)长度为32位(4个字节)。此外,还有长整型(用关键字long表示)和短整型(用关键字short表示)。
编写程序时,除可以指明变量是长整型或短整型,有符号整型或无符号整型,还可以把说明符组合起来。因此,整型变量可以分为有符号基本整型、无符号基本整型、有符号短整型、无符号短整型、有符号长整型和无符号长整型这6种。各类型的关键字和取值范围如表所示。

【数据溢出】
在c程序中,在C程序中,各种整型变量都有其特定的表示范围,当一个数据超出了其类型所能表示的范围时,称为数据溢出。
【案例3.1】
cpp
#include <stdio.h>
int main(){
short a,b;
a = 32757;
b = a+1;
printf("a=%d,b=%d",a,b);
return 0;
}
【运行结果】 程序运行结果如图所示。

【程序说明】 这里定义的变量a和b是有符号短整型,其取值范围为−32768~32767,所以当a的值加1变成了32768后就会发生"溢出"。但程序运行时并不报错,它好像汽车里程表一样,达到最大值以后,又从最小值开始计数。所以32767加1后得到的结果不是32768,而是−32768。
2.浮点型
浮点型数据也称为实型数据,是带有小数点或指数符号的数值数据,包括浮点型常量和浮点型变量两类。
(1)浮点型常量
浮点型常量的表示只采用十进制形式,包括直接十进制形式和指数形式两类。 (
1)直接十进制形式,如0.0013、−1482.5。
2)指数形式,通常用来表示一些比较大或者比较小的数值,格式为 实数部分+字母E或e+正负号+整数部分 其中字母E或e表示十次方,正负号表示指数部分的符号,整数部分为幂的大小。字母E或e之前必须有数字(实数部分),之后的数字必须为整数。例如,0.0013可表示为1.3e−3,−1482.5可表示为−1.4825e3。
(2)浮点型变量
根据其精度不同,浮点型变量可以分为单精度类型、双精度类型和长双精度类型。
1)单精度类型使用关键字float来定义变量,它在内存中占4个字节,提供6位有效数字,取值范围为−3.4×1038~−1.2×10−38、0和1.2×10−38~3.4×1038。
【例3-1-2】 单精度型数据的有效位。
cpp
#include <stdio.h>
int main()
{
float f; /*定义单精度型变量f*/
f=1234567.95789; /*将值1234567.95789赋给变量f*/
printf("f=%f\n",f); /*输出变量f的值*/
return 0; /*函数返回值0*/
}
【运行结果】 程序运行结果如图所示。
2)双精度类型使用关键字double来定义变量,它在内存中占8个字节,提供15位有效数字,取值范围为−1.7×10308~−2.3×10−308、0和2.3×10−308~1.7×10308。
【例3-1-3】 将例3-1-2中的变量定义为double类型。
cpp
#include <stdio.h>
int main()
{
double f; /*定义双精度型变量f*/
f=1234567.95789; /*将值1234567.95789赋给变量f*/
printf("f=%f\n",f); /*输出变量f的值*/
return 0; /*函数返回值0*/
}
3)长双精度类型使用的关键字是long double。不同的编译系统对long double型的处理方法不同。例如,Turbo C 2.0对long double型分配16个字节,而Visual C++则对long double型和double型一样处理,其有效数字位数和取值范围也与double型一致。
3.字符型
字符型数据包括字符型常量和字符型变量。
1)字符型常量 字符型常量包括字符常量、字符串常量和转义字符。
-
C程序中的字符常量必须用单撇号(单引号)括起来,且单撇号中只能是单个字符,如'A'、'a'、'8'、'&'。
-
由于字符型数据在C程序中是以ASCII码形式存储的,因此字符常量的值就是其对应的ASCII码值。例如,字符'A'的ASCII码值为65,'a'的ASCII码值为97。
2)字符串常量是一对双撇号(双引号)括起来的一个或多个字符。例如,"A"、"China"、"Welcome to beijing"等。 C程序中存储字符串常量时,系统会在字符串的末尾自动加一个'\0'作为字符串的结束标志。例如,字符串常量"China"在内存中的存储形式如图所示。

3)转义字符是C程序中表示字符的一种特殊形式,它以反斜杠"\"作为标志符号,后面跟一个字符(也可以是一个八进制或十六进制数)。转义字符具有特定的含义,不同于字符原有的意义,如转义字符'\0'表示字符串结束。常用转义字符如表所示。

字符型变量用来存储单个字符,类型说明符是char。字符型变量定义的格式和书写规则都与整型变量相同。例如:
cpp
char c1,c2; /*定义字符型变量c1和c2*/
c1='a'; /*将'a'赋值给c1*/
c2='b'; /*将'b'赋值给c2*/
4. 数据类型转换
在C程序中,不同类型的数据可以混合运算,但在运算之前应先转换成同一类型。数据类型的转换有自动类型转换和强制类型转换两种方式。
1)自动类型转换 自动类型转换是由编译系统自动进行的,不需要人为干预。自动类型转换要遵循以下3个基本规则。
- 若参与运算的变量类型不同,须先转换成同一类型(自动转换),然后进行运算。
- "低级向高级转换"原则。如果运算中有几种不同类型的操作数,则统一转换为最高级的数据类型后再进行运算。数据类型的转换方向如图所示。

- 赋值运算两边的数据类型不同时,赋值号右边数据的类型将会转换为左边数据的类型。
【例3-1-4】 数据类型转换的应用。
cpp
#include <stdio.h>
int main()
{
int a,x; /*定义整型变量a和x*/
float b; /*定义单精度型变量b*/
double c,y; /*定义双精度型变量c和y*/
a=1; /*将1赋值给a*/
b=2.1; /*将2.1赋值给b*/
c=3.2; /*将3.2赋值给c*/
x=a+b+c; /*将a、b、c的和赋值给x*/
y=a+b+c; /*将a、b、c的和赋值给y*/
printf("x=%d,y=%f",x,y); /*输出整型变量x和单精度型变量y*/
return 0;
}
【运行结果】 程序运行结果如图所示。

【程序说明】 计算a+b+c时,先将变量a和变量b都转换成double型,然后计算,所以结果为double型。但赋值时,x为int型,故会将计算结果转换成int型赋值给x,x的值为6。
