C语言数据类型与常量

课程介绍

欢迎学习C语言数据类型课程!本章将介绍C语言中的基本数据类型、各种常量形式及其使用方法。

通过本课程的学习,您将掌握:

  • C语言的基本数据类型及其特点
  • 整型常量的不同表示方法
  • 浮点型常量的表示和科学计数法
  • 字符型常量和转义字符的使用

课程中包含知识点讲解、示例代码和练习题,帮助您巩固所学内容。

介绍
基本数据类型
整型常量
浮点型常量
字符型常量
总结

C语言的基本数据类型

在现实生活中会遇到不同类型的数据,比如数据有整数和实数之分、单个字符和字符串之分。在C语言中,常用的数据类型有整型、浮点型、字符型和字符串型等几种。

例如:

  • 789是整型常量
  • 1234.56和1.25e6是浮点型常量
  • 'a'是字符型常量
  • "C语言"是字符串型常量

C语言常用的标准数据类型如下表所示:

表2-1 常用的标准数据类型
类型标识符 名称 长度(B) 表示范围
char 字符型 1 0~255
short 短整型 2 -215 ~ +215-1 (-32768 ~ 32767)
int或long 整型(长整型) 4 -231 ~ +231-1 (-2147483648 ~ 2147483647)
float 浮点型(实型) 4 10-37 ~ 10+38 (绝对值)
double 双精度浮点型 8 10-307 ~ 10+308 (绝对值)

说明:在Dev-C++或VisualC中,int等同long。

如果在char或short或int类型标识符前面加上关键字unsigned,则表示无符号的整数类型,其值为非负整数:

  • unsigned char: 0~255
  • unsigned short: 0~65,535 (0~216-1)
  • unsigned long int: 0~4,294,967,295 (0~232-1)

练习题 1: 数据类型选择

如果要存储一个人的年龄(0-150),最合适的数据类型是:

A. int
B. unsigned char
C. float
D. double

答案:B. unsigned char

解析:年龄是非负整数,且范围在0-150之间,unsigned char的范围是0~255,完全满足需求且占用内存最小。

练习题 2: 数据类型范围

以下哪种数据类型可以存储最大的整数值?

A. short
B. int
C. unsigned long
D. float

答案:C. unsigned long

解析:unsigned long的范围是0~4,294,967,295,比short(-32,768~32,767)和int(-2,147,483,648~2,147,483,647)的范围都大。float虽然可以表示更大的数值,但它是浮点型,不是整型。

整型常量

在程序的运行过程中,其值保持不变的量称为常量。常量可以用一个标识符来表示,称为符号常量,可在程序开头用#define命令来定义。例如:

#define PI 3.1415926

此后,只要是在文件中出现的PI均可用3.1415926来代替。

除了大家比较熟悉的整型常量(如100、0、-256)之外,C语言中还有其他形式的整型常量:

表2-2 整型常量
例子 说明
-1234 十进制整型常量(包含数字0~9)
01234 八进制整型常量(以0开头,包含数字0~7)
0x1234 十六进制整型常量(以0x或0X开头,包含数字0~9、字母A~F或a~f)
0L long型十进制整型常量(以l或L结尾)

例如:

  • 0235等于十进制数157,即 2×82+3×81+5×80=157
  • -0X23a等于十进制数-570。因为 0X23a=2×162+3×161+10×160=570

任何类型的数据在计算机中都是以二进制补码形式存储的。short型数据在内存中占16位,long int型数据在内存中占32位,其中最高位为符号位(无符号型除外),1表示负数,0表示正数。

练习题 1: 进制转换

八进制数045转换为十进制数是:

A. 45
B. 37
C. 29
D. 53

答案:B. 37

解析:八进制数045转换为十进制:4×81 + 5×80 = 32 + 5 = 37。

练习题 2: 十六进制表示

以下哪个是合法的十六进制整型常量?

A. 0xGH12
B. 0X1234
C. x1234
D. 1234H

答案:B. 0X1234

解析:十六进制常量必须以0x或0X开头,后面跟0-9、A-F或a-f的字符。A包含非法字符G和H,C和D没有以0x或0X开头。

浮点型常量

C语言中的浮点类型主要分为单精度和双精度两种,一般以双精度为主。注意,在C语言数据中,1和1.0是两种不同类型的数,1是整数,而1.0则是双精度浮点数。

以下是合法的十进制浮点数表示:

1234.56、-1.2、0.0、.5、6、1000000000.0

浮点数还可采用科学计数法,以下是合法的科学计数法表示:

1.23456e2、0.345E-3、-765e12、-.5E-8、6.e-7、1.0e10

必须说明的是,出现在字母e(或E)之前的小数点,其左边或右边至少应有一位数字,在字母e(或E)之后必须是整数,即1.34E1.2、.e2均是非法的浮点数。

例如:0.000123456=1.23456×10-4,可表示成1.23456e-4或0.123456e-3。

练习题 1: 科学计数法

将十进制数0.00000725用科学计数法表示正确的是:

A. 7.25e6
B. 7.25e-6
C. 725e-8
D. 7.25E-7

答案:B. 7.25e-6

解析:0.00000725 = 7.25 × 10-6,在C语言中表示为7.25e-6。A表示7250000,C不是标准科学计数法形式,D表示0.000000725。

练习题 2: 浮点数合法性

以下哪个不是合法的浮点型常量?

A. 1.2e3
B. .5E-2
C. e5
D. 3.14

答案:C. e5

解析:e5不是合法的浮点常量,因为科学计数法要求e/E前必须有数字。A、B、D都是合法的浮点常量。

字符型常量

C语言的字符常量是用单引号(即撇号)括起来的一个字符,如'*'、'a'、'A'、'&'、'!'等都是字符常量。注意,'a'和'A'是不同的字符常量。

字符数据存放在内存中的,并不是字符本身,而是字符的代码,即ASCII码(美国标准信息交换码)。ASCII标准字符集定义了128个字符,每个字符对应于一个ASCII码,编码值为0~127。

从ASCII表可以看出:

  • 数字字符'0'~'9'的ASCII码是连续的
  • 大写字母'A'~'Z'的ASCII码是连续的
  • 小写字母'a'~'z'的ASCII码也是连续的
  • 小写字母的ASCII码比对应的大写字母的ASCII码大32

字符的存储形式与整数相似,不同的是,它在内存中仅占一个字节。C语言的字符型数据与整型数据之间可以通用。

除了以上的字符常量外,一些不可显示的控制字符(比如回车符、制表符、退格键等)在程序中无法用一个一般形式的字符表示,C语言允许用一种特殊形式的字符常量来表示这些字符:一个以反斜杠"\"开头的字符,称为转义字符。

常用的转义字符有:

转义字符 功能
\n 换行符(将当前位置移到下一行开头)
\t 水平制表符(跳到下一个Tab位置)
\b 退格
\r 回车(将当前位置移到本行开头)
\\ 反斜杠
\' 单引号
\" 双引号

转义字符看起来是两个字符,实际上只能算一个字符。

练习题 1: 字符与ASCII码

字符'A'的ASCII码是65,那么字符'D'的ASCII码是:

A. 66
B. 67
C. 68
D. 69

答案:C. 68

解析:大写字母的ASCII码是连续的,'A'是65,'B'是66,'C'是67,'D'是68。

练习题 2: 转义字符

以下哪个转义字符表示换行?

A. \t
B. \n
C. \r
D. \b

答案:B. \n

解析:\n表示换行符,\t表示制表符,\r表示回车,\b表示退格。

总结与易错点

知识点总结

C语言基本数据类型:包括整型(int, short, long)、浮点型(float, double)、字符型(char)等。
整型常量:可以有十进制、八进制(以0开头)、十六进制(以0x或0X开头)和长整型(以l或L结尾)等不同表示形式。
浮点型常量:有小数形式和科学计数法形式,科学计数法中e/E前必须有数字,e/E后必须是整数。
字符型常量:用单引号括起来,使用ASCII码存储。转义字符以反斜杠开头,用于表示特殊字符。

易错点提醒

1. 混淆整型和浮点型:1是整型,1.0是浮点型,两者在内存中的表示形式和运算规则不同。

2. 八进制和十六进制表示错误:八进制必须以0开头,十六进制必须以0x或0X开头。

3. 科学计数法格式错误:e/E前必须有数字,e/E后必须是整数,不能有小数点。

4. 字符和字符串混淆:字符常量用单引号,字符串常量用双引号,'a'和"a"是不同的。

5. 转义字符使用错误:常见错误如将文件路径中的反斜杠写为单斜杠,正确应为"\\"。

基本数据类型
整型常量
浮点型常量
字符型常量