C语言的语法基础

 

2.1.2常量与变量

 

    1.常量

在程序执行过程中,值不能被改变的量称为常量。如123,3.15,'A',"Hello",均是常量。在C语言中有整型常量、实型常量、字符型常量、字符串常量和符号常量五种类型。

(1)整型常量

整型常量就是整数。C语言的整型常量有三种表示形式:

①十进制整数。不由数字0开头的整数组成,可以由数字0至数字9组成,前面可加正号“+”或负号“-”。如:123、+4560、-987都是十进制整常量。

②八进制整数。由数字0开头的整数组成,只能由数字0至数字7组成,前面可加正号“+”或负号“-”。例如:07623、-04567、+0315都是八进制整常量。如果写成0891则是错误的,八进制数不能含有数字8和数字9。

③十六进制整数。由数字0和字母x(或X)开头的数组成,可以由数字0至数字9、字母a至字母f或字母A至字母F组成,前面可加正号“+”或负号“-”。如0xa3f、-0X9A、0x345、+0X6ab都是十六进制整型常量。

使用整型常量应注意下面事项:

①一个整型常量的尾部加上字母l或L时,则为长整型(long 或long int)常量。例如:123l为十进制的长整型常量、0123L为八进制的长整型常量、-0x123L为十六进制的长整型常量。长整型常量往往用于函数调用中,如果函数的形参为长整型,则实参也必须是长整型。

② 一个整型常量也可以由它的值确定它的类型,如果其值在-32768~32767范围内,则认为它是整型(int)常量;如果其值超出上述范围,而是在-2147483648~2147483647范围内,则认为它是长整型(long或long int)常量。

(2)实型常量

实型常量就是实数。C语言中实型常量用两种形式表示:

①小数形式:一个实数的表示包括数字和小数点。例如:1.23456、-0.465、+789.123、0.0、1.0等。

②指数记数法形式:这时实数包括整数部分、小数点、小数部分和指数部分,指数部分前加字母e或E。例如:1.2345e3、12.345E2、1.2345e03、1.2345e+3均表示1234.5这一实数。又如:0.123e+5、1e-4、35.69E11均为合法的实数表示。用指数形式表示实数时,指数部分必须是整数,字母e或E之前必须有数字。例如:123e5.6、e5、.e9、e等均为不合法的指数形式。

上述两种表示方法所表示的实型常量都是双精度实型(double),双精度实型常量在内存中占8个字节,取值范围在1.7×10-308~1.7×10+308之间。Turob  C中,在双精度实型常量后加一字母l或 L则构成长双精度实型常量(long double),长双精度实型在内存中占10个字节,取值范围在3.4×10-4932~1.1×10+4932之间。例如1.23e1234l、5.67e-3456L均为正确的长双精度实型常量。由实型常量的表示范围可知实型常量总是取正值。如果要使用负值,可在实型常量的前面加一个负号,构成常量表达式,其中的负号处理成算术操作符。实型常量只有十进制实型常量一种,没有八进制实型常量,也没有十六进制实型常量。绝对值小于1的实型常量,其小数点前面的零可以省略,如:0.123可写为.123,-0.0123e-5可写为-.0123e-5。

(3)字符型常量

C语言的字符常量是ASCII码字符集里的一个字符,包括字母(大、小写有区别)、数字和标点符号以及特殊字符等,均为半角字符,一个字符常量在内存中占1个字节,因此字符常量不能是全角字符。C语言字符常量有三种表示方法:

①把单个字符用一对单引号括起来表示字符常量。例如  'a'、'6'、'A'、'+'、':' 。

②用该字符的ASCII码值表示的字符常量。例如十进制数65表示大写字母'A', 十六进制数0x41也表示'A',八进制数0101还表示大写字母'A'。一些不能用符号表示的特殊字符(如控制符等),可以用ASCII码值来表示,如换行可用10表示,也可用十六进制数0x0a或八进制数012来表示换行。

③反斜扛“\”开头后跟规定的单个字符或数字,并用一对单引号括起来表示字符常量。例如用'\r'表示回车、用'\n'表示换行。换行也可用'\12'或'\012'反斜扛后跟八进制数表示,应注意这里反斜扛“\”后的八进制数、十六进制数前面的0可以省略,省略后并不表示成十进制数。换行还可用'\x0a'或'\0x0a'反斜扛后跟十六进制数表示。这种表示法中反斜扛“\”后面的字符变成了另外的意义,我们称之为转义字符。表2.4列出了常见的转义字符常量。

表2.4 常见的转义字符常量

字符常量

含   义

等价表示

'\n' 输出到屏幕和文本文件为回车且换行,

若输出到二进制文件仅为换行10、0x0a、'\x0a'、'\12''\r'回车13、0x0d、'\x0d'、'\15''\t'制表键,光标右移到下一输出区首,通常每个输出区占个8个字符9、0x09、'\x09'、'\11''\f'换页12、0x0c、'\x0c'、'\14''\b'退格8、0x08、'\x08'、'\10''\\'反斜扛字符 \92、0x5c、'\x5c'、'\134''\''单引号字符 '39、0x27、'\x27'、'\47''\"'双引号字符 "34、0x22、'\x22'、'\42''\ddd'1到3位八进制数组成ASCII码所对应字符0ddd'\xhh'1到2位十六进制数组成ASCII码所对应字符0xhh

[例2.1]

main()

{  printf("123456789012345\n");

printf("ab c\tde\b\101fg\n");

printf("ab c\rde\12\x41\n");

}

运行结果:

123456789012345

ab c    dAfg

de c

A

上例没有单个输出字符常量,而使用printf函数输出双引号内的各个字符。

第一个printf输出一串数字,作为坐标参照。最后的'\n'作用是回车并换行。

第二个printf从第1列开始先输出"ab c" ,后遇到'\t'光标移到下一输出区的开始位置(第9列),从第9列开始输出"de",又遇到退格符'\b',光标退格(左移一格)在字符'e'的位置上输出'\101' (字母'A')以及"fg" ,在第10列上字母'A'把字母'e'覆盖了,最后回车换行。

第三个printf从第1列开始先输出"ab c" ,后遇到'\r'回车,光标移到本行的第1列输出"de",并把"ab"覆盖了,又遇到回车换行'\12', 光标移到下行的第1列输出字符'\41' (字母'A'),最后回车换行。

(4)字符串常量

若干个字符用双引号括起来就构成了字符串常量。如"Good  morning!"、"123"、
"A"、"abcde" 都是字符串常量。C语言中在存储字符串常量时,除了存储双引号中的所有字符之外,在串的最后还要存放一个字符'\0',表示该字符串常量到此结束。字符'\0'也称为字符串结束标志。因此字符串常量"abcde" 占内存6个字节,字串结束标志'\0'多占了一个字节。字符串常量"abcde"在内存是按如下方式存储的:

a b c d e \0

利用C系统提供的输出函数printf和 puts可以将字符串常量整体输出到屏幕,利用输入函数scanf和 gets可以将字符串整体输入到内存。另外字符常量'A',和字符串常量"A"不同,前者为字符常量可直接赋值给字符变量,而后者为字符串常量可以存放到字符数组中,也可以赋值给字符指针变量,'A'占内存1个字节,而"A" 占内存2个字节,字符串结束标志'\0'多占了一个字节。

(5)符号常量

C语言中可以用一个标识符来代表一个常量,这个标识符就称为符号常量。可以用两种方式来定义C语言中符号常量。

①     利用宏定义 #define 来定义符号常量。例如:

#define PI 3.14159

#define ESC 27

#define ID  "102343-3852396-y3v4x5a"

则PI、ESC与ID是符号常量,在程序中它们的值不能被改变。程序中用符号常量来代替一串不易记意的数字或一串字符串,不仅增加了程序的可读性,也减轻了程序设计人员的负但。另外,用一串较短的字串来代替一串长字符串,也提高了编写效率。C语言中习惯用大写字母表示符号常量。

② 利用"const"来定义符号常量,这一方法在定义符号常量的同时也定义了该常量的数据类型。用const来定义符号常量的格式为:

const  数据类型关键字 符号常量1=常量1, 符号常量2=常量2,...;

例如:

const int MAXINT=32767;

const long int MAXLONG=2147483647;

定义符号常量MAXINT为整型、MAXLONG为长整型。

 

Tags:

发表评论