当前位置:松语文学 > 其他类型 >C语言设计最新章节 > C语言设计TXT下载
错误举报

第 5 章

  个标识符来表示一个常量,

  称之为符号常量。

  符号常量在使用之前必须先定义,其一般形式为:

  #define 标识符 常量

  其中#define 也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令(在

  后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定

  义,以后在程序中所有出现该标识符的地方均代之以该常量值。

  ? 习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。

  【例 3.1】符号常量的使用。

  #define PRICE 30

  main()

  {

  int num,total;

  num=10;

  }

  total=num* PRICE;

  printf(“total=%d”,total);

  谭浩强   C 语言程序设计        2001 年 5 月 1 日

  ? 用标识符代表一个常量,称为符号常量。

  ? 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。

  ? 使用符号常量的好处是:

  ? 含义清楚;

  ? 能做到“一改全改”。

  3.2.2 变量

  其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。

  变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两

  个不同的概念。

  a                变量名

  变量值

  3.3 整型数据

  3

  存 储 单 元

  3.3.1 整型常量的表示方法

  整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和十进制三

  种。

  1) 十进制整常数:十进制整常数没有前缀。其数码为 0~9。

  以下各数是合法的十进制整常数:

  237、-568、65535、1627;

  以下各数不是合法的十进制整常数:

  023 (不能有前导 0)、23D (含有非十进制数码)。

  在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成

  结果不正确。

  2)

  八进制整常数:八进制整常数必须以 0 开头,即以 0 作为八进制数的前缀。数码取

  值为 0~7。八进制数通常是无符号数。

  以下各数是合法的八进制数:

  015(十进制为 13)、0101(十进制为 65)、0177777(十进制为 65535);

  以下各数不是合法的八进制数:

  谭浩强   C 语言程序设计        2001 年 5 月 1 日

  256(无前缀 0)、03A2(包含了非八进制数码)、-0127(出现了负号)。

  3) 十六进制整常数:十六进制整常数的前缀为 0X 或 0x。其数码取值为 0~9,A~F 或

  a~f。

  以下各数是合法的十六进制整常数:

  0X2A(十进制为 42)、0XA0 (十进制为 160)、0XFFFF (十进制为 65535);

  以下各数不是合法的十六进制整常数:

  5A (无前缀 0X)、0X3H (含有非十六进制数码)。

  4)

  整型常数的后缀:在 16 位字长的机器上,基本整型的长度也为 16 位,因此表示的

  数的范围也是有限定的。十进制无符号整常数的范围为 0~65535,有符号数为

  -32768~+32767。八进制无符号数的表示范围为 0~0177777。十六进制无符号数

  的表示范围为 0X0~0XFFFF 或 0x0~0xFFFF。如果使用的数超过了上述范围,就

  必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。

  例如:

  十进制长整常数:

  158L (十进制为 158)、358000L (十进制为 358000);

  八进制长整常数:

  012L (十进制为 10)、077L (十进制为 63)、0200000L (十进制为 65536);

  十六进制长整常数:

  0X15L (十进制为 21)、0XA5L (十进制为 165)、0X10000L (十进制为 65536)。

  长整数 158L 和基本整常数 158 在数值上并无区别。但对 158L,因为是长整型量,

  C编译系统将为它分配 4 个字节存储空间。而对 158,因为是基本整型,只分配 2 个字

  节的存储空间。因此在运算和输出格式上要予以注意,避免出错。

  无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。

  例如:

  358u,0x38Au,235Lu 均为无符号数。

  前缀,后缀可同时使用以表示各种类型的数。如 0XA5Lu 表示十六进制无符号长

  整数 A5,其十进制为 165。

  3.3.2 整型变量

  1. 整型数据在内存中的存放形式

  如果定义了一个整型变量 i:

  int i;

  i=10;

  i

  10

  0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0

  数值是以补码表示的:

  ? 正数的补码和原码相同;

  ? 负数的补码:将该数的绝对值的二进制形式按位取反再加 1。

  例如:

  求-10 的补码:

  10 的原码:

  谭浩强   C 语言程序设计        2001 年 5 月 1 日

  取反:

  0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0

  1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1

  再加 1,得-10 的补码:

  1 1 1 1 1

  1 1 1 1 1 1 1 0 1 1 0

  由此可知,左面的第一位是表示符号的。

  2. 整型变量的分类

  1) 基本型:类型说明符为 int,在内存中占 2 个字节。

  2) 短整量:类型说明符为 short int 或 short。所占字节和取值范围均与基本型相同。

  3) 长整型:类型说明符为 long int 或 long,在内存中占 4 个字节。

  4) 无符号型:类型说明符为 unsigned。

  无符号型又可与上述三种类型匹配而构成:

  ? 无符号基本型:类型说明符为 unsigned int 或 unsigned。

  ? 无符号短整型:类型说明符为 unsigned short。

  ? 无符号长整型:类型说明符为 unsigned long。

  各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符

  号位,故不能表示负数。

  有符号整型变量:最大表示 32767

  0 1 1 1 1 1

  无符号整型变量:最大表示 5

  1 1 1 1 1 1 1 1 1 1

  int

  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  下表列出了 Turbo C 中各类整型量所分配的内存字节数及数的表示范围。

  类型说明符 数的范围

  -32768~32767 即-215~(215-1)

  字节数

  2

  unsigned int

  short int

  unsigned short int

  long int

  unsigned long

  以 13 为例:

  int 型:

  0~65535       即 0~(216-1)

  -32768~32767      即-215~(215-1)

  0~65535       即 0~(216-1)

  -2147483648~2147483647 即-231~(231-1)

  0~4294967295     即 0~(232-1)

  2

  2

  2

  4

  4

  00 00 00 00 00 00 11 01

  short int 型:

  00 00 00 00 00 00 11 01

  long int 型:

  00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01

  unsigned int 型:

  00 00 00 00 00 00 11 01

  ned shor intt 型:

  unsig

  00 00 00 00 00 00 11 01

  unsigned long int 型:

  谭浩强   C 语言程序设计        2001 年 5 月 1 日

  00 00 00 00 00

  3. 整型变量的定义

  00 00 00 00 00 00 00 00 00 11 01

  变量定义的一般形式为:

  类型说明符 变量名标识符,变量名标识符,...;

  例如:

  int a,b,c; (a,b,c 为整型变量)

  long x,y; (x,y 为长整型变量)

  unsigned p,q; (p,q 为无符号整型变量)

  在书写变量定义时,应注意以下几点:

  ? 允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔。

  类型说明符与变量名之间至少用一个空格间隔。

  ?

  最后一个变量名之后必须以“;”号结尾。

  ? 变量定义必须放在变量使用之前。一般放在函数体的开头部分。

  【例 3.2】整型变量的定义与使用。

  main()

  {

  int a,b,c,d;

  unsigned u;

  a=12;b=-24;u=10;

  c=a+u;d=b+u;

  printf(“a+u=%d,b+u=%d\n”,c,d);

  }

  4. 整型数据的溢出

  【例 3.3】整型数据的溢出。

  main()

  {

  int a,b;

  a=32767;

  b=a+1;

  printf("%d,%d\n",a,b);

  }

  32767:

  0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  -32768

  1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

  【例 3.4】

  main(){

  long x,y;

  int a,b,c,d;

  x=5;

  y=6;

  a=7;

  b=8;

  c=x+a;

  d=y+b;

  printf("c=x+a=%d,d=y+b=%d\n",c,d);

  }

  谭浩强   C 语言程序设计        2001 年 5 月 1 日

  从程序中可以看到:x, y 是长整型变量,a, b 是基本整型变量。它们之间允许进行运算,

  运算结果为长整型。但 c,d 被定义为基本整型,因此最后结果为基本整型。本例说明,不

  同类型的量可以参与运算并相互赋值。其中的类型转换是由编译系统自动完成的。有关类型

  转换的规则将在以后介绍。

  3.4 实型数据

  3.4.1 实型常量的表示方法

  实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进

  制。它有二种形式:十进制小数形式,指数形式。

  1) 十进制数形式:由数码 0~ 9 和小数点组成。

  例如:

  0.0、25.0、5.789、0.13、5.0、300.、-267.8230

  等均为合法的实数。注意,必须有小数点。

  2)

  指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符

  号)组成。

  其一般形式为:

  a E n(a 为十进制数,n 为十进制整数)

  其值为 a*10n。

  如:

  2.1E5 (等于 2.1*105)

  3.7E-2 (等于 3.7*10-2)

  0.5E7 (等于 0.5*107)

  -2.8E-2 (等于-2.8*10-2)

  以下不是合法的实数:

  345 (无小数点)

  E7 (阶码标志 E 之前无数字)

  -5 (无阶码标志)

  53.-E3 (负号位置不对)

  2.7E (无阶码)

  谭浩强   C 语言程序设计        2001 年 5 月 1 日

  标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如 356f 和 356.

  是等价的。

  【例 3.5】说明了这种情况。

  main(){

  printf("%f\n ",356.);

  printf("%f\n ",356);

  printf("%f\n ",356f);

  }

  3.4.2 实型变量

  1. 实型数据在内存中的存放形式

  实型数据一般占 4 个字节(32 位)内存空间。按指数形式存储。实数 3.14159 在内存中

  的存放形式如下:

  +

  数符

  .314159

  小数部分

  1

  指数

  ?

  小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。

  ? 指数部分占的位数愈多,则能表示的数值范围愈大。

  2. 实型变量的分类

  实型变量分为:单精度(float 型)、双精度(double 型)和长双精度(long double 型)

  三类。

  在 Turbo C 中单精度型占 4 个字节(32 位)内存空间,其数值范围为 3.4E-38~3.4E+38,

  只能提供七位有效数字。双精度型占 8 个字节(64 位)内存空间,其数值范围为 1.7E-308~

  1.7E+308,可提供 16 位有效数字。

  类型说明符 比特数(字节数) 有效数字

  数的范围

  float

  double

  long double

  32(4)

  64(8)

  128(16)

  6~7

  15~16

  18~19

  10-37~1038

  10-307~10308

  10-4931~104932

  实型变量定义的格式和书写规则与整型相同。

  例如:

  float x,y; (x,y 为单精度实型量)

  double a,b,c; (a,b,c 为双精度实型量)

  3. 实型数据的舍入误差

  由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。如下例。

  【例 3.6】实型数据的舍入误差。

  main()

  {float a,b;

  a=123456.789e5;

  b=a+20

  printf("%f\n",a);

  }

  printf("%f\n",b);

  注意:1.0/3*3 的结果并不等于 1。

  谭浩强   C 语言程序设计        2001 年 5 月 1 日

  【例 3.7】

  main()

  {

  float a;

  double b;

  a=33333.33333;

  b=33333.33333333333333;

  printf("%f\n%f\n",a,b);

  }

  ? 从本例可以看出,由于 a 是单精度浮点型,有效位数只有七位。而整数已占五位,

  故小数二位后之后均为无效数字。

  ?

  b 是双精度型,有效位为十六位。但 Turbo C 规定小数后最多保留六位,其余部

  分四舍五入。

  3.4.3 实型常数的类型

  实型常数不分单、双精度,都按双精度 double 型处理。

  3.5 字符型数据

  字符型数据包括字符常量和字符变量。

  3.5.1 字符常量

  字符常量是用单引号括起来的一个字符。

  例如:

  'a'、'b'、'='、'+'、'?'

  都是合法字符常量。

  在C语言中,字符常量有以下特点:

  1) 字符常量只能用单引号括起来,不能用双引号或其它括号。

  2) 字符常量只能是单个字符,不能是字符串。

  3) 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。

  如'5'和 5 是不同的。'5'是字符常量,不能参与运算。

  3.5.2 转义字符

  谭浩强   C 语言程序设计        2001 年 5 月 1 日

  转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。

  转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例

  题 printf 函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符

  主要用来表示那些用一般字符不便于表示的控制代码。

  常用的转义字符及其含义

  转义字符

  \n

  \t

  \b

  \r

  \f

  \\

  \'

  \”

  \a

  \ddd

  \xhh

  转义字符的

  松语文学免费小说阅读_www.16sy.com