常量就是其值在程序运行过程中不可以改变的量,包括 3 类,分别是数值型常量(包括整型常量和实型常量)、字符型常量和符号常量。
C语言整型常量
整型常量就是整型常数(没有小数部分),如 123、−456 等。
整型常量有十进制、八进制和十六进制 3 种表示形式:
十进制:我们日常所见到的整数都是十进制形式的,如 365、75 等。十进制数使用 0~9 来表示所有数,递进关系为逢十进一。注意,除了 0 本身,其他十进制数不能以 0 开头。
八进制:使用 0~7 来表示所有的数,递进关系为逢八进一。八进制常量前要加上 0 作为前缀,如 0123、0432 等。
十六进制:使用 0~9 和字母 A~F(或 a~f)来表示所有的数,递进关系为逢十六进一。十六进制常量前要加上 0x 作为前缀,如 0x123、0x3ba4。
整型常量可以是基本整型(int)、长整型(long int)或短整型(short int),还可以是无符号整型(unsigned)或有符号(signed)整型。在常量后加上 L(或 l),表示该常量是长整型,如 1314L;加上 U(或 u),表示该常量为无符号整型,如 520U。
注意,整型常量所占的内存大小和数值范围取决于编译器。字长为 16 位的计算机中,基本整型为 16 位;字长为 32 位的计算机中,基本整型为 32 位。这里,8 位等于 1 字节。
无符号整型可以存放的正数范围比有符号整型大一倍,因为有符号整型的最高位用于储存符号,而无符号整型所有位全部同来存储数字:
短整型是 16 位的,无符号短整型的取值范围是 0~65535,有符号短整型的取值范围是 −32768~+32767。
长整型是 32 位的,无符号长整型的取值范围是 0~4294967295,有符号长整型的取值范围是 −2147483648~+2147483647。
16 位计算机中,基本整型的取值范围和短整型相同;32 位及以上计算机中,基本整型的取值范围和长整型相同。
C语言实型常量
实型也称为浮点型,由整数和小数两部分组成,并用十进制的小数点进行分隔。表示实数的方式有小数和指数两种。
1) 小数形式
小数表示方法就是使用十进制的小数方法描述实型。例如:
123.45;
0.5458;
2) 指数形式(科学计数形式)
当实型数非常大或非常小时,可使用指数形式来表示。使用字母 e 或者 E 表示指数形式,如 45e2 表示的是 45×10^2,即 4500,45e-2 表示的是 45×10^−2,即 0.45。
上面示例的两个小数用指数形式表示如下:
1.2345e2;
5.458e-1;
书写实型常量时,可以在常量后加上 F 或 L 后缀(大小写通用)。F 表示该常量是 float 单精度类型,L 表示该常量为 long double 长双精度类型。例如:
1.2345e2F; // 单精度类型
5.458e-1L; // 长双精度类型
如果不加后缀,则默认实型常量为 double 双精度类型。例如:
1.2345e2; // 默认为双精度类型
C语言字符型常量
字符型常量与整型、实型有所不同,需要使用定界符进行限制。
字符型常量包括两种:字符常量和字符串常量。
1) 字符常量
使用一对单直撇引号(' ')括起来的字符就是字符常量,如 'A'、'#'、'b' 等:
字符常量只能包括一个字符,不能是字符串。例如,'A' 是正确的,但用 'AB' 来表示字符常量就是错误的。
字符常量是区分大小写的。例如,'A' 和 'a' 代表的是不同的字符常量。
' '代表的是定界符,不属于字符常量的一部分。
【实例】使用 putchar() 函数将多个字符常量依次输出,在控制台中显示“Find Day!”。
#include
int main()
{
putchar('F'); /*输出字符常量 F*/
putchar('i'); /*输出字符常量 i*/
putchar('n'); /*输出字符常量 n*/
putchar('d'); /*输出字符常量 d*/
putchar('\0'); /*字符结束标志*/
putchar('D'); /*输出字符常量 D*/
putchar('a'); /*输出字符常量 a*/
putchar('y'); /*输出字符常量 y*/
putchar('!'); /*输出字符常量!*/
putchar('\n'); /*进行换行*/
return 0;
}
运行程序,显示效果为:
Find Day!
2) 字符串常量
字符串常量是用一对双直撇引号(" ")括起来的若干字符序列。例如,"Have a good day! " 和 "beautiful day" 即为字符串常量。
如果字符串中一个字符都没有,将其称作空串,此时字符串的长度为 0。
在 C语言中存储字符串常量时,系统会在字符串的末尾自动添加一个“\0”,作为字符串的结束标志。例如,字符串 "welcome" 在内存中的存储形式如下图所示。
图 1 “\0”为系统所加
【实例】使用 printf() 函数将字符串常量《静夜思》诗句在控制台输出显示。
#include
int main()
{
printf("窗前明月光\n"); /*输出字符串*/
printf("疑是地上霜\n");
printf("举头望明月\n");
printf("低头思故乡\n");
return 0; /*程序结束*/
}
运行程序,显示效果为:
窗前明月光
疑是地上霜
举头望明月
低头思故乡
字符常量和字符串常量的差别主要体现在以下几个方面。
定界符不同。字符常量使用的是' ',而字符串常量使用的是" "。
长度不同。字符常量只能有一个字符,长度为 1。字符串常量的长度可以是 0,也可以是任意值。即使字符串常量中的字符只有 1 个,长度也不是 1,而是 2。例如,字符串常量"F",其在内存中的存储情况如图 2 所示(因为系统自动添加了结束字符 “\0”,所以其长度为 2)。
存储方式不同。字符常量中存储的是字符的 ASCII 码值;字符串常量不仅要存储有效的字符,还要存储结尾处的结束标志 “\0”。
图 2 字符串“F”
C语言转义字符
前面实例中能看到 “\n” 符号,但输出结果中却不显示该符号,只是进行了换行操作,这种符号称为转义符号。
转义符号在字符常量中是一种特殊的字符,通常以反斜杠 “\” 开头,后面跟一个或几个字符。常用的转义字符及其含义如下表所示。
表:常用的转义字符表
转义字符
意义
转义字符
意义
\n
回车换行
\
反斜杠 “\”
\t
横向跳到下一制表位置
\'
单引号符
\v
竖向跳格
\a
鸣铃
\b
退格
\ddd
1~3 位八进制数所代表的字符
\r
回车
\xhh
1~2 位十六进制数所代表的字符
\f
走纸换页
C语言符号常量
C语言程序中,可以使用符号名来代替固定的常量值。例如使用符号常量来表示一年有多少个小时(一年按 365 天计算):
#include
#define HOUR 365*24 /*定义符号常量 HOUR*/
int main()
{
int h,result; /*定义变量*/
printf("请输入小时:"); /*提示输入信息*/
scanf("%d",&h); /*输入数据*/
result=h/(HOUR); /*进行计算*/
printf("一共有%d年\n",result); /*显示结果*/
return 0; /*程序结束*/
}
运行程序,显示效果为:
请输入小时:356265
一共有40年