第三章 数据类型、运算符与表达式

32
第第第 第第第第 第第第第第第第 • §3.1 C 数数数数 数数数数数数数数数数数数数 •1 数数数数数数数数数 数数数数数 、() •2 数数数数数数数数数 数数数数数 、() • Wirth 数数数数数数数 = 数数数数 + 数数 • C 数数数数数数数数数数数数数数数数数数

Upload: timon-savage

Post on 30-Dec-2015

84 views

Category:

Documents


8 download

DESCRIPTION

第三章 数据类型、运算符与表达式. §3.1 C 数据类型 一个程序应包括两个方面的内容 1 、对处理数据的描述(数据结构) 2 、对处理数据的操作(算法描述) Wirth 提出的公式: 程序 = 数据结构 + 算法 C 提供的数据结构是以数据类型形式出现的. 由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型( int 、 float 等)、非数值型( char 等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。 所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第三章 数据类型、运算符与表达式

第三章 数据类型、运算符与表达式

• §3.1 C 数据类型• 一个程序应包括两个方面的内容• 1 、对处理数据的描述(数据结构)• 2 、对处理数据的操作(算法描述)• Wirth 提出的公式:• 程序 =数据结构 +算法• C 提供的数据结构是以数据类型形式出现的

Page 2: 第三章 数据类型、运算符与表达式
Page 3: 第三章 数据类型、运算符与表达式

• 由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型( int 、 float 等)、非数值型( char 等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。

• 对各种类型的数据,有两种存在形式即:常量和变量。

Page 4: 第三章 数据类型、运算符与表达式

• C 程序要处理的各种数据• 一、有类型之分,所以要进

行类型说明,其作用有二,一是知其存贮方法,二是知其运算方式。

• 二、无论何种类型数据,在程序中都有两种出现形式,即常量和变量

Page 5: 第三章 数据类型、运算符与表达式

• §3.2 常量与变量• 3.2.1 常量和符号常量• 常量定义• 常量类型: -3 , 4.6 ,‘ a’

• 常量的形式:以常量形式直接出现;• 符号常量: #define PRICE 35

• 程序中出现 35 处可以常量名(符号) PRICE 形式出现。符号常量名用大写,变量名用小写。

Page 6: 第三章 数据类型、运算符与表达式

• 3.2.2 变量• 其值可以改变的量称为变量。变量要有

一个名字。变量名和变量值的区别。• 用来标记变量名、符号常量名、函数名、

数组名、文件名和有效字符序列称为标识符。

• C 语言规定标识符只能由字母、数字和下划线三种字符组成。且第一个字符必须是字母或下划线,长度的规定

• 合法名、大小写被认为是不同的字符。

Page 7: 第三章 数据类型、运算符与表达式

• 在 C 语言中,要求对所有用到的变量作强制定义,也就是“先定义、后使用”

• 其意义有三:• 1 、保证变量名使用正确• 2 、根据类型分配存贮单元• 3 、根据类型判断其运算是否合法

Page 8: 第三章 数据类型、运算符与表达式

• §3.3 整型数据• 3.3.1 整形常量• 整形常量即整形数。有三种形式:• 1 、十进制形式 如 123

• 2 、八进制形式 以 0 开头,如 0123

• 3 、十六进制形式 以 0x 开头,如 0x123

• 3.3.2 整型变量• 一、整型变量的分类• 1 、基本型,以 int 表示 (integer)

Page 9: 第三章 数据类型、运算符与表达式

• 2 、短整型,以 short int 表示,或 short 表示

• 3 、长整型,以 long int 表示,或 long 表示• 4 、无符号型,又分无符号整形、短整型和

长整型,分别以 unsigned int 、 unsigned short 和 unsigned long 表示

• C 规定各类数据所占字节数。• 二、整型变量的定义• int a,b;• unsigned short c,d;• long e,f;

Page 10: 第三章 数据类型、运算符与表达式

• 三、整型常量的类型• 整型常量与整型变量之间的匹配关系• 四、整型量的运算• 进行各种类型的算术运算

• §3.4 实型数据• 3.4.1 实形常量• 实数在 C 中又称浮点数。实数有两种形式:• 1 、十进制数形式:它由数字和小数点组

成(必须有小数点)。

Page 11: 第三章 数据类型、运算符与表达式

• 如 12.9 , 34.0 或 34.

• 2 、指数形式: 123e3 或 123E3 。注意的是 E (或 e )之前必须有数字且 E 后面指数必须是整数。

• 3.4.2 实形变量• 实型变量分类与类型说明• 分为两类:单精度( float )和双精度

( double )• 类型说明语句:• float x,y;

• double z;

Page 12: 第三章 数据类型、运算符与表达式

• 在一般的系统中 , 一个 float 型数据在内存中占 32 位 , 一个 double 型数据在内存中占64 位 .

• 数据的范围和精度、实型常量不分 float 和double

• 实型量的运算

• §3.5 字符型数据• 3.5.1 字符常量• C 的字符常量有两种形式:• 1 、 C 的字符常量是用单引号(即撇号)括

起来的一个字符。如‘ A’ ,‘ a’ 等

Page 13: 第三章 数据类型、运算符与表达式

• 2 、特殊形式的字符常量,就是以‘ \’ 开头的字符序列。如‘ \n’ 代表一个“换行”符。因为有些非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。

• 以‘ \’ 开头的特殊字符见表,“转义字符”

• 自己看例 2.3• 3.5.2 字符变量• 字符变量用来存放字符常量。只能放一个

字符。字符变量的定义:• char c1,c2;

Page 14: 第三章 数据类型、运算符与表达式

• 一个字符变量占用一个字节的内存空间。• 3.5.3 字符数据在内存中的存储形式及其

使用方法• 字符是以 ASCII 形式放在内存单元中的。

由于它在存储形式上与整数存贮形式相类似。 C 就使 char 数据与 int 数据可以通用。

• [ 例 2.4]• main()• {char c1,c2; c1=97;c2=98;• printf(“%c %c”, c1,c2);}• 其中:“ %c” 是输出字符的格式符

Page 15: 第三章 数据类型、运算符与表达式

• [ 例 2.5]

• main()

• { int i ;• char c;

• i=‘a’;

• c=97;

• printf(“%c %d”, c,c);

• }

• 程序执行的输出结果

Page 16: 第三章 数据类型、运算符与表达式

• 3.5.4 字符串常量• 字符串常量是一对双括号括起来的字符

序列。如:“ How do you do.” ,“ CHINA” 等。

• 可以输出一个字符串,如:• printf (“ How do you do.”);

• 要注意的是 :“A” 与‘ A’ 不同。• 在 C 中没有专门的字符串变量,需要用

字符数组。

Page 17: 第三章 数据类型、运算符与表达式

• §3.6 变量赋初值• 程序中需要对一些变量预先设置初值。

C 中可在定义变量时同时使变量初值化。• 如:• int a=4;

• float h=3.567;

• char c=‘a’;

• 它等同于 :

• int a;

• a=4;

Page 18: 第三章 数据类型、运算符与表达式

• §3.7 各类数值型数据间的混合运算• 数值型是整型与实型的总称。• 各类 int 、 float 和 double 数据可以混合

运算。由于 char 与 int 型通用,因此, int 、float 、 double 与 char 间可以混合运算。

• 例如:• 10+‘a’+1.5-8.68* ‘b’ 是合法的。• 但:在运算前,计算机要将不同类型的数

据先转换成同一类型,然后进行运算。• 转换规则是:

Page 19: 第三章 数据类型、运算符与表达式
Page 20: 第三章 数据类型、运算符与表达式

• 类型数据总结

• 一、常量和变量• 常量的形式、标识符• 二、变量• 1 、定义(说明)• 2 、内存中的存贮形式、导致数据范围

(精度)• 3 、 int 与 char 异同点• 三、不同类型的数据运算方式不同

Page 21: 第三章 数据类型、运算符与表达式

• §3.8 算术运算符和算术表达式• 3.8.1 C 运算符简介• C 运算符范围很宽 ,除了控制语句和输入

输出以外的几乎所有操作都作为运算符处理。分为下面几类:

• 1 、算术运算符• 2 、关系运算符 < > == >= <=  !=

• 3 、逻辑运算符 ! && ||

• 等等

Page 22: 第三章 数据类型、运算符与表达式

• 3.8.2 算术运算符和算术表达式• 一、基本的算术运算符• + - * / % (模运算符,或称求余运

算符,要求 % 两侧都是整型数据)• 7%3=1

• 注意:整型数的除法• 如: 2/4=0 、 5/3=1 、 -5/3=?• 二、算术表达式和运算符的优先级与结

合性• 算术表达式概念:运算对象(操作数)经算术运算符和括号连接起来的式子

Page 23: 第三章 数据类型、运算符与表达式

• C 规定运算符的优先级和结合性。• 在表达式求值时先按运算符的优先级别进

行。如: a-b*c• 如果在一个运算对象两侧的运算符的优先级别相同,如: a-b+c C 规定了各种运算符结合方向(结合性)。算术运算符的结合方向为“自左至右”,即 b 先与 - 号结合。这种结合性称为“左结合性”。

• 如果运算符两侧操作数的类型不同,先自动进行类型转换,然后进行运算。

Page 24: 第三章 数据类型、运算符与表达式

• 注 : 运算符的意义和表达式值的确定• 三、强制类型转换• 将一个表达式转换成所需类型,其形式

为: ( 类型名 )( 表达式 )

• 例如:• main ()• { float x; int i;

• x=3.6; i=(int)x

• printf(“x=%f,i=%d”,x,i); }

Page 25: 第三章 数据类型、运算符与表达式

• 从上可知:有两种类型转换,一种是运算时不必用户指定,而由系统按规则自动进行类型转换;另一种是强制类型转换。

• 四、自增、自减运算符• 该运算符的作用是使变量值增 1 或减 1 ,

如:• ++i , --i 是一种形• i++ , i-- 式的表达式• 粗看, ++i 和 i++ 都相当于 i=i+1 ,但有

不同之处,表达式的值什么, i 的值是多少

Page 26: 第三章 数据类型、运算符与表达式

• 如 i=2 ,则 ++i 表达式的值为 3 , i 值也为 3 ;• 而 i++ 表达式的值为 2 , i 值却为 3 • 注意:• ( 1 )自增自减运算符的运算对象只能是变

量,不能是常量或表达式。如 5++ 或• ++ ( a+b )都是不合法的。• ( 2 ) ++ 和 -- 的结合方向是“自右至左”。

如: -i++ ,相当于 -(i++)• 五、有关表达式使用中的问题说明• 1 、表达式中包含自加或自减时的理解

Page 27: 第三章 数据类型、运算符与表达式

• 如:若 i=3

• (i++)+ (i++)+ (i++)=? i=?

• (++i)+ (++i)+ (++i)=? i=?

• 2 、表达式的理解问题• 问题一: i+++j 编译系统将其理解为 (i+

+)+j还是 i+(++j)呢 ?

• 问题二:• main()

• { int i=3;

• printf("%d %d\n",i,i++);}

Page 28: 第三章 数据类型、运算符与表达式

• 3.9 赋值运算符与赋值表达式• 一、赋值符号“ =” 的作用,将一个数据

赋给一个变量。如: c=‘k’ ;• 二、对赋值运算符两侧的类型不一致时,

类型转移问题。• 例:• main ()• {unsigned a ; int b=-1 ;• a=b ; printf (“ %u” , a ); }

• 注:这部分内容理解有一个前提。

Page 29: 第三章 数据类型、运算符与表达式

• 三、复合的赋值运算符• 在赋值号之前加上其它运算符,构成复合

运算符。• 如: a+=3 理解为 a=a+3

• x*=y+8 理解为 x=x* ( y+8 ) ?• 四、赋值表达式• 赋值运算符将一个变量和一个表达式连接

起来的式子,一般形式为• < 变量 >< 赋值运算符 >< 表达式 >

• 注意 :

Page 30: 第三章 数据类型、运算符与表达式

• (1) 赋值运算符有两种• (2) 赋值表达式作用有二。一是使变量得

值;二是使“赋值表达式”得值。• 将赋值表达式做为表达式的一种• main()

• { int a,b;

• a=1; b=a+=3;

• a-=a+=a*a;

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

Page 31: 第三章 数据类型、运算符与表达式

• 3.10 逗号运算符与逗号表达式• 逗号表达式的一般形式• 表达式 1, 表达式 2• 如: 3+5,6+8• a=3*5,a*4• 逗号表达式求值过程是 : 先求表达式 1 的

值,再求表达式 2 的值。整个逗号表达式的值是表达式 2 的值。

• 式 1 : x=(a=3 , 6*a)• 式 2 : x=a=3 , 6*a

Page 32: 第三章 数据类型、运算符与表达式

• 重点内容• 1 、数据类型,为什么要进行类型说明?• 2 、变量及变量名、标识符• 3 、表达式概念(算术、赋值和逗号)、

表达式求值、运算符优先级、运算符的结合性

• 习题• 3.2 , 3.10 , 3.12