2.2 常量与变量2.2.1 标识符命名在C语言中,标识符是对变量、函数标号和其它各种用户定义对象的命名。标识符的长度可以是一个或多个字符。绝大多数情况下,标识符的第一个字符必须是字母或下划线,随后的字符必须是字母、数字或下划线(某些C语言编译器可能不允许下划线作为标识符的起始字符)。下面是一些正确或错误标识符命名的实例。正确形式 错误形式count 2counttest23 hi!therehigh_balance high..balanceANSI标准规定,标识符可以为任意长度,但外部名必须至少能由前8个字符唯一地区分。这里外部名指的是在链接过程中所涉及的标识符,其中包括文件间共享的函数名和全局变量名。这是因为对某些仅能识别前8个字符的编译程序而言,下面的外部名将被当作同一个标识符处理。counters counters1 counters2ANSI标准还规定内部名必须至少能由前31个字符唯一地区分。内部名指的是仅出现于定义该标识符的文件中的那些标识符。C语言中的字母是有大小写区别的,因此count Count COUNT是三个不同的标识符。标识符不能和C语言的关键字相同,也不能和用户已编制的函数或C语言库函数同名。2.2.2 常量C语言中的常量是不接受程序修改的固定值,常量可为任意数据类型,如下例所示:数据类型 常量举例char "a"、"
"、"9"int 21、123 、2100 、-234long int 35000、 -34short int 10、-12、90unsigned int 10000、987、40000float 123.23、4.34e-3double 123.23、12312333、-0.9876234 C语言还支持另一种预定义数据类型的常量,这就是串。所有串常量括在双撇号之间,例如"This is a test"。切记,不要把字符和串相混淆,单个字符常量是由单撇号括起来的,如"a"。2.2.3 变量 其值可以改变的量称为变量。一个变量应该有一个名字(标识符),在内存中占据一定的存储单元,在该存储单元中存放变量的值。请注意区分变量名和变量值这两个不同的概念。所有的C变量必须在使用之前定义。定义变量的一般形式是:type variable_list;这里的type必须是有效的C数据类型,variable_list(变量表)可以由一个或多个由逗号分隔的多个标识符名构成。下面给出一些定义的范例。int i, j, l;short int si;unsigned int ui;double balance, profit,loss;注意C语言中变量名与其类型无关。2.3 整型数据2.3.1 整型常量整型常量及整常数。它可以是十进制、八进制、十六进制数字表示的整数值。十进制常数的形式是:digits这里digits可以是从0到9的一个或多个十进制数位,第一位不能是0。八进制常数的形式是: 0digits 在此,digits可以是一个或多个八进制数( 0~7之间),起始0是必须的引导符。十六进制常数是下述形式:0xhdigits0Xhdigits 这里hdigits可以是一个或多个十六进制数(从0~9的数字,并从“ a”~“ f”的字母)。 引导符0是必须有的,X即字母可用大写或小写。注意,空白字符不可出现在整数数字之间。表2 - 3列出了整常数的形式。表2-3 整常数的例子十进制 八进制 十六进制10 012 0Xa或0XA132 0204 0X8 432179 076663 0X7db3或0X7DB3 整常数在不加特别说明时总是正值。如果需要的是负值,则负号“ -”必须放置于常数表达式的前面。每个常数依其值要给出一种类型。当整常数应用于一表达式时,或出现有负号时,常数类型自动执行相应的转换,十进制常数可等价于带符号的整型或长整型,这取决于所需的常数的尺寸。 八进制和十六进制常数可对应整型、无符号整型、长整型或无符号长整型,具体类型也取决于常数的大小。如果常数可用整型表示,则使用整型。如果常数值大于一个整型所能表示的最大值,但又小于整型位数所能表示的最大数,则使用无符号整型。同理,如果一个常数比无符号整型所表示的值还大,则它为长整型。如果需要,当然也可用无符号长整型。 在一个常数后面加一个字母l或L,则认为是长整型。如10L、79L、012L、0115L、0XAL、0x4fL等。2.3.2 整型变量 前面已提到, C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。 这是和BASIC、FORTRAN不同的,而与Pascal相似。[例2 - 1 ]main( ){ int a,b,c,d; / *指定a , b , c , d 为整型变量* / unsigned u; / *指定u为无符号整型变量* / a=12; b=-24; u=10; c=a+u; d=b+u; printf("a+u=%d, b+u=%d
",c,d);}运行结果为:a+u=22, b+u=-14可以看到不同类型的整型数据可以进行算术运算。在本例中是i n t型数据与unsingned int型数据进行相加减运算。2.4 实型数据2.4.1 实型常量 实型常量又称浮点常量,是一个十进制表示的符号实数。符号实数的值包括整数部分、尾数部分和指数部分。实型常量的形式如下: [digits] [.digits] [ E|e[ + | - ] digits] 在此digits是一位或多位十进制数字(从0~9)。E(也可用e)是指数符号。小数点之前是整数部分,小数点之后是尾数部分,它们是可省略的。小数点在没有尾数时可省略。 指数部分用E或e开头,幂指数可以为负,当没有符号时视为正指数的基数为1 0,如1.575E10表示为:1.575×101 0。在实型常量中不得出现任何空白符号。 在不加说明的情况下,实型常量为正值。如果表示负值,需要在常量前使用负号。 下面是一些实型常量的示例: 15.75, 1.575E10, 1575e-2, -0.0025, -2.5e-3, 25E-4 所有的实型常量均视为双精度类型。 实型常量的整数部分为0时可以省略,如下形式是允许的: .57, .0075e2, -.125, -.175E-2 。 注意字母E或e之前必须有数字,且E或e后面指数必须为整数,如e 3、2 . 1 e 3 . 5、. e 3、e等都是不合法的指数形式。2.4.2 实型变量 实型变量分为单精度( f l o a t型)和双精度( d o u b l e型)。对每一个实型变量都应再使用前加以定义。如:float x,y; / *指定x , y为单精度实数* /double z; / *指定z为双精度实数* / 在一般系统中,一个float型数据在内存中占4个字节( 3 2位)一个double型数据占8个字节(6 4位)。单精度实数提供7位有效数字,双精度提供1 5 ~ 1 6位有效数字,数值的范围随机器系统而异。 值得注意的是,实型常量是double型,当把一个实型常量赋给一个float型变量时,系统会截取相应的有效位数。例如float a;a = 111111.111;由于float型变量只能接收7位有效数字,因此最后两位小数不起作用。如果将a改为double型,则能全部接收上述9位数字并存储在变量a中。2.5 字符型数据2.5.1 字符常量 字符常量是指用一对单引号括起来的一个字符。如‘ a",‘9",‘!"。字符常量中的单引号只起定界作用并不表示字符本身。单引号中的字符不能是单引号(")和反斜杠( ),它们特有的表示法在转义字符中介绍。 在C语言中,字符是按其所对应的A S C I I码值来存储的,一个字符占一个字节。例如: 字符 ASCII码值(十进制) ! 3 3 0 4 8 1 4 9 9 5 7 A 6 5 B 6 6 a 9 7 b 9 8注意字符"9"和数字9的区别,前者是字符常量,后者是整型常量,它们的含义和在计算机中的存储方式都截然不同。由于C语言中字符常量是按整数( s h o r t型)存储的,所以字符常量可以像整数一样在程序中参与相关的运算。例如:"a"-32 ; /* 执行结果97-32 = 65 * /"A" + 32; /* 执行结果65+32 = 97 * /"9"-9; /* 执行结果57-9 = 48 * /2.5.2 字符串常量 字符串常量是指用一对双引号括起来的一串字符。双引号只起定界作用,双引号括起的字符串中不能是双引号( ")和反斜杠(),它们特有的表示法在转义字符中介绍。例如:"China" ,"C program", "YES&NO", "33312-2341", "A" 等。 C语言中,字符串常量在内存中存储时,系统自动在字符串的末尾加一个“串结束标志”,即ASCII码值为0的字符NULL,常用表示。因此在程序中,长度为n个字符的字符串常量,在内存中占有n + 1个字节的存储空间。 例如,字符串China有5个字符,作为字符串常量" China "存储于内存中时,共占6个字节,系统自动在后面加上NU LL字符,其存储形式为: C h i n a NULL 要特别注意字符串与字符串常量的区别,除了表示形式不同外,其存储性质也不相同,字符"A"只占1个字节,而字符串常量"A"占2个字节。2.5.3 转义字符 转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号( "),用于表示字符串常量的双撇号( ")和反斜杠( )等。转义字符用反斜杠后面跟一个字符或一个八进制或十六进制数表示。表2 - 4给出了C语言中常用的转义字符。表2-4 转义字符转义字符 意义 ASCII码值(十进制) a 响铃(BEL) 007 退格(BS) 008 f 换页(FF) 012
换行(LF) 010
回车(CR) 013 水平制表(HT) 009 v 垂直制表(VT) 011 \ 反斜杠 092 ? 问号字符 063 " 单引号字符 039 " 双引号字符 034 空字符(NULL) 000 ddd 任意字符 三位八进制 xhh 任意字符 二位十六进制 字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都必须使用转义字符表示,即在这些字符前加上反斜杠。 在C程序中使用转义字符 d d d或者 x h h可以方便灵活地表示任意字符。 d d d为斜杠后面跟三位八进制数,该三位八进制数的值即为对应的八进制A S C I I码值。 x后面跟两位十六进制数,该两位十六进制数为对应字符的十六进制A S C I I码值。 使用转义字符时需要注意以下问题:1) 转义字符中只能使用小写字母,每个转义字符只能看作一个字符。2) v 垂直制表和f 换页符对屏幕没有任何影响,但会影响打印机执行响应操作。3) 在C程序中,使用不可打印字符时,通常用转义字符表示。2.5.4 符号常量 C语言允许将程序中的常量定义为一个标识符,称为符号常量。符号常量一般使用大写英文字母表示,以区别于一般用小写字母表示的变量。符号常量在使用前必须先定义,定义的形式是:#define <符号常量名> <常量>例如:#define PI 3.1415926#define TRUE 1#definr FALSE 0#define STAR "*" 这里定义PI、TRUE、FLASE、STAR为符号常量,其值分别为3.1415926,1,0,"*"。 #define是C语言的预处理命令,它表示经定义的符号常量在程序运行前将由其对应的常量替换。 定义符号常量的目的是为了提高程序的可读性,便于程序的调试和修改。因此在定义符号常量名时,应使其尽可能地表达它所代表的常量的含义,例如前面所定义的符号常量名PI(p),表示圆周率3.1415926。此外,若要对一个程序中多次使用的符号常量的值进行修改,只须对预处理命令中定义的常量值进行修改即可。2.5.5 字符变量字符变量用来存放字符常量,注意只能存放一个字符,不要以为在一个字符变量中可以放字符串。字符变量的定义形式如下:char c1, c2;它表示c 1和c 2为字符变量,各放一个字符。因此可以用下面语句对c 1、c 2赋值:c1 = "a"; c2 = "b";[例2 - 2 ]main( ){ char c1,c2; c1 = 97; c2 = 98 ; printf("%c %c",c1,c2);}c1、c2被指定为字符变量。但在第3行中,将整数9 7和9 8分别赋给c 1和c 2,它的作用相当于以下两个赋值语句:c1 = "a" ; c2 = "b" ;因为"a"和"b"的ASCII码为97和98。第4行将输出两个字符。"%c"是输出字符的格式。程序输出:a b[例2 - 3 ]main( ){ char c1,c2; c1 = "a";c2 = "b"; c1 = c1 - 32; c2 =c2 - 32; printf( "%c %c" , c1,c2);}运行结果为:A B它的作用是将两个小写字母转换为大写字母。因为"a"的ASCII码为97,而"A"为65,"b"为98,"B"为66。从ASCII代码表中可以看到每一个小写字母比大写字母的ASCII码大32。即"a"="A" + 32。
韦斯特兰2023-06-10 07:52:406