您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 10 C语言中常量的表示
第9单元C语言中常量的表示数据可以用变量存放,也可以用常量形式表示。常量是程序不可修改的固定值,可以分字面常量和符号常量。字面常数就是直接书写出来的常数,通常不被单独存储,而是与代码一起存储。符号常量是将一个常量用一个符号表示。9.1字面常量字面常量也称直接变量,是可以从字面上直接识别的不变量。不同类型的字面常量的表示形式是不同的。wenmingyao2008@yahoo.com.cn9.1.1整型字面常量的表示和辨识1.书写字面整数常量使用的三种进制在C语言中,整型常量可以使用十进制数、八进制数、十六进制数等格式书写。进制记数符号前缀十进制0,1,2,3,4,5,6,7,8,9无八进制0,1,2,3,4,5,6,70十六进制0,1,2,3,4,5,6,7,8,9,a/A,b/B,c/C,d/D,e/E,f/F0xwenmingyao2008@yahoo.com.cn合法不合法017777709876-01000720fa0XFFFF0x10fg-0xA3八进制和十六进制整常数举例wenmingyao2008@yahoo.com.cn2.整数字面常量类型的确定遇到一个整型字面常量,如何区分为short、int、long、longlong、unsigned呢?(1)默认原则。(2)后缀字母标识法。wenmingyao2008@yahoo.com.cn(1)默认原则。按照常数所在的范围,决定其类型。例如,在16位的机器中:当一个常整数的值在十进制-32768~32767(八进制数0~0177777、十六制数0x0~0xFFFF)范围内都被看作是int型。如234、32766、0177776、0xFFFE等。超出上述范围的整常数,被看作长整数longint型(32位)。如,-32769、32768、0200000、0x10000等。wenmingyao2008@yahoo.com.cn(2)后缀字母标识法。例如用L或l表示long类型整数,如-12L(十进制longint)、076L(八进制longint)、0x12l(十六进制longint)。用LL或ll表示longlongint类型整数,如-12LL(十进制longlongint)。用U或u表示unsigned类型,如12345u——(十进制unsignedint)、12345UL——(十进制unsignedlong)。wenmingyao2008@yahoo.com.cn9.1.2浮点类型字面常量的表示和辨识1.浮点类型字面常量的书写格式(1)小数分量(定点)形式。即一个浮点类型数由小数点和数字组成。例如3.14159、0.12345、3.、.123等。(2)科学记数法(浮点,即指数)形式。把一个浮点类型数的尾数和指数并列写在一排,中间用一个字母E或e分隔,前面部分为尾数,后面的整数为指数。例如19.345用科学记数法可表示为0.19345e+2,0.19345E+2,19345e-3。P.S.C99增加了用十六进制(以0x或0X打头)书写浮点常数的规范。注意:尾数部分可有小数点,但指数部分一定是一个有符号整数。尾数部分必须存在。正号可以省略。1.23e5、3E-3√E-3、1e0.3×wenmingyao2008@yahoo.com.cn2.浮点类型字面常量的辩识后缀C语言将浮点类型数据分为float、double和longdouble三种类型,并且默认的浮点类型数据是double类型的。否则可以使用后缀字母:用f或F表示float类型,如123.45f1.2345e+2F。用l或L表示longdouble类型,如1234.5l1.2345E+3Lwenmingyao2008@yahoo.com.cn9.1.3字符类型常量的表示字符与字符串可打印字符转义字符字符串常数wenmingyao2008@yahoo.com.cn1.可打印字符可打印字符常量是用一对单撇号括起来的一个字符,如‘a’,‘A’,‘?’,‘#’注意:单撇号只是字符与其他部分的分隔符,或者说是字符常量的定界符,不是字符常量的一部分。不能用双引号代替撇号,如a不是字符常量。撇号中的字符不能是单撇号或反斜杠,如'''或'\'不合法。字符类型的数据(如字符'a','A','?','3')在内存中以相应的ASCII代码存放。例如,'a'的ASCII码为97,则在内存中的二进制存储形式为01100001。空字符的表示为两个但撇号之间留一空格,不能写明两个靠在一起的单撇号。wenmingyao2008@yahoo.com.cn在C语言中,字符数据可以等价为与其相应的ASCII码的整数(如‘a’与整数97等价)。字符数据可以用数值形式输出。反之一个与字符相对应的整数也可以用字符形式输出。字符数据还可以作为整数参加运算,例如'A'+32,相当于65+32,得到97。代码9-1#includestdio.hintmain(void){charch;/*定义一个字符类型的变量ch*/ch='a';printf(%d,ch);return0;}运行结果为97wenmingyao2008@yahoo.com.cn代码9.2#includestdio.hintmain(void){charch;inti;ch=‘A’;ch=ch+32;i=ch;printf(“%dis%c\n”,i,ch);/*注意格式码*/printf(“%cis%d\n”,ch,ch);/*注意格式码*/return0;}运行结果如下:97isaais97wenmingyao2008@yahoo.com.cn说明:字符数据占一个字节(8位),分为signed和unsignedANSI标准ASCII字符的允许范围为0~127,最左一位补0。例如,字符‘A’的ASCII码为65,二进制存储形式为01000001。但是有些计算机系统(例如IBM),还扩充使用128~255的字符。它们多是图形字符。例如字符“≥”,ASCII码为242,即二进制数11110010(八进制数362),其第一位为1。标准C无统一规定,有的系统把char型变量隐含指定为unsigned型,即其最左端一位不作为符号位,如果按十进制数形式输出,得到的是十进制数242。有的系统(如TurboC,PDP,VAX-11等)把char型变量隐含指定为signed型,即将其最左端一位作为符号位。如果按字符形式输出,则得到的字符“≥”,如果按十进制数形式输出得到的是-14。怎样处理这个最左端的位?wenmingyao2008@yahoo.com.cn不论按哪种原则处理,用户都可以自己定义所需的类型:signedcharc1;/*定义c1为有符号字符变量*/unsignedcharc2;/*定义c2为无符号字符变量*/代码9-3#includestdio.hintmain(void){charc;c=0362;printf(“%d\n”,c);return0;}运行结果:-14wenmingyao2008@yahoo.com.cn2.转义字符转义字符(即反斜杠码)是C语言提供的处理一些特殊字符(包括一些不可打印字符)方法。重要的有如下一些:·用反斜杠开头后面跟一个字母代表一个控制字符(不可打印字符);·用\\代表字符“\”,用\'代表撇号字符;·用\后跟1到3个八进制数代表ASCII码为该八进制数的字符;·用\x后跟1到2个十六进制数代表ASCII码为该十六进制数的字符。wenmingyao2008@yahoo.com.cn转义字符意义转义字符意义\n换行\\反斜杠\t水平制表\?问号\v垂直制表\“双撇号\b退格\’单撇号\r换行\ddd用1~3位八进制常数表示字符\f走纸换页\xhh用1~2位十六进制常数表示字符\a报警(如铃声)wenmingyao2008@yahoo.com.cn说明:这一输出只能在打印机上实现,而不能在显示器上实现。因为显示器在显示后一字符时原来在该位置上的字符消失。代码9.4/*打印人民币符号”¥”*/#includestdio.hintmain(void){printf(“Y\b=\n”);return0;}wenmingyao2008@yahoo.com.cn转义字符除用来形成一个外设控制命令外,还用来输出不能直接从键盘上输入或不能用字符常量书写出的ASCII字符。这时要在反斜杠\后跟一个代码值,这个代码值最多用3位八进制码数(不加前缀)或两位十六进制数(以x作前缀)表示。代码9.5#includestdio.hintmain(void){charch;ch=’\362’;/*将八进制数362的ASCII字符赋给ch*/printf(“%c”,ch);return0;}运行可输出:≥wenmingyao2008@yahoo.com.cn3.字符串常数字符串以双撇号为定界符,但双撇号并不属于字符串。字符串中的字符数称为该字符串的长度。字符串常数在机器内存储时,多占用一个字节来存储“\0”,对应的ASCII码为0,其含义为“空操作”。要特别注意空字符常数与空字符串常数的区别。空字符常数在单撇号中要有一个空格,而空字符串有双撇号中没有空格。9.2宏wenmingyao2008@yahoo.com.cn9.2.1宏定义代码9.6求圆的周长和面积的一个程序。#includestdio.h#definePI3.1415926/*宏定义*/#defineR1.0/*宏定义*/#defineCIRCUM2.0*PI*R/*宏定义,使用了前面定义的R和PI*/#defineAREAPI*R*R/*宏定义,使用了前面定义的R和PI*/intmain(void){printf(“Thecircumis%fandareais%f\n”,CIRCUM,AREA);return0;}wenmingyao2008@yahoo.com.cn9.2.2使用宏应当注意的几点1.关于宏名(1)宏名字不能用引号括起来。如#define“YES”…printf(““YES””);(2)宏名中不能含有空格。例如想用ANAME定义SMISS,写成:#defineANAMESMISS则实际进行的宏定义是A为宏名字,宏体是NAMESMISS。(3)C程序员一般都习惯用大写字母定义宏名字。wenmingyao2008@yahoo.com.cn(4)不能进行宏名的重定义。(5)不能把宏名当变量名使用,如不能对宏名赋值等。(6)宏名的作用域是从其定义开始到本源程序文件结束的代码区间。可以使用预处理命令#undef提前结束其作用域。例如#definePI3.1415926/*定义宏名PI*/┇#undefPI/*宏名PI作用域结束*/┇wenmingyao2008@yahoo.com.cn2.关于宏定义(1)宏定义的基本格式如下。(2)宏定义不是声明,也不是语句,而是一条编译预处理命令,末尾不能加分号。(3)宏定义可以写在源程序中的任何地方,但必须写在函数之外,通常写在一个文件之首。对多个文件可以共用的宏定义,可以集中起来构成一个单独的头文件。#define宏名宏体字符串wenmingyao2008@yahoo.com.cn(4)在#define命令中,宏名字与字符串(宏体)之间用一个或多个空格分隔。这个空格就是宏名与宏体之间的分隔符号。(5)一行中写不下的宏定义,应在前一行结尾使用一个续行符“\”,并且在下一行开始不使用空格。例如#defineAIPHABETABCDEFGHHIJKLMN\OPQRSTUVWXY(6)宏定义可以嵌套。wenmingyao2008@yahoo.com.cn3.关于宏替换(1)不可以替换作为用户标识符中的成分。例如,在代码9-6中,不可以用“R”替换CIRCUM中的R。(2)不能替换字符串常量中的成分,即当宏名出现在字符串中时,编译器对其不做代换处理。代码9.7使用宏定义的圆周长和面积计算#i
本文标题:10 C语言中常量的表示
链接地址:https://www.777doc.com/doc-3448569 .html