C语言入门很轻松(微课超值版)
上QQ阅读APP看书,第一时间看更新

3.1 使用常量

常量是固定值,在程序执行期间不会改变。常量可以是任何的基本数据类型,比如整型常量、浮点常量、字符常量,或字符串常量,也有枚举常量等。在程序中,常量可以不经说明而直接引用。

3.1.1 认识常量

在程序中,有些数据是不需要改变的,也是不能改变的,因此,我们把这些不能改变的固定值称之为常量。到底常量是什么样的呢?下面给出几条语句。

     int a=1;
     char ss="a"
     printf("Hello \n");

此段程序语句中“1”“a”“Hello”,这些在程序执行中始终是保持不变的,它们都是常量。注意,常量的值在定义后不能进行修改。

3.1.2 整型常量

在C语言中,整型常量有十进制、八进制、十六进制3种进制表示方法,并且各种数制均有正(+)负(-)之分,正数的“+”可省略。例如,0、-12、255、1、32767等都是整型数据。

(1)十进制:包含0~9中的数字,但是一定不能以0开头,如15、-255。

(2)八进制:只包含0~7中的数字,必须以0开头,如017(十进制的15)、0377(十进制的255)。

(3)十六进制:包含0~9中的数字和a~f中的字母,以0x或0X开头,如0xf(十进制的15)、0xff(十进制的-1)、0x7f(十进制的127)。

以下是各种类型的整型常量的实例:

☆大牛提醒☆

可以在十进制整型常量后面添加l或u来修饰整型常量,若添加l或L则表示该整型常量为“长整型”,如17L;若添加u或U则表示该整型常量为“无符号整型”,如17u;若添加lu或LU则表示该整型常量为“无符号长整型”,如17LU;这里的l或u不区分大小写。

【例3.1】编写程序,在命令行中输出整型常量(源代码\ch03\3.1.txt)。

程序运行结果如图3-1所示。

图3-1 例3.1的程序运行结果

☆大牛提醒☆

整型数据是不允许出现小数点和其他特殊符号的。另外,在计算机中,整型常量以二进制方式存储在计算机中;在日常生活中,数值的表示是以十进制为主。

3.1.3 浮点常量

C语言中的浮点型常量数据就是平常所说的实数。在C语言中,它有两种表示形式,一种是十进制小数形式;一种是指数形式。

(1)十进制小数形式:由数码0~9和小数点组成。

例如:0.1、25.2、5.789、0.13、5.8、300.5、-267.8230等均为合法的实数。注意,必须有小数点。

(2)指数形式:由十进制数,加字母e或E以及阶码(只能为整数,可以带符号)组成。其一般形式为a E n,其中a为十进制数,n为十进制整数,它的值为a*10n。例如:2.8E5、3.9E-2、0.1E7、-2.5E-2等。

☆大牛提醒☆

科学记数法要求字母e(或E)的两端必须都有数字,而且右侧必须为整数,如下列科学记数法是错误的:e3、2.1e3.2、e。

【例3.2】编写程序,在命令行中输出浮点常量(源代码\ch03\3.2.txt)。

程序运行结果如图3-2所示。从结果可以看出,直接输出的数值都没有发生变化,这些数值都是浮点常量。

图3-2 例3.2的程序运行结果

3.1.4 字符常量

字符常量是用单引号'括起来的一个字符,一个字符常量在计算机的存储中占据一字节,例如:'a'、'b'、'='、'+'、'?'都是合法字符常量。字符常量分为一般字符常量和转义字符。

1.一般字符常量

一般字符常量的值为该字符的ASCII码值。如'a'、'A'、'0'、'?'等都是一般字符常量,但是'a'和'A'是两个不同的字符常量,'a'的ASCII码值为97,而'A'的ASCII码值为65。在C语言中,字符常量有以下特点:

· 字符常量只能用单引号括起来,不能用双引号或其他括号。

· 字符常量只能是单个字符,不能是字符串。

· 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5是不同的,'5'是字符常量,不能参与运算。

2.转义字符

除了正常显示的字符外,还有一些控制符是无法通过正常的字符形式表示的,如常用的回车、换行、退格等。因此,C语言还使用了一种特殊形式的字符常量,这种特殊字符称为转义字符。

转义字符是以反斜线(\)开头,后跟一个或几个字符的特定字符序列。它表示ASCII字符集中控制字符、某些用于功能定义的字符和其他字符,不同于字符原有的意义,故称为“转义”字符。如'\n'表示回车换行符,'\\'表示字符“\”。常用的转义字符如表3-1所示。

表3-1 C语言中常见的转义字符

广义地讲,C语言字符集中的任何一个字符都可用转义字符来表示。如表3-1中所示的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII码值。例如,\141和\x61都表示字母a,\134和\X5C都表示反斜线,\XOA表示换行等。

【例3.3】编写程序,在命令行中输出字符常量与转义字符(源代码\ch03\3.3.txt)。

程序运行结果如图3-3所示。

图3-3 例3.3的程序运行结果

3.1.5 字符串常量

字符串常量是由一对双引号括起的字符序列。例如:"Hello World"、"C program"、"3.14"等都是合法的字符串常量,字符串常量和字符常量是不同的量。它们之间主要有以下区别。

(1)字符常量由单引号括起来,字符串常量由双引号括起来。

(2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。

(3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。

☆大牛提醒☆

在C语言中没有相应的字符串变量,但可以用一个字符数组来存放一个字符串常量,这在后面的章节中会详细介绍。

(4)字符常量占一字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一字节中存放字符"\0" (ASCII码值为0),这是字符串结束的标志。

例如:字符串"C program"在内存中所占的字节可以表示为如下所示的样式。

字符常量'a'和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。

字符常量'a'在内存中占一字节,可表示为如下所示的样式。

字符串常量"a"在内存中占两字节,可表示为如下所示的样式。

【例3.4】编写程序,在命令行中输出字符串常量(源代码\ch03\3.4.txt)。

程序运行结果如图3-4所示。

图3-4 例3.4的程序运行结果