40
1

C 02 c语言的基本数据类型与表达式

Embed Size (px)

Citation preview

Page 1: C 02 c语言的基本数据类型与表达式

1

Page 2: C 02 c语言的基本数据类型与表达式

2

Page 3: C 02 c语言的基本数据类型与表达式

数据类型( Data Type)• 数据为什么要区分类型?• 不同类型的数据代表不同的

– 数据表示形式– 合法的取值范围– 占用内存空间大小– 可参与的运算种类

Page 4: C 02 c语言的基本数据类型与表达式

4

数据类型概述字符类型 char整型 int 、 long 、 short

基本类型 实型 单精度型 float浮点型 双精度型 double

数据类型 枚举类型 enum数组类型 [ ]

构造类型 结构体类型 struct共用体类型 union

指针类型 *空类型 vodi

Page 5: C 02 c语言的基本数据类型与表达式

例 2.1 :一个简单的 C 程序例子 #include <stdio.h>/* 函数功能:计算两个整数相加之和 入口参数:整型数据 a和 b 返回值: 整型数 a和 b 之和 */

int Add(int a, int b){ return (a + b);}

/* 主函数 */main(){ int x, y, sum = 0;

printf("Input two integers:");scanf("%d%d", &x, &y); /* 输入两个整型数 x和 y*/sum = Add(x, y); /* 调用函数 Add 计算 x和 y 相加之和 */printf("sum = %d\n", sum); /* 输出 x和 y 相加之和 */

}

并列的两个函数并列的两个函数其中一个是其中一个是程序的入口程序的入口

程序注释程序注释

Page 6: C 02 c语言的基本数据类型与表达式

C 程序常见符号分类 • 关键字( Keyword )

– 又称为保留字, C 语言中预先规定的具有固定含义的一些单词– 数据类型修饰符 int, 控制语句 return 等

• 标识符( Identifier )– 系统预定义标识符, main,printf 等 – 用户自定义标识符, Add, x, y 等

• 运算符( Operator )– 34 种,详见附录 2

• 分隔符( Separator ) – 空格、回车 / 换行、逗号等

Page 7: C 02 c语言的基本数据类型与表达式

C 程序常见符号分类 • 其它符号

– 大花括号“ {” 和“ }” 通常用于标识函数体或者一个语句块 – “/*” 和“ */” 是程序注释所需的定界符

• 数据( Data )– 变量( Variable )– 常量( Constant )

Page 8: C 02 c语言的基本数据类型与表达式

标识符命名 • 变量名• 函数名• 由英文字母、数字和下划线组成,大小写敏感• 不可以是数字开头• 直观,见名知意,便于记忆和阅读

– 最好使用英文单词或其组合– 切忌使用汉语拼音

• 下划线和大小写通常用来增强可读性– variablename– variable_name– variableName Windo

ws 风格

UNIX 风格

Page 9: C 02 c语言的基本数据类型与表达式

标识符命名 • 不允许使用关键字作为标识符的名字

– int, float, for, while, if 等• 某些功能的变量采用习惯命名

– 如: for 语句所采用的循环变量习惯用 i, j, k

Page 10: C 02 c语言的基本数据类型与表达式

b, B, KB, MB, GB, TB

• 如何衡量数据类型所占空间大小?• bit ,中文叫法:位• Byte ,中文叫法:字节• Kilobyte(KB) ,中文叫法: K• Megabyte(MB) ,中文叫法:兆• Gigabyte(GB) ,中文叫法: G• Terabyte(TB) ,中文叫法: T

Page 11: C 02 c语言的基本数据类型与表达式

b, B, KB, MB, GB, TB

1 TB 1 TB ==== 1,024 GB1,024 GB1 GB1 GB ==== 1,024 MB1,024 MB

1 MB1 MB ==== 1,024 KB1,024 KB1 KB1 KB ==== 1,024 B1,024 B

1 B 1 B ==== 8 b8 b

Page 12: C 02 c语言的基本数据类型与表达式

b, B, KB, MB, GB, TB• 一个位有多大?

– 只能是“ 0” 或者“ 1” ,这叫二进制• 一个字节有多大?

– 保存一个字符(英文字母、数字、符号)•ASCII (美国标准信息交换码)编码•见 P427 附录 D ,常用字符与 ASCII 码对照表

– 两个字节保存一个汉字•GB 编码

– 可以表示 0~255 之间的整数

Page 13: C 02 c语言的基本数据类型与表达式

13

整数类型• 表示形式

十进制形式:与数学上的整数表示相同。例如: 12 , -100 , 0

八进制形式:以数字 0 开头的整数。例如: 012=1*81+2*80=10(十进制)

十六进制形式:以 0x开头的整数。例如: 0x12=1*161+2*160=18(十进制)

八进制的数码范围为 0~7 。如: 018十六进制的数码除了数字 0~9外,还使用英文字母 a~f (或 A~F )表示 10~15 。如: 0x1e

×

Page 14: C 02 c语言的基本数据类型与表达式

14

整数类型• 分类

根据数据所占的二进制位数分为 :int 、 short 、 long;同样存储长度的数据又分 unsigned 、 signed;故可组合出六种类型。• 值域:由机器中数据的存储长度决定。

Turbo C 中: short ( 2 字节)≤int ( 2 字节)≤long ( 4字节)关键字 所占位数 取值范围short 16 -32768 ~ 32767unsigned short 16 0~ 65535int 16 -32768 ~ 32767unsigned int 16 0~ 65535long 32 -2147483648 ~ 2147483647unsigned long 32 0~ 4294967295

Page 15: C 02 c语言的基本数据类型与表达式

何谓类型溢出( Overflow )?• C 语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。• TC2 中 int 的范围是 -32768~32767

– 如果超出取值范围,给它一个小于 -32768 或者大于 32767 的数会如何呢?现场编程测验……

小蛇能吞下小蛇能吞下大象吗?大象吗?

typeoverflow.typeoverflow.cc

Page 16: C 02 c语言的基本数据类型与表达式

何谓类型溢出( Overflow )?•生活中的例子:

–身份证号码中的出生年–阿利亚娜号火箭发射失败

•现象与危害:– 溢出后的数值是可预料的,但不同平台会有所不同。当程序从高位计算机向低位计算机移植(比如从 64 位系统移植到 32 位系统)时,以前从不出现的溢出问题可能出现。

Page 17: C 02 c语言的基本数据类型与表达式

类型溢出的解决方案?•解决方案:

– 预先估算运算结果的可能范围,采用取值范围更大的类型。•1+2+3+…•1!+2!+3!+…•13+23+33+…

– 如果不需要处理负数,则采用无符号类型。– 在运算还没开始之前就判断运算数是否在合理的取值范围内。如果超出,则停止运算,转错误处理。

Page 18: C 02 c语言的基本数据类型与表达式

18

实数类型• 表示形式

十进制小数形式:由数字和小数点组成。例如: 3.4, 4.0 , 0.3

指数形式:“十进制小数” + “ e(或 E)” + “ 十进制数整数” 例如: 12.5e-6表示 12.5×10-6小数点不能单独出现; 0. √ .0 √ . e 或 E的两边必须有数,且其后面必须为整数。 6E0.2 e5

• 分类 关键字 字节数 取值范围 精度(位)

float 4 3.4×10-38 ~ 3.4×1038 7double 8 1.7×10-308 ~ 1.7×10308 15

Page 19: C 02 c语言的基本数据类型与表达式

19

字符类型• 表示形式

用单引号括起来的一个字符,占 1 个字节。如:’A’ 、’ 1’ 、’ ?’

用单引号括起来的由反斜杠( \)引导的转义字符。 字符形式 功能 字符形式 功能\n 换行 \’ 单引号字符\b 退格 \t 横向跳格(跳到下一个输出区)\r 回车 \v 竖向跳格\f 走纸换页 \ddd 1到3位八进制数所代表的字符\\ 反斜杠字符 \xhh 1到 2 位十六进制所代表的字符

Page 20: C 02 c语言的基本数据类型与表达式

20

字符类型字符串:是用一对双引号括起来的字符序列。

如:“ SHANGHAI” ,“ AbcdeFGHijk” ,“How are you”

• 字符型数据类型的标识符为 char;• 字符型数据在内存中占 1 个字节;• 字符 ASCII码值为 0~ 127,共 128个。

注意 ‘\‘‘√ ‘\\‘ √ ‘‘‘ ‘\‘ ‘a‘ 与” a” 的区别。

Page 21: C 02 c语言的基本数据类型与表达式

21

常量与符号常量• 常量:是指在程序运行中,其数值不能被改变的量。

直接常量符号常量

数值常量 整型常量直接常量 实型常量

字符型常量 字符常量字符串常量

符号常量 标识符定义

Page 22: C 02 c语言的基本数据类型与表达式

22

直接常量•请判断下列常量正确与否。

整型常量120 、 -100 、 0 、 0120 、 072 、 0xFFFF、 0x1e 、 0x28AF、 0xED4、 120L、 200L、 099、 12f、 0xg 、 48EA 实型常量3.14、 -3.1 、 5.12E-6、 019.5、 1e-08、 2.1E10.2、 E-6、 6.4E、 4.8E9 字符型常量'a' 、 '#' 、 '\n' 、 '\101' 、 ''changsha''、 '\'、 '\p'、 '’'、 'ab'、 ''+++\\?ab''

Page 23: C 02 c语言的基本数据类型与表达式

23

符号常量• 含义:用标识符定义一个常量。

一旦某个标识符被定义成为一个常量后,以后在程序处理时,该标识符都代表对应的常量值。• 定义格式: #define 标识符 常量数据#define MAX 1000#define MIX 10#define PI 3.1415926

Page 24: C 02 c语言的基本数据类型与表达式

24

变量• 含义:是指以标识符为名字,其值可以改变的量。 • 作用:变量代表计算机内存中的某一存储空间,该存储空间中存放的数据就是变量的值。

Page 25: C 02 c语言的基本数据类型与表达式

25

变量定义• 定义形式:类型标识符 变量名 1[,变量名 2,变量名3];

int a,b,c;int a; int b; int c;float m,n;char s,t;

变量定义是语句,分号不能缺少自行确定,符合标识符命名原则,见名知意

如 int 、 char 、 float 等

在 C 语言程序中,变量必须“先定义,后使用”。变量定义主要是指出变量的名字,确定变量的数据类型。在同一个程序段中,变量不能被重复定义。

Page 26: C 02 c语言的基本数据类型与表达式

26

变量赋值• 变量的赋值

变量定义后只是按照类型分配了所需的存储空间,但是没有具体的值。变量初始化:第一次给变量赋值的过程,这个值称为变量的初值。变量先定义再赋初值

int a,b,c;a=2; b=5; c=12;

变量定义的同时赋初值int a=2,b=5,c=12;

变量初始化后可以再次赋值(即修改变量的值),但是一个变量任何时刻只能有一个值。int a=5; a=12;

int a,b,c;a=b=c=3; int a=b=c=3;

变量定义的同时不能连续初始化赋值

Page 27: C 02 c语言的基本数据类型与表达式

27

运算符与表达式• 运算符• 表达式:由操作数和运算符组成的序列。

算术运算符: + - * / %关系运算符: > < == >= <= !=逻辑运算符:! && ‖位运算符: << >> ~ | &∧赋值运算符: = 条件运算符: ? :逗号运算符: ,指针运算符: * &求字节数运算符: sizeof强制类型转换运算符分量运算符:• ->下标运算符: [ ]

Page 28: C 02 c语言的基本数据类型与表达式

28

算术运算符• +、 - 、 * 、 / 、%(求余):双目运算符5%3=_____, 6.2%3=_____

%运算左右两数必须为整型数据。5/3=_____两个整数相除,结果自动取整(向零取整)。x为 double 型, y为 int 型,则x+y的类型的为 _____。参加运算的两个数中有一个数为实数,则结果为 double 型。6+’A’=_____字符型数据可以和数值型数据混合运算。

Page 29: C 02 c语言的基本数据类型与表达式

29

算术表达式• 定义:用算术运算符和括号将运算对象(也称操作数,包括常量、变量、函数等)连接起来。• 运算符的优先级: ( )* 、 / 、%+、 -• 运算符的结合性:左结合性,即从左至右• 类型转换:如果运算符两侧的数据类型不一致,先自动进行类型转换,然后再进行计算。• - :取负值运算符

一元运算符优先级高于算术运算符

int a=8,b=6,c=5,y;y=-a-b*c+a/c;则 y=_____-37

Page 30: C 02 c语言的基本数据类型与表达式

30

float a=2.0; int b=6,c=3;a*b/c-1.5 +’a’+fabs(-5)

12.0/35

4.0 - 1.5

2.5 + 97(int)

99.5 + 5

104.5(double)

double float

long

unsigned

int char,short

Page 31: C 02 c语言的基本数据类型与表达式

31

自增、自减运算符 *• 自增运算符: ++• 自减运算符: --

单目运算符,作用是使变量的值加 1 或减 1 。操作对象只能是变量且该变量有值。++i , --i (在使用 i 之前, i 值先加(减)1 )i++, i-- (在使用 i 之后, i 值再加(减)1 )int x=3,y;

y=x++;

则 y=_____

int x=3,y;y=++x;

则 y=_____3 4

int x=3,y;y=-x++;

则 y=________________-(x++)

右结合性(-x)++

Page 32: C 02 c语言的基本数据类型与表达式

32

赋值运算符和赋值表达式• 赋值运算符 =:将一个数据赋给一个变量。• 赋值表达式: <变量名 > <赋值运算符 > <表达式 >

其中 <表达式 >可以是一个常量、一个变量或者一个表达式。int a,b=5,m=7,n=8;a=3;a=b;a=m+n;优先级:赋值运算符优先级低于算术运算符、关系运算符和逻辑运算符。结合性:右结合性

Page 33: C 02 c语言的基本数据类型与表达式

33

复合赋值运算符和复合赋值表达式•复合赋值运算符构成:在赋值运算符“ =” 之前加上其他运算符,可以构成复合赋值运算符。x+=5; x=x+5;x*=y+8; x%=3; x-=y;

•复合赋值表达式<变量名 > < 复合赋值运算符 > <表达式 >

已知 a 的初值为 12 ,则 a+=a-=a*a 的结果为 _____。

x=x*(y+8);x=x%3;

x=x-y;

-264

Page 34: C 02 c语言的基本数据类型与表达式

34

关系运算符和关系表达式• 关系运算符

1.>,大于2.<,小于3.>=,大于等于4.<=,小于等于5.==,等于6.!=,不等于

• 关系表达式:用关系运算符连接的表达式。• 优先级

1.>、 <、 >=、 <=2.==、 !=

• 结合性:左结合性• 表达式的值

1.结果为真,值为 12.结果为假,值为 0

算术运算符高于关系运算符

Page 35: C 02 c语言的基本数据类型与表达式

35

逻辑运算符和逻辑表达式• 逻辑运算符

1. !,非、单目运算符2. &&,与3. ||,或

• 逻辑表达式:用逻辑运算符连接的表达式。• 优先级

1.! 2.&&3. ||

• 结合性:左结合性• 表达式的值

1.结果为真,值为 12.结果为假,值为 0

! 高算术运算符关系运算符&&和 ||

赋值运算符 低

Page 36: C 02 c语言的基本数据类型与表达式

36

逗号运算符和逗号表达式• 一般形式:表达式 1,表达式 2

int x,y=5;x=(y=y+6,y=y/3);则 x的值为 _____。

• 求解过程1. 先求解表达式 1 的值,再求解表达式 2 的值。2. 整个逗号表达式的值是表达式 2 的值。

• 扩展形式:表达式 1,表达式 2,…,表达式 n

3

Page 37: C 02 c语言的基本数据类型与表达式

37

条件运算符和条件表达式• 一般形式: <表达式 1>?<表达式 2>:<表达式 3>int x=3,y=5,z;z=x>y?100:200;则 z的值为 _____• 运算顺序

1. 先求解表达式 1 的值2. 如果表达式 1 的值为真,则求解表达式 2 的值并把它作为整个表达式的值。3. 如果表达式 1 的值为假,则求解表达式 3的值并把它作为整个表达式的值。

200

Page 38: C 02 c语言的基本数据类型与表达式

38

求字节运算符• 一般形式

1. sizeof(变量名 ):返回变量的字节长度2. sizeof(类型名 ):返回类型的字节长度int x=5;y=sizeof(x);则 y的值为 _____。z=sizeof(int);则 z的值为 _____。

2

2

Page 39: C 02 c语言的基本数据类型与表达式

39

数据类型转换1. 自动转换

double float

long

unsigned

int char,short

2. 强制类型转换:将一个表达式转换为指定类型。(类型名 ) (表达式 )

int x=6,y=4;则 x/y=_____int x=6,y=4;则 (float) (x/y)=__________int x=6,y=4;则 (float) x/y=__________

1

1.000000

1.500000

Page 40: C 02 c语言的基本数据类型与表达式

40

数据类型转换3. 赋值转换

① 整型数据赋值给单、双精度变量,数值不变,但以浮点数形式存储。② 实型数据赋值给整型变量,舍弃实数小数部分。③ 字符型数据赋值给整型变量,字符数据放入到整型变量低8位中,整型变量高8位补 0 或补 1 。④ 整型数据 (int) 赋值给 long int 型变量,进行符号扩展, long int 型变量高 16位补 0 或补 1 。⑤无符号整型数据 (unsigned int) 赋值给 long int型变量, long int 型变量高 16位补 0 。