不合法的标识符如: 以数字开头 出现了字符 Good bye中间留有空格 C语言规定,字母的大小写是有区别的,比如,SUM、Sum和um代表三个不同的标识 符,如果你曾有过 PASCAL或 FORTRAN等语言的编程经历,那么一定要注意这一点 C语言本身并没有要求标识符的长度但在任何机器上所能识别的标识符的长度总是 有限的,有些系统可以识别长达31个字符的标识符(如VAX-11VMSC),而有些系统只 能识别8个字符长度的标识符,这意味着:即使第9个字符不同,只要前8个字符一样,系统 也认为是同一个标识符,如 categoryl和 category2。因此,为了避免出错和增加可移植性,标 识符最好前8个字符有所区别。 一个写得好的程序特别是一个有实际意义的程序,标识符的选择应尽量反映出所代表 对象的实际意思。如表示年可以用year,表示长度可以用 length,表示和可以用sum等,这样 的标识符本身就增加了可读性,使程序更加清晰 C语言中有一些标识符被称为关键字,它们是系统留做特殊用途的,不能作为一般标识 符使用如我们见过的整型变量说明int等。附录B中给出了C语言中全部关键字。 有些标识符虽不是关键字,但C语言总是以固定的形式用于专门的地方,因此,用户也 不要把它们当做一般标识符使用,以免造成混乱。这些标识符常用的有 define include ifdef ifndef endif elif 第三节常量 常量是指在程序运行过程中其值不能被改变的量 2.3.1整型常量 整型常量简称整数C语言中有三种形式的整型常量。 1.十进制整数 我们通常习惯的十进制整数形式给 10,-345,0,+5 2.八进制整数 八进制整数是以0开头的八进制数字串,只能使用数字0~7。八进制数没有符号,如果 个八进制前带有负号实际上是对这个八进制数进行了单目减运算。下面是一些合法的八 进制整数: (十进83) (十进制256) 017777 (十进制65535) 3十六进制整数 十六进制整数是以0x或0X开头的十六进制字符串。十六进制字符有0~9,a~f(或A F),其中a~f(或A~F)表示十进制值10~15,下面是一些合法的十六进制整数 (十进制18)
(十进制11) (十进制168) OxFFFF (十进制65535 整型数的取值范围通常是由机器的字长决定的。在一个字长16位的计算机上,带符号 整数值的范围是十进制一32768~32767,无符号整数值的范围是十进制0~65535,数值超 过这个范围时,系统自动按长整数对待。长整数每个数值占4个字节(32位)存储空间,长整 数的表示形式是在数字的后面跟上字母L,如 (十进制12) 100L (十进制-100 (十进制1234567) 012L (十进制10) 0200000L (十进制65536) 0x12L (十进制18) 0x1000L (十进制65536) 看起来12L与12好象没有什么差别但在一个用16位二进制表示整数的计算机上,12 占据2个字节存储空间,而12L占据4个字节 2.3.2浮点型常量 浮点型常量也称实数。C语言中实数有两种表示形式。 1.十进制数形式 由数字,小数点和可能的正负号组成,如 0.345,,345,345.,345.0,0.0,-3.45 2指数形式 也称科学计数法,用e或E表示指数,其一般形式为 表示a×10,其中b必须是整数,下面给出一些指数形式实数的例子 345e2 (相当于345×102) (相当于-3.2×105) (相当于0.5×10-2) 实数不管表现形式如何,总是占据8个字节的存储空间(即以双精度的形式出现)。 2.3.3字符型常量 C语言中的字符型常量是用单引号(向左撤)括起来的一个字符,如 A’, C语言的字符常量占据一个字节的存储空间在那个存储单元中存放的实际上并不是字符 本身,而是该字符在所在机器釆用的字符集中的编码,也就是一个整数值。大多数机器系统 采用ASCI字符集(本书中也假定是ASCI字符集见附录A),在这种情况下,’a’在内存 中表示为对应的ASCI码97,0’表示为48,形式如图22所示。 图2-2字符常数的表示
由于字符常量是个整数因此它可以象整数一样参加数值运算。当然它的主要用途是 与其他字符作比较。 除了以上形式的字符常量外,C语言还允许使用一种以特殊形式出现的字符常量,以表 某些非图形字符,这就是以“、”开头的转义字符序列。在上一章中我们用“m”表示换行 Ⅶ实际上是一个字符它的ASCI码值为10,因此可以表示为n。常见的以\开头的转义 序列见表2.1 表2.1转义字符序列表 字符形式 换行 水平制表(下一个tab键的位置) 垂直制表(竖向跳格 走纸 空字符 单引号 双引号 d1~3位8进制所代表的字符 dd是用1~3位八进制数来表示相应的ASCI码,如"n’也可以表示为"\012’或 2.3.4字符串常量 字符串常量是用一对双引号(")括起来的零个或多个字符的序列,如 "This is a character string. MCHINA" 0123456789″ "$10000.00″ 号中有一个空格 ”(引号中什么也没有) 〃n"(引号中有一个转义字符) 字符串常量在内存中存储时系统自动为每个字符串常量的尾部加一个字符\0,用以标 识这字符串的结束,如字符串 在内存中的形式是 图2-3字符常数的表示 (实际上,字母应当用对应的ASCI码表示,但为了方便以后表示字符时,直接用字符
本身表示) 了解了这一点你就可以区分字符串”a"和字符'a’有何不同了。它们在内存中的形式 如图24所示 字符串以\0结束这种形式表明C中的字符串的长度是不受限制,其长度可以靠\0来 判断 2.2.5符号常量 常量也可用一个标识符来命名,这就是符号常量,如 # define pi 3 1415926 n() float radius, circum, area; printf("%d”,& radius) 2,PI“ radius is %f\ 运行结果 Input radius: 3 circumference is 18.849556 area is28.274334 这个程序是按输入的半径值求圆周及圆的面积。第一行的 #t define pi 3. 1415926 定义了一个符号常量P1,以后凡在程序中出现PI,都表示3.1415926。P是一个常量在程 序中只能引用,而不能被改变。用符号常量来代替常数本身,至少有两个好处: 其一,可以使程序更清晰易读,如我们定义了一个表示每页行数的符号常量 #t define Pagesize 55 则语句 while(line < PAGESIZE) line + 比较清楚地表现了当行(line)小于每页尺寸时应做的工作。如果用 就很难弄清楚55代表什么
其二,程序更易修改。当我们把页的大小改变为66行时,只需要改写 #t define pagesize 66 而程序的其余部分不用改变,如果我们不用符号常量而用数值本身就需要在程序中到处寻 找数值55,而且并不是所有55都表示是每页的尺寸,这就大大增加了修改的难度,也很容 易出错。 通常的习惯是用大写字母表示符号常量,用小写字母表示变量等,以示区别 最后提醒一点,定义符号常量的 define行不要以分号结束,它不是一个语句 第四节变量及其说明 变量是指程序执行过程中,其值可以改变的量。 变量有一个名字称为变量名用标识符表示。每个变量都与一个数据类型相联系,类型 决定了变量可以取值的范围和它可以参加的运算。C语言规定: 所有变量在使用之前必须加以说明 变量的说明形式为 类型名变量名变量名,……变量名 24.1整型变量 整型变量用关键字int说明 如 int i,i, k 说明了三个整型变量i,和k。 整型变量的取值范围由机器字长决定,如微机的整型变量占据二个字节,取值在 32768~32767(-215~21-1)之间,而整型变量占4个字节的机器(如VAX-11),整型变 量取值范围是-2147483648~2147483647(-21~21-1)。 除了基本int型外,还可以在int前加上修饰符来改变int型的意义,修饰符有: signed(有符号 unsigned(无符号) g(长型) short(短型) 由于整型的缺省形式是有符号的,所以 signed可以不用(确实极少看到有人用),加上 修饰符后,整型变址的形式有: 可简写为 short 可简写为long unsigned int可简写为 unsigned short int可简写为 unsigned short gned long int可简写为 unsigned long 也就是说,整型变址的说明加上修饰符后,nt可以省略。整型变量加上修饰符后,其取值范 围有所变化。以16位机为例,表2.2给出了各种形式整型变量的取值范围