第3章_数据类型运算符与表达式.ppt

上传人:本田雅阁 文档编号:3426219 上传时间:2019-08-24 格式:PPT 页数:46 大小:577.54KB
返回 下载 相关 举报
第3章_数据类型运算符与表达式.ppt_第1页
第1页 / 共46页
第3章_数据类型运算符与表达式.ppt_第2页
第2页 / 共46页
第3章_数据类型运算符与表达式.ppt_第3页
第3页 / 共46页
第3章_数据类型运算符与表达式.ppt_第4页
第4页 / 共46页
第3章_数据类型运算符与表达式.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《第3章_数据类型运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《第3章_数据类型运算符与表达式.ppt(46页珍藏版)》请在三一文库上搜索。

1、第3章 数据类型、 运算符与表达式, C程序设计,本章要点 数据的描述规则 数据的操作规则,主要内容 C的数据类型 (3.1) 常量与变量 (3.2) 整型数据 (3.3) 浮点型数据 (3.4) 字符型数据 (3.5) 变量赋初值 (3.6) 各类数值型数据间的混合运算 (3.7) 算术运算符和算术表达式 (3.8) 赋值运算符和赋值表达式 (3.9) 逗号运算符和逗号表达式 (3.10),C语言的数据类型 (3.1),一个程序应包括两个方面的内容: 对数据的描述:数据结构(data structure) 对操作的描述:算法(algorithm) 著名计算机科学家N. Wirth提出一个公式

2、: 数据结构 + 算法 = 程序 完整的程序设计应该是: 数据结构算法程序设计方法语言工具,C语言的数据类型 (3.1),数据:程序处理的对象。 数据类型:用以描述数据,每种数据类型决定: 该类型数据的存储方式: 所占用的存储空间长度(字节数) 在内存中的表示方式。 该类型数据的取值范围 对该类型数据所允许的操作 在程序中数据为各种数据类型的常量和变量。,C语言的数据类型 (3.1),C语言的数据类型:,常量与变量 (3.2),标识符 (3.2.2) 标识符(identifier):标识变量、常量、函数、数组、类型等的有效字符序列。 作用:用来为变量、常量、函数、数组、类型等命名。 组成规则:

3、只能由字母、数字和下划线组成,且第一个字符必须是字母或下划线。 长度限制:依不同的编译系统而异。 注意: 标识符区分大小写字母 不能使用关键字作标识符(关键字见附录B) 不宜混淆: 如l与I, o与0 注意长度限制 命名原则: 见名知意,常量与变量 (3.2),标识符 (3.2.2) 例:判断下列标识符号合法性 sum Sum D.John day Date 3days book_price -123 list_1_2 $123 char a=b _above,常量与变量 (3.2),常量 (3.2.1) 常量:在程序运行过程中,其值不能被改变的量。 C语言的常量分直接常量和符号常量。 直接常

4、量(字面常量):从其字面形式可判别。 整型常量 例: 100,12,-100,0 实型常量 例: 3.14, 0.125,-3.789, 0.0 字符型常量 例: a, b,2, + 字符串常量 例: “a“, “ab“, “1232“,常量与变量 (3.2),常量 (3.2.1) 符号常量:用标识符表示的常量。 定义格式: # define 标识符 常量 例:# define PI 3.14 #define LENGTH 10 注意:#与define之间可加或不加空格,最后不能加分号。 用法:定义一个符号常量之后,程序中凡出现该标识符均代表相应的常量。 例3.1 符号常量的使用,/例3.1

5、#define PRICE 30 #include void main ( ) int num, total; num=10; total=num * PRICE; printf(total=%dn,total); ,说明: 符号常量的值不可改变 符号常量的标识符习惯上用大写 关于编译预处理命令 使用符号常量的好处:含义清楚,修改方便。,常量与变量 (3.2),变量 (3.2.2) 变量:在程序运行过程中,其值可以被改变的量。 变量名与变量值 变量名用标识符表示,用以标识变量。 变量值为变量表示的数据,可以改变。 变量与存储空间 一个变量代表内存中具有特定属性的一个存储空间,它用来存放数据,即

6、相应变量的值。 变量某存储空间 变量值相应存储空间中的数据 变量的地址相应存储空间的首地址,常量与变量 (3.2),变量 (3.2.2) 变量的定义:指定变量的数据类型。 为何要定义变量? 一般格式: 数据类型 变量1,变量2,变量n; 注意: 变量应先定义后使用。 一个变量不能重复定义。 变量取名遵循见名知义的原则。 变量名中一般用小写字母。,常量与变量 (3.2),变量 (3.2.2) 变量的赋值:将数据存入变量所对应的存储空间。 赋值运算符:= 赋值的一般形式:变量=表达式 例如: a=100; x=3.5; i=i+1;,整型数据 (3.3),计算机中数的表示及进制 数码、基与权 数码

7、:表示数的符号 基:数码的个数 权:每一位所具有的值 数制,十进制:4956= 410+910 +510+610,二进制:1011=12+02 +12+12,十六进制:81AE=816+116 +1016+1416,八进制:4275=48+28 +78+58,整型数据 (3.3),计算机中数的表示及进制 字节和位 每个二进位的值是0或1 一个字节由8个二进制位组成 内存以字节为单元组成 一般每个字节有一个地址 数据在计算机中以二进制形式存储 数值以补码表示(关于补码的知识在其它课程中学习) 有符号数符号的表示: 最高位0-表示正数 最高位1-表示负数 表示的数值范围:n位二进制表示的范围 有符

8、号整数:-2n-12n-1-1 无符号整数:02n-1,整型数据 (3.3),整型常量 (3.3.1) 整型常量(整常数)的形式 十进制整数 例: 123, -456, 0 八进制整数:由数字0开头。 例: 011, -0123 十六进制整数:由0x或0X开头。(0x中是数字0) 例: 0x123, 0Xff, -0x11 计算下列整常数的十进制值: 011 -012 -0x11 0Xff 整型常量的类型 根据其值所在范围确定其数据类型 在整常量后加限定词l或L、U或UL,认为它是long int 型或无符号整型、无符号长整型常量,整型数据 (3.3),整型变量 (3.3.2) 整型变量的分类

9、 分3类: 基本整型:int 短整型: short int 长整型: long int 根据是否有符号,分6种: 有符号基本整型: signed int 无符号基本整型: unsigned int 有符号短整型: signed short int 无符号短整型: unsigned short int 有符号长整型: signed long int 无符号长整型: unsigned long int 整数类型的长度和取值范围 长度: shortintlong (具体长度依计算机系统而异) 取值范围依长度而定,整型数据 (3.3),整型变量 (3.3.2) 整型变量的定义 一般格式: 整数类型 变

10、量1,变量2,变量n; 例: int a,b; (定义整型变量、) unsigned short c,d;(定义无符号短整型变量、) long e, f ; (定义整型变量、),整型数据 (3.3),整型变量 (3.3.2) 整型变量的定义 例3.2 整型变量的定义与使用 #include void main( ) int a,b,c,d; /*指定a、b、c、d为整型变量*/ unsigned u; /*指定u为无符号整型变量*/ a=12; b=-24; u=10; c=a+u; d=b+u; printf(“a+u=%d, b+u=%dn“, c, d); ,输出结果: a+u=22,

11、b+u=-14 说明:可以看到不同种类的整型数据可以进行算术运算。,整型数据 (3.3),整型变量 (3.3.2) 整型数据的溢出 一个整型变量的值若超出其数据类型的取值范围,则出现溢出,此时将得到不正确的值。 为何会溢出? 例3.3 整型数据的溢出(修改后的例子) #include void main() short a,b; a=32767; b=a+1; printf (“%d, %dn“,a,b); ,输出结果: 32767, -32768 注意:C语言编译时不检查溢出,程序设计时要注意避免数据溢出。,实型(浮点型)数据 (3.4),实型常量 (3.4.1) 实型常量也称实数或浮点数。

12、 实型常量的表示形式 十进制数形式:(必须有小数点) 如 0.123, .123, -123.0, 0.0, 123. 指数形式:(e或E之前必须有数字;指数必须为整数) 如 12.3e3, 123E2, 1.23e-4, -1e10 为何用指数形式? 判别合法的指数形式的浮点数: 0E1 -0.1234e12 e-5 1e-10 1.2E-3.5 1.2e .e3 规范化的指数形式:小数点左边有且仅有一位非零数字。 例:2.378e2 3.0999E5 6.46832e12 实型常量的类型 C编译系统将实型常量作为双精度来处理。 后面加f或F则作为单精度处理。,实型(浮点型)数据 (3.4)

13、,实型变量 (3.4.2) 浮点型数据在内存中的存放形式 浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。,小数部分所占位数越多,数据的精度越高,指数部分所占的位数越多,数据的取值范围越大。,实型(浮点型)数据 (3.4),实型变量 (3.4.2) 实型变量的分类 分3类 单精度:float 双精度:double 长双精度:long double 实型数据的长度、精度和取值范围,实型(浮点型)数据 (3.4),实型变量 (3.4.2) 实型变量的定义 例: float x, y; double z; 实型数据的舍入误差 对实型

14、数据运算时注意数据的精度,控制由于精度限制导致的舍入误差。 例3.4 浮点型数据的舍入误差,/例3.4 浮点型数据的舍入误差 #include void main( ) float a,b; a = 123456.789e5; b = a + 20 ; printf(“%fn“,b); ,输出结果: ?,字符型数据 (3.5),字符常量 (3.5.1) 一般的字符常量:单引号括起来的一个字符。 例:a , A, 2, # 转义字符: 以开头的特殊字符。 转义字符及其作用(表3-3 P48) 例: n 换行 t 横向跳格 r 回车 反斜杠 ddd 1到3位八进制数所代表的字符 xhh 1到2位十

15、六进制数所代表的字符 为何用转义字符? 例:转义字符的使用,/例:转义字符的使用 #include void main( ) printf(“I say:“How are you?“n“); printf(“C Programn“); printf(“ ab ct derftgn“); printf(“Yb=n”); ,屏幕上的显示结果: I say: “How are you? “ C Program f gde =,打印结果: I say: “How are you? “ C Program fab c gde ,字符型数据 (3.5),字符变量 (3.5.2) 字符型变量用来存放字符,注

16、意只能放一个字符。 字符类型标识符:char 字符变量的定义形式如下:char c1,c2; 字符数据在内存中的存储形式 (3.5.3) 一个字符型数据在内存中占一个字节,存储字符的ASCII码二进制形式。 ASCII码共256个,见附录A。 例: char c1,c2; c1=a; c2=b;,字符型数据 (3.5),字符数据和整型数据的通用性 字符数据可以当作整型数据运算,即对其ASCII码运算。 在ASCII码范围内的整数也可当作字符数据,即对ASCII码对应的字符运算。 为何可通用? 应用示例 例3.6 向字符变量赋以整数。 例3.7 大小写字母的转换。,例3.6 向字符变量赋以整数。

17、 #include void main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); ,/ 例3.7 大小写字母的转换 #include void main() char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(“c c“,c1,c2); ,输出结果: a b 97 98,输出结果: A B,字符型数据 (3.5),字符串常量 (3.5.4) 表示形式:用双引号括起来的字符序列。 “How do you do.“, “CHINA“, “a

18、“ , “$123.45“ , “%dn“ 字符常量与字符串常量的区别 “a“与 a 是否相同? abc是否是字符串常量? “是否是字符串常量? 字符串的存储形式:存储时每个字符串末尾自动加一个 0 作为字符串结束标志。 例:,字符型数据 (3.5),字符串常量 (3.5.4) 字符串常量的应用 可以输出一个字符串,如 printf(“How do you do.“); 不能把一个字符串常量赋给一个字符变量。 如: C语言中没有字符串变量,通过字符数组实现字符串变量的功能。,变量赋初值 (3.6),变量赋初值 变量初始化: 为变量赋初值。 语言允许在定义变量的同时使变量初始化。 例如: int

19、 a=3; / 指定为整型变量,初值为3。 等价于 int a; a=3; float f=3.56; / 指定为浮点型变量,初值为.56。 char c= a; / 指定为字符变量,初值为a。 可以使被定义的变量的一部分赋初值。 例如: int a=1, b, c=5; /指定a,b,c为整型变量,a的初值为1,c的初值为5。 如果对几个变量赋以同一个初值, 应写成: int a=3,b=3,c=3; 不能写成: int a=b=c=3;,数值型数据间的混合运算 (3.7),混合运算 以下类型的数据可以混合运算 整型(int, short, long) 实型(float, double) 字

20、符型 (char) 混合运算时,不同类型的数据要先转换成同一类型,然后进行运算。 类型转换规则:低级类型高级类型 (转换是由系统自动进行的),算术运算符和算术表达式 (3.8),C语言运算符 (3.8.1),运算符的详细 内容见附录C。,算术运算符和算术表达式 (3.8),算术运算符和算术表达式 (3.8.2) 基本的算术运算符: + (加法运算符,或正值运算符) 如: 3+5、+3 -(减法运算符,或负值运算符) 如: 5-2、-3 * (乘法运算符) 如: 3*5 / (除法运算符) 如: 5/3 %(模运算符,或称求余运算符) 如: 7%4 说明: 两整数相除,结果为整数。 %两侧均应为

21、整型数据。,例 1/2 = -5/2 = -5/2.0 =,例 5%2 = -5%2 = 5%-2 = 1%10 = 5%1 = 5.5%2 =,0 -2 -2.5,1 -1 1 1 0 ,算术运算符和算术表达式 (3.8),算术运算符和算术表达式 (3.8.2) 算术表达式 用算术运算符和括号将运算对象(也称操作数)连接起来的、符合语法规则的式子,称为算术表达式。 运算对象包括常量、变量、函数等。 一个常量、变量都可作为一个表达式。 例: 以下是合法的算术表达式: a*b/c-1.5+ a (x+y)%(x+b-c/d) 100 x 运算符的优先级与结合性 表达式的求值规则: 不同优先级运算

22、符的按从高到低的顺序运算 相同优先级运算符的按结合方向的顺序运算 运算符的优先级与结合性见附录C。,算术运算符和算术表达式 (3.8),算术运算符和算术表达式 (3.8.2) 算术运算符的优先级与结合性 结合方向:从左至右 优先级,例: a*b/c-1.5+ a (x+y)%(x+b-c/d),算术运算符和算术表达式 (3.8),算术运算符和算术表达式 (3.8.2) 强制类型转换运算符 强制类型转换运算符将一个表达式的值转换成所需类型。 一般形式:(类型名)(表达式) 例如: (double) 将转换成double类型 (int)(x+y) 将x+y的值转换成整型 (float)(5%3)

23、将5%3的值转换成float型 注意: 表达式应用括号括起来。 比较: (int)x+y 和 (int) (x+y) 强制转换得到所需类型的中间变量,原变量类型不变。 如 int x; double y; y=(double)x; 较高类型向较低类型转换时可能发生精度损失或出错,应避免。 如 int a=1000; char c; c=(char)a;,算术运算符和算术表达式 (3.8),算术运算符和算术表达式 (3.8.2) 强制类型转换运算符 例3.8 强制类型转换。 #include void main( ) float x; int i; x=3.6; i=(int) x; print

24、f(“x=%f, i=%dn“,x,i); 输出结果: x3.600000, i=3,算术运算符和算术表达式 (3.8),算术运算符和算术表达式 (3.8.2) 自增、自减运算符 作用 自增运算符+: 使变量的值增1 自减运算符-: 使变量的值减1 两种形式 前缀形式: +i, -i (在使用i之前,先使i的值加1(减1) 前缀形式: i+, i- (在使用i之后,再使i的值加1(减1) 例: j=+i; j=i+; 等价于 等价于 i=i+1; j=i; j=i; i=i+1 结合方向与优先级: +,-的结合方向:从右至左 +,-的优先级:,例:int j=5, i=1, k, n; n=-

25、+i; k=-j*2;,算术运算符和算术表达式 (3.8),算术运算符和算术表达式 (3.8.2) 自增、自减运算符 注意: 前缀形式与后缀形式功能上的区别。 例: j=3; k=+j; j=3; k=j+; j=3; printf(“%d“,+j); j=3; printf(“%d“,j+); a=3; b=5; c=(+a)*b; a=3; b=5; c=(a+)*b;,+和-不能用于常量或表达式。 例:5+ , -(x+y) 是非法的。,+和-有副作用。 例:i+j printf(“%d,%d“, i, i+);,不要滥用+和-!,赋值运算符和赋值表达式 (3.9),赋值运算符 简单赋值

26、运算符:= 作用:将一个数据赋给一个变量,即将数据存入变量对应的存储空间。 例: a=1 b=x*2+1 复合赋值运算符 种类:+= -= *= /= %= = &= = |= 含义: exp1 op= exp2 exp1 = exp1 op exp2 例:,赋值运算符和赋值表达式 (3.9),赋值运算符 结合方向和优先级 结合方向:从右至左 优先级:,赋值运算符和赋值表达式 (3.9),赋值表达式 赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。 一般形式: 例: x=1 a=(a+1)/(b-c) x+=a*b 求值过程: 1.求赋值运算符右侧的表达式的值; 2.将该值赋给赋

27、值运算符左侧的变量。 (若是复合赋值运算符,这将该值按复合赋值运算符的规则运算后赋给左侧的变量。) 赋值表达式的值:求值后赋值运算符左侧的变量的值。 例:int a=5, b=3, c=1; a=(a+1)/(b-c) b*=c+1,赋值运算符和赋值表达式 (3.9),赋值表达式 说明: 赋值运算符左边必须是变量,不能常量或表达式。 例: 5=a a+b=3 当赋值运算符两边数据类型不一致时,右边表达式的值自动转换为左边变量的类型。 例: int a; char c=a; double x; a=c; x=a+1; 赋值表达式可以嵌套,运算时注意运算符的优先级和结合方向。,例: a=b=c=5

28、 a=(b=5) a=5+(c=6) a=(b=10)/(c=2) a+=a-=a*(a=1),不要滥用嵌套,注意适当地加括号。,赋值运算符和赋值表达式 (3.9),不同类型数据的赋值转换 当赋值表达式两边数据类型不一致时,系统自动进行类型转换。 较低类型的数据转换成较高类型时,值不改变。 较高类型的数据转换成较低类型时,有可能值会改变,从而引起精度损失或得到不正确的结果。 系统不检查由于此类转换而产生的错误,应注意避免。 例: int j=500; char c=a; double x=1234567890.123 ; float y; j=c; x=y;,c=j; y=x;,逗号运算符和逗

29、号表达式 (3.10),逗号运算符 运算符:, 作用:连接两个表达式。 优先级:最低 结合方向:从左至右 逗号表达式 一般形式: 表达式1, 表达式2, , 表达式n 例:i=1, j=0 x/(y+1), a+b, 3*4 求值过程:从左至右依次求表达式1, 表达式2, , 表达式n的值,最后一个表达式的值为整个逗号表达式的值。 例:x=(a=3, 6*3) 注意:逗号运算符优先级最低,要注意加括号。 例:比较 x=(a=3, 6*3) 与 x=a=3, 6*3 并不是任何地方出现的逗号都是作为逗号运算符。 例如函数参数也是用逗号来间隔的: printf(“%d,%d,%d“,a,b,c);,应用运算符和表达式应注意 运算符功能 运算符与运算对象的关系 要求运算对象的个数 要求运算对象的类型 运算符的优先级 运算的结合方向 运算结果的类型 混合运算中的类型转换,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1