加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C语言中的常量

(2017-08-04 21:36:35)
分类: 教育教学
常量的含义

常量
在程序运行过程中,其值不能被改变的量称为常量。常量也分为整型、实型、字符型等。
以上是常量所具有的类型属性,这些类型决定了各种常量所占存储空间的大小和数的表示范围。在C程序中,常量是直接以自身的存在形式体现其值和类型。
例如:
123是一个整型常量,占两个存储字节,数的表示范围是-32768~32767;
123.0是实型常量,占四个存储字节,数的表示范围是-3.4 10-38~3.4 1038。

在程序执行过程中其值不发生变化
可以在程序中直接使用
编译系统自动根据常量的数据大小和直观形式确定它的数据类型
例:3 ,    3.0   ,     '3 '   ,    " 3 "       
 
常量的分类
1、直接常量
整型常量 实型常量 字符常量

2、标识符

3、符号常量


直接常量

整型常量(整数常量

整型常量

就是一个整常数。包括:正整数、负整数和0。
即整常数。C中有3种,整数常量可以是十进制、八进制或十六进制的常量。

10进制      一连串的数字表示,最高位为非0  
例如:100、-200、32767等。

8进制        以数字0开头。
例如:00000101(十进制为64)、015(十进制为13)、0101(十进制为65)、0177777(十进制为65535)等。八进制数通常为无符号数。

16进制      以数字0和字母X开头 (0x 或 0X)由0~9、a~f(A~F)中的一个或多个
例如0X2A(十进制为42)  0XA0(十进制为160)0XFFFF(十进制为65535)  0X100(十进制为256)、0x123(十进制为291),0xacd等。
不带前缀则默认表示十进制。

如: 056  表示八进制数56,等于十进制数46。
-017 表示八进制数-17,等于十进制数-15。
如:0x123 表示十六进制数123,等于十进制数291。
  0x3A 表示十六进制数3A,等于十进制数58。
  -0x2e 表示十六进制数-2f,等于十进制数-46。
0x123,代表16进制数123,等于十进制数 291。
 -0x12等于十进制数-10。 

长整型常量

整数常量也可以带一个后缀,后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

无符号整型常数的后缀为“U”或“u”U 表示无符号整数(unsigned)。

例如:100u、012U等。

长整型常数的后缀为L或l。L 表示长整数(long)。

例如:123L为十进制的长整型常量、0123L为八进制的长整型常量等。

C程序根据前缀区分三种进制的数据,书写时注意前缀的写法,以免发生错误。整数如不加特别说明被认为是正值,如果是负值,则符号必须写在常数前面。


列举实例一

123L      123是长整型数

123U     123是无符号数

123LU   123是长长整型无符号数 

32767  -32767  0   010  011   016  018  0x10  0xde  0xf     (018  0x10是错误的表示法)
010=(010)Q    

-123  123u  123L  -123ul
 -0123  0123u  0123L  -0123ul
 -ox123  0x123u  0x123L  -0x123ul


列举实例二

下面列举几个整数常量的实例:
212 215u 0xFeeL 078 032UU

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

85 0213 0x4b 30 30u 30l 30ul

对于长整型常数同样可以用十进制、八进制和十六进制三种形式表示。其表示形式是在常数之后加上字母"l"或"L"。

例如: 123L,-1234567L,0l,32769L,-017l,-0x123BL,0Xf3acL,-0x2eL都是长整型常数。

尽管40000不是一个合法的十进制整型常量,但40000L是一个合法的十进制长整型常量。长整型常数一般是用于函数调用中。

在C语言中,所有的数值型常量都带有符号,所以整型常量只区别整型和长整型两种形式,而没有无符号值型常量。整型和长整型常量均可用十进制、八进制和十六进制三种形式表示。


实型常量浮点常量

实型常量只有十进制形式。如果不加说明,实型常量为正值,否则常量前面使用负号。

日常生活中所使用的带小数的常数,又称为实数、浮点数。C语言中的实数有小数形式和指数形式:

浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。


小数形式:由数字0~9和小数点组成。分为整数和小数两部分,可以是纯小数,小数点不能省略。
例如:100.5,-1.0,.123,5.,0.0、3.14159等。

指数形式:由尾数(十进制小数)、符号E或e及指数(十进制整数)三部分组成。
例如:123.0E-1,1.23E3,4.89e-4 314159E-5L 510E 210f .e55。


字符常量

C语言允许在定义变量的同时使变量初始化。

如: int a=3; // 指定a为整型变量,初值为3          

     float f=3.56; // 指定f为浮点型变量,初值为3.56  

     char c= ‘a’; // 指定c为字符变量,初值为‘a’ 


计算机上可显示的全部符号,即ASCII码表上的全部字符。每个字符对应唯一的码值(次序值),例如:

‘0’表示数字字符0,其码值为48;
‘A’表示英文字符A,其码值为65等。

字符常量只能是单个字符。

字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。

字符常量有三种表示方法:

1、用一对单引号括起来的一个字符:
例如:‘A’、‘1’、‘b’、‘&’等。其中的单引号‘’是字符常量的边界,不表示字符本身。

2、用该字符的ASCII码值:
例如:用十进制数65(或八进制数0101或十六进制数0x41)表示大写字母'A'。

3、用转义字符:
C语言中采用转移字符表示ASCII码字符集中不可打印的控制字符和其它特定功能的字符。
如用于表示字符常量的单引号(')、用于表示字符串常量的双引号(")以及反斜杠(\)等都必须用转义字符表示。转义字符是一种以反斜线“\”开头,后跟一个或几个字符的字符。
在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。下表列出了一些这样的转义序列码:

转义序列 含义
\\ \ 字符
\' ' 字符
\" " 字符
\? ? 字符
\a 警报铃声
\b 退格键
\f 换页符
\n 换行符
\r 回车
\t 水平制表符
\v 垂直制表符
\ooo 一到三位的八进制数
\xhh . . . 一个或多个数字的十六进制数

下面的实例显示了一些转义序列字符:

实例

#include <</SPAN>stdio.h> int main() { printf("Hello\tWorld\n\n"); return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

Hello   World


字符串常量

由一对双引号(“”)括起来的由0个或多个字符组成的字符序列,任何字母、数字、符号和转义字符都可以组成字符串。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。
您可以使用空格做分隔符,把一个很长的字符串常量进行分行。
下面的实例显示了一些字符串常量。下面这三种形式所显示的字符串是相同的。
"hello, dear" "hello, \ dear" "hello, " "d" "ear"
例如:
“a”是由一个字符a构成的字符串;
“Happynew Year”是由多个字符序列构成的字符串等,
双引号“”是字符串的边界,不是字符串的一部分。

注意字符串常量与字符常量的区别:如'a'为字符常量,"a"则为字符串常量,

两者虽然都只有一个字符,但在内存中占用实际内存单元的数量不同。字符常量'a'在内存中占1个字节,字符串常量"a"在内存中占2个字节,除字符a外还有字符串结束符‘\0’,该字符也将占用一个字节空间,以表示字符串的结束。

2、标识符

定义常量

在 C 中,有两种简单的定义常量的方式:

  1. 使用 #define 预处理器。
  2. 使用 const 关键字。

#define 预处理器

下面是使用 #define 预处理器定义常量的形式:

#define identifier value

具体请看下面的实例:

实例

#include <</SPAN>stdio.h> 
#define LENGTH 10 
#define WIDTH 5 
#define NEWLINE '\n' 
int main() 
{ 
int area; 
area = LENGTH * WIDTH; 
printf("value of area : %d", area); 
printf("%c", NEWLINE); 
return 0; 
}
当上面的代码被编译和执行时,它会产生下列结果:
value of area : 50
说明:如再用赋值语句给LENGTH、WIDTH赋值是错的
  LENGTH、WIDTH/* 错误,不能给符号常量赋值
说明:程序中用#define命令行定义LENGTH、WIDTH代表常量10、5,此后凡在本文件中出现的LENGTH、WIDTH都代表10、5,可以和常量一样进行运算.


const 关键字

您可以使用 const 前缀声明指定类型的常量,如下所示:

const type variable = value;



3、符号常量

当某个常量引用起来比较复杂而又经常引用时,将该常量定义为符号常量,即用标识符表示这个常量,并在程序中需要使用该常量的地方直接引用标识符。符号常量在使用前必须先定义。

定义格式:#define 标识符 常量

#define是预处理命令(以"#"开头),功能是将标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代表一个常量值。

习惯上,符号常量名用大写英文标识符

具体请看下面的实例:

实例

#include <</SPAN>stdio.h> int main() const int LENGTH 10; const int WIDTH 5; const charNEWLINE = '\n'; int area; area LENGTH WIDTH; printf("value of area : %d", area); printf("%c",NEWLINE); return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

value of area 50

请注意,把常量定义为大写字母形式,是一个很好的编程实践。


 
 字符常量 与 字符串常量的比较

C语言中的常量

当用双引号描述一个或一串字符时,它会自动在串的结尾加上一个符号,表示串的结束,这样空间的长度就要比串多一个符号,因此
C语言中的常量

C语言中的常量

C语言中的常量

在数组中如果串没有结束符会产生什么影响?
如果abc  的数组我只给它3个字符空间,而不是4个,会有什么样的结果呢?请思考

C语言中的常量


符号常量用来优化代码的作用

那么,符号常量有没有数据类型?
符号常量只是文本替换,它代表的是整型数,它就是整型类,它代表的是浮点数,它就是浮点类。

程序中使用常量时,一般不需要具体指出常量属于的数据类型,C语言编译系统会自动根据常量的数据大小和直观形式确定它的数据类型。


当某个常量引用起来比较复杂而又经常引用时,将该常量定义为符号常量,即用标识符表示这个常量,并在程序中需要使用该常量的地方直接引用标识符。符号常量在使用前必须先定义。

定义格式:#define 标识符 常量

#define是预处理命令(以"#"开头),功能是将标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代表一个常量值。

习惯上,符号常量名用大写英文标识符。

——————————————————————————————————————




 实型常量
  实型常量亦被称为实型数或浮点数。在C语言中,实型常量一般都作为双精度来处理,并且只用十进制数表示。实型常量有两种书写格式:小数形式和指数形式。 
(1) 小数形式:它由符号、整数部分、小数点及小数部分组成。
例如以下都是合法的小数形式实型常量:
12.34,0.123,.123, 123.,-12.0,-0.0345,0.0,0.
注意其中任何位置上的小数点都是不可缺少的。例如123.不能写成123,因为123是整型常量,而123.是实型常量。
(2) 指数形式:
说明:
1)指数形式:由十进制小数形式加上指数部分组成,其形式如下:
十进制小数    e    指数 或:十进制小数       E      指数
2)格式中的e或E前面的数字表示尾数,e或E表示底数10,而e或E后面的指数必须是整数,表示10的幂次。例如25.34e3表示 25.34×103=25340。
以下都是合法的指数形式实型常量: 2.5e3,-12.5e-5,0.123E-5,-267.89E-6,0.61256e3
以下都是合法的指数形式实型常量:    e3、2.1e3.5、.e3、e、3.0e,E-9,10e3.5
注意指数必须是不超过数据表示范围的正负整数,并且在e或E前必须有数字。
3)对于上述两种书写形式,系统均默认为是双精度实型常量,可表示15~16位有效数字,数的表示范围可达到10-308 ~ 10308。如果要表示单精度实型常量和长双精度实型常量,只要在上述书写形式后分别加上后缀f(F)或l(L)即可。例如:
  2.3f,-0.123F,2e-3f,-1.5e4F 为合法的单精度实型常量,注意只有7位有效数字。
  1256.34L,-0.123L,2e3L,为合法的长双精度实型常量,有18~19位有效数字。
  对于超过有效数字位的数位,系统存储时自动舍去。

字符常量
字符常量
(1)用单引号包含的一个字符是字符型常量
(2)只能包含一个字符
‘a’,’A’, ‘1’ 'a'、'b'、'='、'+'、'?'    正确,都是合法字符型数据。
‘abc’、“a” 错误


2、转义字符
C语言运算符
\ddd        1~3位八进制数所代表的字符 
\xhh 1~2位十六进制数所代表的字符 
如\101表示字母"A" ,\102表示字母"B",\134表示反斜线,\XOA表示换行等。
如\x41表示字母"A" 
注意:不可写成‘\0xhh’或‘\0ddd’(整数)。 

转义字符的使用
#include
void main()    
{printf(″ ab c\t de\rf\tg\n″);      
printf(″h\ti\b\bj k\n″);}

显示屏上的运行结果:
   f       gde
     h      j k



符号常量   

常量本身是一个较长的字符序列,且在程序中重复出现,例如: 取常数 的值为3.1415927,如果 在程序中多处出现,直接使用3.1415927的表示形式,势必会使编程工作显得繁琐,这样,会降低程序的可修改性和灵活性。
因此,C语言中提供了一种符号常量,即用指定的标识符来表示某个常量,在程序中需要使用该常量时就可直接引用标识符。
C语言中用宏定义命令对符号常量进行定义,其定义形式如下:
#define  标识符        常量
#define  PRICE           30
#define PAI              3.1415927
#define W              "Windows 98"
宏定义的功能是:在编译预处理时,将程序中宏定义(关于编译预处理和宏定义的概念详见9.10节)命令之后出现的所有符号常量用宏定义命令中对应的常量一一替代。
习惯上人们把符号常量名用大写字母表示,而把变量名用小写字母表示。
例3-1:已知圆半径r,求圆周长c和圆面积s的值。
  #define PI 3.1416
  main()
  { float r,c,s;
  scanf("%d",&r);
  c=2*PI*r;
  s=PI*r*r;
  printf("c=%6.2f,s=%6.2f\n",c,s);
  }

常量的值在其作用域内不会发生改变,也不能再被赋值。其在出现时就被当作一个立即数来使用。也就是说,只能被访问,被读,而不能被写,被赋值。

字符串常量 
(1)定义
是一对双引号(“”)括起来的字符序列。 
例如:
“How dow you do?”,
“CHINA”,
“a”,
“$123.45”. 

区分字符常量与字符串常量
如“a”和‘a’。 
C语言规定:在每个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以‘\0’(ASCII码为0的字符)作为字符串结束标志。

不能将字符串赋给字符变量。 
C语言没有专门的字符串变量,如果想将一个字符串存放在变量中,可以使用字符数组。即用一个字符数组来存放一个字符串,数组中每一个元素存放一个字符。 

C规定:在每一个字符串常量的结尾加一个 “字符串结束标志”,以便系统据此判断字符串是否结束。
C规定以字符’\0’作为字符串结束标志。
如:如果有一个字符串常量”CHINA” ,实际上在内存中是:
它占内存单元不是5个字符,而是6个字符,最后一个字符为’\0’。但在输出时不输出’\0’。
C语言中的常量











0

阅读 收藏 喜欢 打印举报/Report
前一篇:C语言的变量
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有