当前位置:首页 > C数据类型
第1章 C语言概述与数据类型 9
1.2.4 数据表示——常量
数据有两种基本表示形式,在程序中以常量和变量出现。常量是在程序运行过程中不可改变的量,其类型根据其书写形式和范围决定。
1.整型常量
整型常量由数字和常量后缀(L或l表示长整型数、U或u表示无符号数)构成,C语言的整型常量有八进制、十六进制和十进制三种:
十进制整数(基本数字0~9):110 456 139L 32769U 233445(为长整 型)等。
八进制整数(以0打头,基本数字0~7):037 010L –026 0776等。 十六进制整数(以0X打头,基本数字0~9,而10至15记为A至F):0X331 0X0 0X3AC0 –0XAF等。
2.实型常量(常量后缀F或f表示浮点数)
实型常量也称为实数或浮点数。在C语言中规定,实数只采用十进制,实型常数不分单、双精度,都按双精度double型处理。
实型常量由数字、小数点和常量后缀(F或f表示浮点数)构成。它有两种表示形式:十进制小数形式和指数形式。
(1)十进制小数形式:由数码0~9和小数点组成(后缀为f或F表示该数为浮点数),如0.0、25.0、5.789、0.13、–456.789、234F、67f等均为合法的实数。特别地,123.0可以表示为123.、0.123可以表示为.123。
n
(2)指数形式:由尾数(a)和阶码(E n或en)组成。数学表达式a×10的C语言表达式为a E n(a为十进制数,n为十进制整数)。
其中,尾数a为十进制数;e或E为指数标志;n为阶数,只能为整数,可以带符号。
5–257
例如:2.1E5 (等于2.1*10)、3.7E–2(等于3.7*10)、1E5(等于10)、0.5E7 (等于0.5*10)、–2.8E–2 (等于–2.8*10–2)。
以下不是合法的实数:
345(无小数点或浮点数后缀)。 E7(无尾数)。
53.–E3(负号位置不对)。 7E(无阶码)。
注意:
(1)数学意义上的常量在程序设计语言中不一定是常量,如1/2、π、e(自然数)等。特别是23%,在程序设计语言中既不是常量,也不是后面将介绍的表达式。
(2)实型常量为双精度型,有效位为15~16位,超出部分进行四舍五入。
3.字符常数 1)一般字符常数
字符常数就是单个字符,字符可以是键盘上的任意一个可显示的字符,程序中字符常量写在一对单引号内(单引号称为定界符)。
10 高级语言程序设计(C语言描述)(第2版)
例如,'*'、'A'、'7'、'&'等。
2)特殊字符
特殊字符包括不可显示字符和在C语言中具有特殊意义的字符(如'为字符常量的定界符)。为了表示这些特殊字符,C语言提供了转义字符来表示他们。
转义字符包括反斜线、被转义的字符和一对单引号。例如,'\\n'将n转义为不可显示的回车换行字符。'\\''将定界符'转义为普通的单引号字符。
它们被当作一个单字符,也是字符常数。常用转义字符如表1-3所示。
表1-3 转义字符表
符号序列 \\n \\t \\b \\r \\f 名 称 回车换行 水平制表 退格 回车不换行 换页 符号序列 \\' \\'' \\\\ \\ddd \\xdd 单引号 双引号 反斜线 八进制ASCII码值(0~377) 十六进制ASCII码值(0~F9) 名 称 3)以ASCII码值显示字符
除了表中提供的特殊字符,其他不可显示字符可以用相应的八进制或十六进制ASCII码值表示,表示方式如表1-3中的后两项,同样需要单引号作为定界符。
例如,'\\t'也可以表示为'\\11'(Tab键的八进制ASCII为11)。 每个转义字符均被看做一个单字符常量,当然一般字符常数也可以这样表示,只是可读性差。
4)字符的存储 程序中字符常量写在一对单引号内(单引号称为定界符),定界符不存储,只存储字符对应的ASCII码值(参见附录D)。每个字符占1字节,字符0的ASCII码是48,存储它占一个字节。数值类型也是按类型分配存储空间的,整型的0、48、197和1297等都是占2字节。
5)字符的操作
字符类型与数值类型的操作方式是有区别的。大多数程序设计语言规定,字符类型的数据只是一个符号,不能参与算术运算。但在C语言中允许字符以ASCII码值参与算术运算,其结果以字符格式或数值格式输出。例如,'A'的ASCII码为65。
“printf (\);”的输出结果为68(\表示按十进制整型操作)。 printf (\;的输出结果为D(\表示按字符型操作)。 又如“printf (\,'0'+3);”的输出结果为51,“printf (\,'0'+3);”的输出结果 为3。
4.字符串常数
字符串常量是一个字符序列,且被括在双引号中(双引号称为定界符)。字符串的语法形式是characters。characters可以是零个或多个字符集中的字符,包括任意转义字符。
其中若出现双引号、反斜线或回车换行符必须用其转义字符(\\\)表示。 例如,\,\,\等都是合法的字符串常量。 特别地,定界符中没有字符时,\称为空串。
第1章 C语言概述与数据类型 11
字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符的个数加1。增加的一个字节中存放字符\(ASCII码为0),这是字符串结束的标志。
例如,字符常量'a'和字符串常量\虽然都只有一个字符,但在内存中的情况是不同的。
'a'在内存中占一个字节,存储为:
\在内存中占二个字节,存储为:
a
\在内存中占四个字节,存储为:
\ a \\\0
和字符一样,字符串定界符也不存储。
a \\0 1.2.5 数据表示——变量
1.变量和变量名
表面上理解“变量”就是可以改变的量。就其实质,变量就是数据的存储空间。之所以变量能改变,是因为变量存储空间中的数据是可以更改的。
变量的存储空间是开辟在内存中的,无须清楚它具体的物理地址,只要知道变量的逻辑名称——变量名就可以使用它了。变量名是对数据存储空间的一个抽象名称,一方面代表存储空间(其地址表示方式:&变量名,&为C语言的地址符);另一方面又代表其中存储的数据(表示方式:变量名本身),因此通过变量名就可以对它空间中的内容进行改变或引用。
C语言的变量名命名规则是,“以字母或下划线开头的,字母、数字或下划线的序列”。变量名可以是任意长度,但编译器只识别31个或更少(因编译系统不同而不同)。C语言的关键词是不可以作为变量名,参见附录A中有关标识符的内容。
注意:在对变量名命名时应注意:
(1)所有语言都允许26个英文大小字母出现在变量名中,特别要注意C语言认为A与a是不同的变量,即C语言的变量名是区分大小写的。
(2)变量名最好与其所存储的数据意义有关,这样可增加程序的可读性。例如,“累加和”用sum或s做变量名,“姓名”用name或xm做变量名,圆周率(3.1415926)用pi做变量名等。
(3)变量名最好不要用到字母l(小写L)、o、z或I(大写i)等易与数字混淆的字母。2.变量定义
变量需先定义后使用。所谓变量定义就是说明变量类型,其功能是为说明的每一个变量按类型开辟存储空间(编译系统在对程序进行“编译时”,根据变量定义的类型为其分配逻辑空间,运行时分配物理的内存空间)。从而决定其存储数据的范围精度和参与运算的种类等。
12 高级语言程序设计(C语言描述)(第2版)
变量定义的格式如下:
其中,变量类型描述是指C语言允许使用的有效类型(见表1-1和表1-2),变量表是由一个或多个被定义的变量名组成,若定义多个变量,则变量之间用逗号‘,’分隔,如“int i,j,k;”。
注意:
(1)变量类型的选择是根据其所存储数据的逻辑意义决定的。例如,工资一般是实型数据又不会太大,相关变量应该定义为float型;年龄,身高等数据一般为整型且不会很大,相关变量应该定义为int型。当有些整型数据或其运行结果较大时,可以考虑定义为长整
23n
型。当整型意义的数据或运算结果很大时,如n!、1+2+2+2+?+2等,在不考虑精度的
类型描述符 变量表;
情况下,应考虑用实型变量存储数据或运算结果。
(2)还可以加注释语句,说明变量的意义,这样对程序以后的维护也很有好处。
例如:
3.变量赋值
float a,b,c; /*三角形的三条边*/
向变量空间中存储数据的方法很多,为了更好理解变量的意义,先认识其中的一种方法:
称为赋值语句,操作过程为先计算表达式的值,然后将计算结果存储在变量中。
例如:
short a; a=8; a=9; a=a+9;
/*定义 */
/*赋值 */ /*赋值 */
/*计算后赋值 */
变量=算术表达式;(=称为赋值号,不是等号)
执行这些语句的功能是,先为变量a开辟2字节的整型数据存储空间,然后存入8,变量值为8;再将9存入变量a,以前存入的8被覆盖,变量值为9。第三个赋值语句,右面是一个表达式,要先计算其值:取变量a的值为9,9+8等于17,将17存入变量a,变量的值就变成17了。
4.变量赋初值
在定义变量的同时,还可以对其中全部或部分的变量赋初始值,例如:
注意:变量除了需要先定义后使用外,还必须先赋值后引用。 看程序段:
经过定义后的变量i,可以存储数据了,但在计算i+1时,其他程序设计l语言认为这是语法错误,在编译时会指出“变量没有赋初始值”的错误,只有改正后程序才能通过编
int i; i=i+1;
int i,j,k=1,s=0,n=k+6,m;
共分享92篇相关文档