C语言程序设计第3章

上传人:工**** 文档编号:570013927 上传时间:2024-08-01 格式:PPT 页数:65 大小:585KB
返回 下载 相关 举报
C语言程序设计第3章_第1页
第1页 / 共65页
C语言程序设计第3章_第2页
第2页 / 共65页
C语言程序设计第3章_第3页
第3页 / 共65页
C语言程序设计第3章_第4页
第4页 / 共65页
C语言程序设计第3章_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《C语言程序设计第3章》由会员分享,可在线阅读,更多相关《C语言程序设计第3章(65页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式3.1 3.1 C C语言的数据类型语言的数据类型语言的数据类型语言的数据类型3.2 3.2 常量和变量常量和变量常量和变量常量和变量3.3 3.3 整型数据整型数据整型数据整型数据3.4 3.4 实型数据实型数据实型数据实型数据3.5 3.5 字符型数据字符型数据字符型数据字符型数据3.6 3.6 变量赋初值变量赋初值变量赋初值变量赋初值3.7 3.7 各类数值数据之间的混合运算各类数值数据之间的混合运算各类数值数据之间的混合运算各类数值数据之间的混合运算3.8 3.8 算术运算符和算术表达式算术运算符和算术表达式算术运算符和算术

2、表达式算术运算符和算术表达式3.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式赋值运算符和赋值表达式赋值运算符和赋值表达式3.10 3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符和逗号表达式3.1 C的数据类型的数据类型3.2 常量与变量常量与变量3.2.13.2.1常量和符号常量常量和符号常量常量和符号常量常量和符号常量1.1.常量的概念常量的概念常量的概念常量的概念常量:常量:常量:常量:在程序运行过程中,其值不能被改变的量。在程序运行过程中,其值不能被改变的量。在程序运行过程中,其值不能被改变的量。在程序运行过程中,其值不能被改变的量。2

3、.2.常量的分类常量的分类常量的分类常量的分类(1 1)整型常量(如)整型常量(如)整型常量(如)整型常量(如1212、0 0、-3-3为整型常量)为整型常量)为整型常量)为整型常量)(2 2)实型常量()实型常量()实型常量()实型常量(4.64.6、-1.23-1.23为实型常量)为实型常量)为实型常量)为实型常量)(3 3)字符常量()字符常量()字符常量()字符常量( a a、d d字符常量)字符常量)字符常量)字符常量)(4 4)符号常量:)符号常量:)符号常量:)符号常量:用一个标识符代表的常量。用一个标识符代表的常量。用一个标识符代表的常量。用一个标识符代表的常量。 1 1)符号

4、常量定义格式)符号常量定义格式)符号常量定义格式)符号常量定义格式 #define define 常量符号名常量符号名常量符号名常量符号名 常量常量常量常量 2 2)符号常量不同于变量,它的值在其作用)符号常量不同于变量,它的值在其作用)符号常量不同于变量,它的值在其作用)符号常量不同于变量,它的值在其作用 域内不能改变,也不能再被赋值;域内不能改变,也不能再被赋值;域内不能改变,也不能再被赋值;域内不能改变,也不能再被赋值;例例 3.1 3.1:# #define PRICE 30define PRICE 30main( )main( ) int num,total; int num,tot

5、al; num num1010; total=num*PRICE;total=num*PRICE; printf(“total=%d”,total); printf(“total=%d”,total); 使用符号常量的好处:使用符号常量的好处:使用符号常量的好处:使用符号常量的好处:(1 1)含义清楚,含义清楚,含义清楚,含义清楚,见名知义见名知义见名知义见名知义,使用程序更加清楚易读;,使用程序更加清楚易读;,使用程序更加清楚易读;,使用程序更加清楚易读;(2 2)在需要改变一个常量时能做到在需要改变一个常量时能做到在需要改变一个常量时能做到在需要改变一个常量时能做到“ “一改全改一改全改一

6、改全改一改全改” ”,便于,便于,便于,便于程序的修改;程序的修改;程序的修改;程序的修改;符号常量定义语句,PRICE符号定义后代表常量30此句等同于Total=num*303.2.2变量变量1.1.变量的概念变量的概念变量的概念变量的概念:在程序运行时其值可以改变的量称为在程序运行时其值可以改变的量称为在程序运行时其值可以改变的量称为在程序运行时其值可以改变的量称为变量变量变量变量。2.2.变量的两个要素变量的两个要素变量的两个要素变量的两个要素: (1 1)变量名。)变量名。)变量名。)变量名。每个变量都必须有一个名字每个变量都必须有一个名字每个变量都必须有一个名字每个变量都必须有一个名

7、字变量名,变量命名遵循标识符命变量名,变量命名遵循标识符命变量名,变量命名遵循标识符命变量名,变量命名遵循标识符命名规则。名规则。名规则。名规则。(2 2)变变变变量量量量值值值值。在在在在程程程程序序序序运运运运行行行行过过过过程程程程中中中中,变变变变量量量量值值值值存存存存储储储储在在在在内内内内存存存存中中中中。在在在在程程程程序序序序中中中中,通通通通过过过过变变变变量名来引用变量的值。量名来引用变量的值。量名来引用变量的值。量名来引用变量的值。 C C语语语语言言言言中中中中变变变变量量量量:“ “先先先先定定定定义义义义,后后后后使使使使用用用用” ”。也也也也就就就就是是是是说

8、说说说,C C要要要要求求求求对对对对所所所所有有有有用用用用到到到到的的的的变量做强制定义。变量做强制定义。变量做强制定义。变量做强制定义。3a存储单元变量值变量名变量值存取过程变量值存取过程变量名变量名根据变量名找到根据变量名找到对应的存储单元对应的存储单元取出存储单元中取出存储单元中存储的变量值存储的变量值关于标识符关于标识符(identifier)组成字符的规定:组成字符的规定:(1)(1)C C语言规定标识符只能由语言规定标识符只能由语言规定标识符只能由语言规定标识符只能由字母字母字母字母、数字数字数字数字和和和和下划线下划线下划线下划线三种字符三种字符三种字符三种字符 组成,且组成

9、,且组成,且组成,且第一个字符第一个字符第一个字符第一个字符必须必须必须必须字母字母字母字母或或或或下划线下划线下划线下划线。 例:例:例:例:合法的标识符合法的标识符合法的标识符合法的标识符: sumsum,averageaverage,_total_total,lotus_1_2_3lotus_1_2_3,BASICBASIC 不合法的标识符不合法的标识符不合法的标识符不合法的标识符 ,¥123123,#33#33,3D643D64,abab (2)(2) C C语言中,语言中,语言中,语言中,区分大小写字母区分大小写字母区分大小写字母区分大小写字母,大写字母和小写字母被认,大写字母和小写

10、字母被认,大写字母和小写字母被认,大写字母和小写字母被认 为是两个不同的字符。为是两个不同的字符。为是两个不同的字符。为是两个不同的字符。 例:例:例:例:sumsum和和和和SUMSUM认为为不同的标识符。认为为不同的标识符。认为为不同的标识符。认为为不同的标识符。 一般情况下,一般情况下,一般情况下,一般情况下,变量名采用小写字母表示变量名采用小写字母表示变量名采用小写字母表示变量名采用小写字母表示。(3)(3)关于标识符长度的规定:关于标识符长度的规定:关于标识符长度的规定:关于标识符长度的规定: Turbo CTurbo C允许允许允许允许3232个字符,有的系统如个字符,有的系统如个

11、字符,有的系统如个字符,有的系统如IBM PCIBM PC和和和和MS CMS C取取取取8 8个字个字个字个字符,如果变量名长度超过符,如果变量名长度超过符,如果变量名长度超过符,如果变量名长度超过8 8个个个个,只有前,只有前,只有前,只有前8 8个有效,后面的不被识别。个有效,后面的不被识别。个有效,后面的不被识别。个有效,后面的不被识别。例如:例如:例如:例如: student_namestudent_name和和和和student_numberstudent_number被认为同一变量被认为同一变量被认为同一变量被认为同一变量 注意注意注意注意:这种类型的错误,系统在编译时不会报错。

12、:这种类型的错误,系统在编译时不会报错。:这种类型的错误,系统在编译时不会报错。:这种类型的错误,系统在编译时不会报错。(4) (4) C C语言的关键字不能用作变量名。语言的关键字不能用作变量名。语言的关键字不能用作变量名。语言的关键字不能用作变量名。标识符命名的良好习惯标识符命名的良好习惯标识符命名的良好习惯标识符命名的良好习惯见名知意见名知意见名知意见名知意: 所所谓谓“ “见见名名知知意意” ”是是指指,通通过过变变量量名名就就知知道道变变量量值值的的含含义义。通通常常应应选选择择能能表表示示数数据据含含义义的的英英文文单单词词(或或缩缩写写)作作变变量量名名,或或汉汉语语拼音字头作变

13、量名。拼音字头作变量名。 例例如如,name/xmname/xm(姓姓名名)、sex/xbsex/xb(性性别别)、age/nlage/nl(年年龄龄)、salary/gzsalary/gz(工资)。工资)。3.3 3.3 整型数据整型数据3.3.13.3.1整型常量的表示方法整型常量的表示方法整型常量的表示方法整型常量的表示方法 整型常量的表示方法有三种:整型常量的表示方法有三种:整型常量的表示方法有三种:整型常量的表示方法有三种: 1) 1)十进制整数。如十进制整数。如十进制整数。如十进制整数。如123123, , -456-456, , 0 0; ; 2) 2)八进制整数。以八进制整数。

14、以八进制整数。以八进制整数。以0 0开头开头开头开头的数是的数是的数是的数是八进制八进制八进制八进制。如。如。如。如0123, 0123, -011-011; ; 3) 3)十六进制整数。以十六进制整数。以十六进制整数。以十六进制整数。以0 0x x开头开头开头开头的数是的数是的数是的数是十六进制数十六进制数十六进制数十六进制数。如。如。如。如 0 0x123x123, , -0x18-0x18。整型变量整型变量整型变量整型变量 数据在内存中是以二进制形式存放的。微机上使用的数据在内存中是以二进制形式存放的。微机上使用的数据在内存中是以二进制形式存放的。微机上使用的数据在内存中是以二进制形式存

15、放的。微机上使用的C C编译系统,编译系统,编译系统,编译系统,每一个整型变量每一个整型变量每一个整型变量每一个整型变量在内存中占用在内存中占用在内存中占用在内存中占用2 2个字节个字节个字节个字节。例:。例:。例:。例: int i;int i; i=10; i=10; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0i实际使用中,整型变量的数值是以实际使用中,整型变量的数值是以实际使用中,整型变量的数值是以实际使用中,整型变量的数值是以补码形式补码形式补码形式补码形式存放的。存放的。存放的。存放的。正数的补码:正数

16、的补码:正数的补码:正数的补码:正数的补码和其原码的正数的补码和其原码的正数的补码和其原码的正数的补码和其原码的形式相同形式相同形式相同形式相同。例:。例:。例:。例: 10 10 原码原码原码原码 补码补码补码补码负数的补码负数的补码负数的补码负数的补码:绝对值绝对值绝对值绝对值的二进制形式,按位的二进制形式,按位的二进制形式,按位的二进制形式,按位取反再加取反再加取反再加取反再加1 1 -10 10-10 10的原码的原码的原码的原码 取反取反取反取反 再加再加再加再加1 1得得得得 -10 -10的补码的补码的补码的补码0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0

17、 0 0 0 0 0 0 1 1 0 0 1 1 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 1 1 0 0 1 1 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 1 1 0 0 1 1 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 0 0 1 1 0 0 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 0 0 1 1 1 1 0 02.整型变量的分类整型变量的分类关键字关键字关键

18、字关键字类型类型类型类型比特数比特数比特数比特数最小取值范围最小取值范围最小取值范围最小取值范围备注备注备注备注intint有符号整型有符号整型有符号整型有符号整型1616-32768+32767-32768+32767即即即即 -2 -21515(2(21515-1)-1)最高位为符号位最高位为符号位最高位为符号位最高位为符号位short intshort int有符号短整型有符号短整型有符号短整型有符号短整型1616-32768+32767-32768+32767即即即即 -2 -21515(2(21515-1)-1)最高位为符号位最高位为符号位最高位为符号位最高位为符号位long int

19、long int有符号长整型有符号长整型有符号长整型有符号长整型3232-2147483648 -2147483648 21474836472147483647即即即即 -2 -23131(2(23131-1)-1)最高位为符号位最高位为符号位最高位为符号位最高位为符号位unsigned intunsigned int无符号整型无符号整型无符号整型无符号整型1616065535 065535 即即即即 0(2 0(21616-1)-1)最高位仍代表数最高位仍代表数最高位仍代表数最高位仍代表数据据据据unsigned short intunsigned short int无符号短整型无符号短整型

20、无符号短整型无符号短整型1616065535 065535 即即即即 0(2 0(21616-1)-1)最高位仍代表数最高位仍代表数最高位仍代表数最高位仍代表数据据据据unsigned long intunsigned long int无符号长整型无符号长整型无符号长整型无符号长整型32320429496729504294967295即即即即 0 (2 0 (23232-1)-1)最高位仍代表数最高位仍代表数最高位仍代表数最高位仍代表数据据据据3.整型变量的定义整型变量的定义 对于变量的定义,一般是放在一个函数的开头部分对于变量的定义,一般是放在一个函数的开头部分对于变量的定义,一般是放在一个

21、函数的开头部分对于变量的定义,一般是放在一个函数的开头部分的声明部分的声明部分的声明部分的声明部分( (子函数放在子函数的声明部分子函数放在子函数的声明部分子函数放在子函数的声明部分子函数放在子函数的声明部分) )。例例例例3.23.2整型变量的定义与使用整型变量的定义与使用整型变量的定义与使用整型变量的定义与使用main( )main( ) int a,b,c,d; int a,b,c,d; /*/*定义为整型变量定义为整型变量定义为整型变量定义为整型变量*/*/ unsigned u; unsigned u; /*/*指定指定指定指定u u为无符号整型变量为无符号整型变量为无符号整型变量为

22、无符号整型变量*/*/ a=12; b=-24; u=10; a=12; b=-24; u=10; c=a+u;d=b+u; c=a+u;d=b+u; printf(“a+u=%d,b+u=%dn”,c,d); printf(“a+u=%d,b+u=%dn”,c,d); 注:注:注:注:不同种类的整型数据可以进行算术运算。不同种类的整型数据可以进行算术运算。不同种类的整型数据可以进行算术运算。不同种类的整型数据可以进行算术运算。 4.整型数据的溢出整型数据的溢出例例例例3.33.3整型数据的溢出整型数据的溢出整型数据的溢出整型数据的溢出main()main() int a,b;int a,b;

23、 a=32767; a=32767; b=a+1; b=a+1; printf(“%d,%d”,a,b); printf(“%d,%d”,a,b); a: 32767 a: 32767 b: -32768 b: -327680 0 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1结果为:32767,-327681 1 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 03.4实型数据实型数据3.4.13.4.1实型常量的表示方法实型常量的表示方法 实数实数实数实数

24、( (real number)real number)又称浮点数又称浮点数又称浮点数又称浮点数( (floating-point floating-point number).number).实数有两种表示形式:实数有两种表示形式:实数有两种表示形式:实数有两种表示形式:(1)(1)十进制小数形式。它由数字和小数点组成。例如十进制小数形式。它由数字和小数点组成。例如十进制小数形式。它由数字和小数点组成。例如十进制小数形式。它由数字和小数点组成。例如 123.45 0.123.45 0.345 .345 0.0 0. .0345 .345 0.0 0. .0(2)(2)指数形式。例:指数形式。例

25、:指数形式。例:指数形式。例:123123e4e4或或或或123123E4E4表示表示表示表示12310123104 4。注意:注意:注意:注意:1)1)E E前面必须有数字,后面的必须为整数;前面必须有数字,后面的必须为整数;前面必须有数字,后面的必须为整数;前面必须有数字,后面的必须为整数; 2) 2)规范化表示形式规范化表示形式规范化表示形式规范化表示形式:字母:字母:字母:字母e e之前的小数部分中,小之前的小数部分中,小之前的小数部分中,小之前的小数部分中,小 数点前面数点前面数点前面数点前面应有且只能有一位非零的数字应有且只能有一位非零的数字应有且只能有一位非零的数字应有且只能有一

26、位非零的数字;例如:;例如:;例如:;例如: 2.34782.3478e12 3.099e23e12 3.099e23 为规范化表示形式为规范化表示形式为规范化表示形式为规范化表示形式 12.90812.908e10 756e2 0.12e3e10 756e2 0.12e3 为非规范化表示为非规范化表示为非规范化表示为非规范化表示 .3e3 3e3 3.e3 3e e3 3e0.3 3.4.2实型变量实型变量1.1.实型数据的实型数据的实型数据的实型数据的存放形式存放形式存放形式存放形式: 一个实型数据一般在内存中占一个实型数据一般在内存中占一个实型数据一般在内存中占一个实型数据一般在内存中占

27、4 4个字节个字节个字节个字节(32(32位位位位) )。按照。按照。按照。按照指数形式指数形式指数形式指数形式存储。一般情况下,存储。一般情况下,存储。一般情况下,存储。一般情况下,小数部分小数部分小数部分小数部分占用占用占用占用2424位位位位( (包括符包括符包括符包括符号位号位号位号位) )。指数部分指数部分指数部分指数部分占用占用占用占用8 8位位位位, ,采用规范化的指数形式。采用规范化的指数形式。采用规范化的指数形式。采用规范化的指数形式。 例如:例如:例如:例如:3.141593.14159在内存中的存放形式。在内存中的存放形式。在内存中的存放形式。在内存中的存放形式。.314

28、159.3141591 1符号小数部分.314159指数部分1012.2.实型变量的分类实型变量的分类实型变量的分类实型变量的分类 C C实型变量分为实型变量分为实型变量分为实型变量分为单精度单精度单精度单精度( (floatfloat型型型型) )、双精度双精度双精度双精度( (doubledouble型型型型) )和和和和长双精度型长双精度型长双精度型长双精度型( (long doublelong double型型型型) )三类。三类。三类。三类。类型类型类型类型比特数比特数比特数比特数有效数字有效数字有效数字有效数字数值范围数值范围数值范围数值范围floatfloat3232676710

29、10-37-3710103838doubledouble6464151615161010-307-3071010308308long doublelong double128128181918191010-4931-4931101049324932float x,y;3.3.实型数据的舍入误差实型数据的舍入误差实型数据的舍入误差实型数据的舍入误差 实型变量是由有限的存储单元组成的,因此能提供实型变量是由有限的存储单元组成的,因此能提供实型变量是由有限的存储单元组成的,因此能提供实型变量是由有限的存储单元组成的,因此能提供的的的的有效数字总是有限的有效数字总是有限的有效数字总是有限的有效数字总是

30、有限的,在有效位以外的数字将被舍去。,在有效位以外的数字将被舍去。,在有效位以外的数字将被舍去。,在有效位以外的数字将被舍去。由此可能会产生一些误差。由此可能会产生一些误差。由此可能会产生一些误差。由此可能会产生一些误差。例例例例3.43.4main ( )main ( ) float a,b; float a,b; a=123456.789e5; a=123456.789e5; b=a+20; b=a+20; printf(“%f”,b); printf(“%f”,b); 理论答案是:实际答案是:3.4.3实型常量的类型实型常量的类型通常的通常的通常的通常的C C编译系统编译系统编译系统编译

31、系统将实型常量作为双精度来处理将实型常量作为双精度来处理将实型常量作为双精度来处理将实型常量作为双精度来处理。例:一个实型变量例:一个实型变量例:一个实型变量例:一个实型变量f f,令:令:令:令: f=2.45678*4523.65f=2.45678*4523.65 系统首先会把系统首先会把系统首先会把系统首先会把2.456782.45678和和和和4523.654523.65按双精度处理,各按双精度处理,各按双精度处理,各按双精度处理,各 占占占占6464位,运算后得到一个双精度的乘积,然后取前位,运算后得到一个双精度的乘积,然后取前位,运算后得到一个双精度的乘积,然后取前位,运算后得到一

32、个双精度的乘积,然后取前7 7 位赋值给实型变量位赋值给实型变量位赋值给实型变量位赋值给实型变量f f. .优点优点优点优点:精度高,计算结果更精确;:精度高,计算结果更精确;:精度高,计算结果更精确;:精度高,计算结果更精确;缺点缺点缺点缺点:运算速度降低。:运算速度降低。:运算速度降低。:运算速度降低。解决方法解决方法解决方法解决方法;在数的后面加字母在数的后面加字母在数的后面加字母在数的后面加字母f f或或或或F F,系统会按单精度处理系统会按单精度处理系统会按单精度处理系统会按单精度处理。1.62f 654.87f 1.62f 654.87f 3.5字符型数据字符型数据3.5.13.5

33、.1字符常量字符常量字符常量字符常量 C C的字符常量使用的字符常量使用的字符常量使用的字符常量使用单引号单引号单引号单引号括起来的一个字符。如:括起来的一个字符。如:括起来的一个字符。如:括起来的一个字符。如: a a b b DD $ $ ? ? 转义字符:转义字符:转义字符:转义字符:字符形式字符形式字符形式字符形式含含含含 义义义义ASCIIASCII代码代码代码代码 n n换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头1010 t t水平制表水平制表水平制表水平制表( (跳到下一个跳到下一个跳到下一个跳到下一个

34、tabtab位置位置位置位置) )9 9 b b退格,将当前位置移到前一列退格,将当前位置移到前一列退格,将当前位置移到前一列退格,将当前位置移到前一列8 8 r r回车,将当前位置移到本行开头回车,将当前位置移到本行开头回车,将当前位置移到本行开头回车,将当前位置移到本行开头1313 f f换页,将当前位置一道下页开头换页,将当前位置一道下页开头换页,将当前位置一道下页开头换页,将当前位置一道下页开头1212反斜杠字符反斜杠字符反斜杠字符反斜杠字符“”“”9292单引号字符单引号字符单引号字符单引号字符3939“双引号字符双引号字符双引号字符双引号字符3434 dddddd1 1到到到到3

35、3位位位位8 8进制所代表的字符进制所代表的字符进制所代表的字符进制所代表的字符101101代表代表代表代表A Axhhxhh1 1到到到到2 2 位位位位1616进制所代表的字符进制所代表的字符进制所代表的字符进制所代表的字符x41x41代表代表代表代表A AThis is a c program!例例3.53.5转义字符的使用转义字符的使用转义字符的使用转义字符的使用main( )main( ) printf(“ ab ct derftgn”); printf(“ ab ct derftgn”); printf(“htibbj k ”); printf(“htibbj k ”); abcd

36、efghijk3.5.2字符变量字符变量字符变量的定义形式:字符变量的定义形式:字符变量的定义形式:字符变量的定义形式: char c1,c2;char c1,c2;说明;说明;说明;说明;1)1)字符变量只能存放一个字符,每个变量在内存字符变量只能存放一个字符,每个变量在内存字符变量只能存放一个字符,每个变量在内存字符变量只能存放一个字符,每个变量在内存 中只占用中只占用中只占用中只占用一个字节的宽度一个字节的宽度一个字节的宽度一个字节的宽度; 2) 2)上述定义式把上述定义式把上述定义式把上述定义式把c1,c2c1,c2定义为字符型变量,各可以定义为字符型变量,各可以定义为字符型变量,各可

37、以定义为字符型变量,各可以 存放一个字符;存放一个字符;存放一个字符;存放一个字符;例:例:例:例: c1=a; c2=b; c1=a; c2=b; c1=ab c1=ab3.5.3字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法 一个字符常量放到一个字符变量中,实际并不是把该一个字符常量放到一个字符变量中,实际并不是把该一个字符常量放到一个字符变量中,实际并不是把该一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将字符本身放到内存单元中,而是将字符本身放到内存单元中,而是将字符本身放到内存单元中,而是将该字符的该字符的该字符的该字符的AS

38、CIIASCII代码代码代码代码放到放到放到放到存储单元中。存储单元中。存储单元中。存储单元中。例:例:例:例:c1=ac1=a实际作用是在变量实际作用是在变量实际作用是在变量实际作用是在变量c1c1所占用的内存单元中存所占用的内存单元中存所占用的内存单元中存所占用的内存单元中存 放了二进制码放了二进制码放了二进制码放了二进制码0110000101100001;c1c1=a011000011)字符数据与整数的存储形式类似,使得字符型字符数据与整数的存储形式类似,使得字符型数据和整型数据之间可以通用;数据和整型数据之间可以通用;2)大小写字母之间转换方便;大小写字母之间转换方便;例例例例3.63

39、.6向字符变量赋以整数向字符变量赋以整数向字符变量赋以整数向字符变量赋以整数main( )main( ) char c1,c2; char c1,c2; c1=97; c1=97; c2=98; c2=98; printf(“%c%cn”,c1,c2); printf(“%c%cn”,c1,c2); printf(“%d%dn”,c1,c2); printf(“%d%dn”,c1,c2); a b97 98向字符变量c1,c2赋以整数97,98由此可见,字符型数据和整型数据是通用的。注意:字符数注意:字符数据只占一个字据只占一个字节,它只能存节,它只能存放放0127范围范围内的整数内的整数例例

40、例例3.73.7大小写字母的转换大小写字母的转换大小写字母的转换大小写字母的转换main( )main( ) char c1,c2; char c1,c2; c1=a; c1=a; c2=b; c2=b; c1=c1-32; c1=c1-32; c2=c2-32; c2=c2-32; printf(“%c%c”,c1,c2); printf(“%c%c”,c1,c2); 运行结果: A Ba的ASCII码为97,A为65。b的ASCII码为98,B为66。这是这是C语言中语言中字母实现大小字母实现大小转换的方法。转换的方法。使用相当方便。使用相当方便。3.5.4字符串常量字符串常量字符串常量:

41、字符串常量:字符串常量:字符串常量:字符串常量是一对双引号括起来的字符序列。字符串常量是一对双引号括起来的字符序列。字符串常量是一对双引号括起来的字符序列。字符串常量是一对双引号括起来的字符序列。 例如:例如:例如:例如:“ “Hello Visual C#”Hello Visual C#”, “China is the greatest country”“China is the greatest country”字符串常量的存储形式:字符串常量的存储形式:字符串常量的存储形式:字符串常量的存储形式:字符串各字符的字符串各字符的字符串各字符的字符串各字符的ASCIIASCII码码码码加上结加

42、上结加上结加上结束字符束字符束字符束字符00。例如:例如:例如:例如: “ “Hello Visual C#”Hello Visual C#”,“a”“a”HHe el ll lo oV Vi is su ua al lC C# 00a a00注意注意字符常量字符常量a和和字符串常量字符串常量“a”是是不相同的,不相同的,a存存储单元中没有储单元中没有“0”。因此切近。因此切近字符常量和字符串字符常量和字符串常量混用常量混用 3.6变量赋初值变量赋初值C C语言允许在定义变量的同时使变量初始化语言允许在定义变量的同时使变量初始化语言允许在定义变量的同时使变量初始化语言允许在定义变量的同时使变量

43、初始化。例:。例:。例:。例: int a=3;int a=3; /* /*指定指定指定指定a a为整型变量,初值为为整型变量,初值为为整型变量,初值为为整型变量,初值为3*/3*/ float b=3.56;float b=3.56; /* /*指定指定指定指定b b为实型变量,初值为为实型变量,初值为为实型变量,初值为为实型变量,初值为3.56*/3.56*/ char c=achar c=a /* /*指定指定指定指定c c为字符变量,初值为为字符变量,初值为为字符变量,初值为为字符变量,初值为 a*/a*/也可以使被定义的变量的一部分赋初值。也可以使被定义的变量的一部分赋初值。也可以使

44、被定义的变量的一部分赋初值。也可以使被定义的变量的一部分赋初值。例:例:例:例: int a,b,c=5;int a,b,c=5;如果对几个变量赋予同一个初值,可写成:如果对几个变量赋予同一个初值,可写成:如果对几个变量赋予同一个初值,可写成:如果对几个变量赋予同一个初值,可写成: int a,b,c; int a,b,c; a=b=c=3;a=b=c=3; 该式表示该式表示该式表示该式表示a,b,ca,b,c的初值都是的初值都是的初值都是的初值都是3,3,并不表示整个程序中并不表示整个程序中并不表示整个程序中并不表示整个程序中a,b,ca,b,c变量变量变量变量一直相等的,一直相等的,一直相

45、等的,一直相等的,只是初值相同只是初值相同只是初值相同只是初值相同。 int a=b=c=3; int a=b=c=3; 是错误的是错误的是错误的是错误的。初始化不是在编译阶段初始化不是在编译阶段完成而是在程序运行时完成而是在程序运行时执行本函数时赋予初值执行本函数时赋予初值int a;3.7各类数值型数据间的混合运算各类数值型数据间的混合运算 不同类型的数据之间进行运不同类型的数据之间进行运不同类型的数据之间进行运不同类型的数据之间进行运算,级别低的向级别高的转换;算,级别低的向级别高的转换;算,级别低的向级别高的转换;算,级别低的向级别高的转换; 转换不需要中间过程,直接转换不需要中间过程

46、,直接转换不需要中间过程,直接转换不需要中间过程,直接转变为高级别数据类型;转变为高级别数据类型;转变为高级别数据类型;转变为高级别数据类型;上述转换由系统自动进行。上述转换由系统自动进行。上述转换由系统自动进行。上述转换由系统自动进行。doublelongintunsignedfloatcharshort低低高高例:例:i为整型变量,为整型变量,f为为float变量,变量,d为为double型变量,型变量,e为为long型。型。 10+a+i*f-d/ea转整型,转整型,i、f转换为转换为double型,型,e转换为转换为double型。型。 如果一个运算符两侧的操作数的数据类型不同,则系统

47、如果一个运算符两侧的操作数的数据类型不同,则系统按按“先转换、后运算先转换、后运算”的原则,转换的方法有两种:的原则,转换的方法有两种:自动转自动转换换(隐式转换);(隐式转换);强制转换强制转换3.8算术运算符和算术表达式算术运算符和算术表达式C C运算符简介运算符简介运算符简介运算符简介1.1.算术运算符算术运算符算术运算符算术运算符 ( (+ + * / % * / %) )2.2.关系运算符关系运算符关系运算符关系运算符 ( ( = = = !=) )3.3.逻辑运算符逻辑运算符逻辑运算符逻辑运算符 ( ( ! & | ! & |) )4.4.位运算符位运算符位运算符位运算符 ( (

48、| & | &) )5.5.赋值运算符赋值运算符赋值运算符赋值运算符 ( (=及其扩展赋值运算符及其扩展赋值运算符及其扩展赋值运算符及其扩展赋值运算符)6.6.条件运算符条件运算符条件运算符条件运算符 ( (? :)7.7.逗号运算符逗号运算符逗号运算符逗号运算符 ( ( ,) )8.8.指针运算符指针运算符指针运算符指针运算符 ( (* &* &) )9.9.求字节数运算符求字节数运算符求字节数运算符求字节数运算符( (sizeofsizeof) )10.10.强制类型转换运算符强制类型转换运算符强制类型转换运算符强制类型转换运算符 ( ( ( (类型类型类型类型) ) ) )11.11.分

49、量运算符分量运算符分量运算符分量运算符( ( . . ) )12.12.下标运算符下标运算符下标运算符下标运算符( ( ) )13.13.其他其他其他其他 ( (如函数调用运算符如函数调用运算符如函数调用运算符如函数调用运算符) )3.8.2算术运算符和算术表达式算术运算符和算术表达式1.1.基本的算术运算符基本的算术运算符基本的算术运算符基本的算术运算符 ( (加法运算符加法运算符加法运算符加法运算符,或,或,或,或正值运算符正值运算符正值运算符正值运算符。如。如。如。如3+53+5、3 3) ) ( (减法运算符减法运算符减法运算符减法运算符,或,或,或,或负值运算符负值运算符负值运算符负

50、值运算符。如。如。如。如5 52 2、3)3) * ( * (乘法运算符乘法运算符乘法运算符乘法运算符。如。如。如。如3*53*5) ) / ( / (除法运算符除法运算符除法运算符除法运算符。如。如。如。如5/35/3) ) % ( % (模运算符模运算符模运算符模运算符,或,或,或,或称求余运算符称求余运算符称求余运算符称求余运算符,%两侧均应为整型数两侧均应为整型数两侧均应为整型数两侧均应为整型数据,如据,如据,如据,如7%47%4为为为为3 3)说明:两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。一般情况下,采用“向零取整”的方法即5/3=1, 5/3=1。如果参加如果

51、参加+ * / 运算的两运算的两个数中为实数,个数中为实数,则结果为则结果为double型型2.2.算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性算术表达式算术表达式算术表达式算术表达式:用算术运算符和括号将运算对象连接起来:用算术运算符和括号将运算对象连接起来:用算术运算符和括号将运算对象连接起来:用算术运算符和括号将运算对象连接起来的符合的符合的符合的符合C C语言规则的式子,其计算符合运算符优先级和语言规则的式子,其计算符合运算符优先级和语言规则的式子,其计算符合运算符优先级和语言规则的式子,其计算

52、符合运算符优先级和结合性的原则。结合性的原则。结合性的原则。结合性的原则。运算符的优先级:运算符的优先级:运算符的优先级:运算符的优先级:P365P365附录附录附录附录C CC C语言规定了运算符的语言规定了运算符的语言规定了运算符的语言规定了运算符的优先级优先级优先级优先级和和和和结合性结合性结合性结合性。1)1)在表达式求值时,在表达式求值时,在表达式求值时,在表达式求值时,先先先先按运算符的按运算符的按运算符的按运算符的优先级别优先级别优先级别优先级别高低次序执高低次序执高低次序执高低次序执行;行;行;行;2)2)如果在一个运算对象两侧的运算符的如果在一个运算对象两侧的运算符的如果在一

53、个运算对象两侧的运算符的如果在一个运算对象两侧的运算符的优先级别相同优先级别相同优先级别相同优先级别相同,则则则则按按按按规定的规定的规定的规定的结合方向结合方向结合方向结合方向处理;处理;处理;处理;3)3)C C规定了各种运算符的结合方向规定了各种运算符的结合方向规定了各种运算符的结合方向规定了各种运算符的结合方向( (结合性结合性结合性结合性) ),算术运算符算术运算符算术运算符算术运算符的结合方向为的结合方向为的结合方向为的结合方向为“ “自左至右自左至右自左至右自左至右” ”,又称,又称,又称,又称“ “左结合左结合左结合左结合” ”。有些。有些。有些。有些运算符的结合方向为运算符的

54、结合方向为运算符的结合方向为运算符的结合方向为“ “自右至左自右至左自右至左自右至左” ”,即右结合。,即右结合。,即右结合。,即右结合。例:例:例:例: a b + ca b + c b b符号左边是符号左边是符号左边是符号左边是减号减号减号减号,右边是,右边是,右边是,右边是加号加号加号加号,优先级相等优先级相等优先级相等优先级相等,采,采,采,采用用用用左结合左结合左结合左结合,先,先,先,先a b,a b,然后再然后再然后再然后再c c。3.3.强制类型转换运算符强制类型转换运算符强制类型转换运算符强制类型转换运算符一般形式:一般形式:一般形式:一般形式: (类型符类型符类型符类型符)

55、()()()(表达式表达式表达式表达式)例:例:例:例: ( (double)a (double)a (将将将将a a转换成转换成转换成转换成doubledouble类型类型类型类型) ) ( (int)(x+y) (int)(x+y) (将将将将x+yx+y的值转换成整型的值转换成整型的值转换成整型的值转换成整型) ) ( (float)(5%3) (float)(5%3) (将将将将5%35%3的值转换成的值转换成的值转换成的值转换成floatfloat型型型型) )表达式应该用括号括起来。例表达式应该用括号括起来。例如如:(int)x+y,只强制转换的只强制转换的x的类型,而不是的类型,

56、而不是x+y的结果。的结果。若有定义若有定义:int x=3,y=2;float a=2.5,b=3.5;则表达则表达式式(x+y)%2+(int)a/(int)b的的值为值为 。例:例:例:例:( (int) x int) x 如果如果如果如果x x原指定为原指定为原指定为原指定为floatfloat型,进行强制类型运型,进行强制类型运型,进行强制类型运型,进行强制类型运算后得到一个算后得到一个算后得到一个算后得到一个intint型的中间变量,它的值等于型的中间变量,它的值等于型的中间变量,它的值等于型的中间变量,它的值等于x x的整数的整数的整数的整数部分,而部分,而部分,而部分,而x x

57、的类型不变,仍为的类型不变,仍为的类型不变,仍为的类型不变,仍为floatfloat型。型。型。型。例例例例3.83.8main()main() float x=3.6;float x=3.6; int i;int i; i=(int)x;i=(int)x; printf(“x=%f,i=%d”, x, i);printf(“x=%f,i=%d”, x, i); 注意:在强制类型转换时,得注意:在强制类型转换时,得到一个所需类型的中间变量,到一个所需类型的中间变量,原来变量的类型未发生变化。原来变量的类型未发生变化。最后结果:x=3.600000,i=34.4.自增、自减运算符自增、自减运算符

58、自增、自减运算符自增、自减运算符作用:作用:作用:作用:使变量的值增使变量的值增使变量的值增使变量的值增1 1或减或减或减或减1.1.例:例:例:例: + +i, i, i (i (在使用在使用在使用在使用i i之前之前之前之前,先使,先使,先使,先使i i的值加的值加的值加的值加( (减减减减)1)1) ) i+, i i+, i ( (在使用在使用在使用在使用i i之后之后之后之后,使,使,使,使i i的值加的值加的值加的值加( (减减减减)1)1) ) 这两者有很大区别,一个是在这两者有很大区别,一个是在这两者有很大区别,一个是在这两者有很大区别,一个是在使用之前加使用之前加使用之前加使

59、用之前加1,1,一个是一个是一个是一个是 在在在在使用之后加使用之后加使用之后加使用之后加1 1;例:例:例:例: 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; k=4,j=4 k=3,j=4 4 3 c=20,a=4 c=15,a=4注意:注意:注意:注意:1)1)自增运算符自增运算符自增运算符自增运算符(+)(+)和自减运算符和自减运算符和自减运算符和自减运算符( () )只能用于变量,只能用于变量,只能用于变量,只能用于变量,不能用

60、于常量或表达式不能用于常量或表达式不能用于常量或表达式不能用于常量或表达式,如,如,如,如5 +5 +、( (a+b)+a+b)+皆不合法;皆不合法;皆不合法;皆不合法;2)2)和和和和 的优先级高于算术运算符,结合方式是的优先级高于算术运算符,结合方式是的优先级高于算术运算符,结合方式是的优先级高于算术运算符,结合方式是“ “自右至左自右至左自右至左自右至左” ”。 例如:例如:例如:例如: i+i+等同于等同于等同于等同于(i+)(i+) i i3 3 printf(“%d”, printf(“%d”, i+)i+) 结果为输出结果为输出结果为输出结果为输出3 3,之后之后之后之后i i的

61、值变成的值变成的值变成的值变成4 4。 3.9赋值运算符和赋值表达式赋值运算符和赋值表达式1.1.赋值运算符赋值运算符赋值运算符赋值运算符 变量变量变量变量 =表达式表达式表达式表达式 赋值符号赋值符号赋值符号赋值符号“ “” ”就是赋值运算符,它的作用是将就是赋值运算符,它的作用是将就是赋值运算符,它的作用是将就是赋值运算符,它的作用是将一个一个一个一个表达式的值表达式的值表达式的值表达式的值( ( ( (常量和变量是表达式的特例)常量和变量是表达式的特例)常量和变量是表达式的特例)常量和变量是表达式的特例)赋给赋给赋给赋给一个一个一个一个变量变量变量变量。如:。如:。如:。如:a=3;av

62、e=(a+b)/10a=3;ave=(a+b)/102.2.类型转换类型转换类型转换类型转换 如果赋值运算符两侧的类型不一致,但都是数值如果赋值运算符两侧的类型不一致,但都是数值如果赋值运算符两侧的类型不一致,但都是数值如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。型或字符型时,在赋值时要进行类型转换。型或字符型时,在赋值时要进行类型转换。型或字符型时,在赋值时要进行类型转换。2.2.类型转换类型转换类型转换类型转换(1)(1)将将将将实型实型实型实型数据数据数据数据( (单、双精度单、双精度单、双精度单、双精度) )赋给赋给赋给赋给整型整型整型整型变量时,变

63、量时,变量时,变量时,舍弃舍弃舍弃舍弃实数的实数的实数的实数的小数部分小数部分小数部分小数部分。例如:。例如:。例如:。例如:i i为整型,为整型,为整型,为整型,i=3.16i=3.16的结果为的结果为的结果为的结果为i=3i=3;(2)(2)将整型数据赋给单、双精度变量时,将整型数据赋给单、双精度变量时,将整型数据赋给单、双精度变量时,将整型数据赋给单、双精度变量时,数值不变数值不变数值不变数值不变,但以,但以,但以,但以浮浮浮浮点数形式点数形式点数形式点数形式存储到变量中;存储到变量中;存储到变量中;存储到变量中;f f为为为为floatfloat型,型,型,型,f=3f=3的结果为的结

64、果为的结果为的结果为i=3.000000i=3.000000; main ( ) main ( ) int i; int i; float f; float f; i=5.34; i=5.34; f=23; f=23; printf(“%d,%fn”,i,f); printf(“%d,%fn”,i,f); 5,23.00000 5,23.00000(3)(3)将一个将一个将一个将一个doubledouble型型型型数据赋给数据赋给数据赋给数据赋给floatfloat变量变量变量变量,截取其前,截取其前,截取其前,截取其前面面面面7 7位有效数字位有效数字位有效数字位有效数字,存放到,存放到,存

65、放到,存放到floatfloat变量的存储单元变量的存储单元变量的存储单元变量的存储单元( (3232位位位位) ),需要注意不要超范围;将一个,需要注意不要超范围;将一个,需要注意不要超范围;将一个,需要注意不要超范围;将一个floatfloat型型型型数据赋数据赋数据赋数据赋给给给给doubledouble变量变量变量变量时,数值不变,有效位数扩展到时,数值不变,有效位数扩展到时,数值不变,有效位数扩展到时,数值不变,有效位数扩展到1616位位位位,以,以,以,以6464位存储位存储位存储位存储如如:float f; double d=123.456789e100; f=d; 就出现溢出的

66、错误就出现溢出的错误2.2.类型转换类型转换类型转换类型转换(4)(4)字符型数据赋给整型变量时,由于字符只占字符型数据赋给整型变量时,由于字符只占字符型数据赋给整型变量时,由于字符只占字符型数据赋给整型变量时,由于字符只占1 1个字节,个字节,个字节,个字节,而整型变量为而整型变量为而整型变量为而整型变量为2 2个字节,因此将个字节,因此将个字节,因此将个字节,因此将字符数据字符数据字符数据字符数据(8(8位位位位) )放到整放到整放到整放到整型变量型变量型变量型变量低低低低8 8位位位位中。在中。在中。在中。在Turbo CTurbo C中,若字符的中,若字符的中,若字符的中,若字符的最高

67、位为最高位为最高位为最高位为0 0, ,则整型变量则整型变量则整型变量则整型变量最高最高最高最高8 8位补位补位补位补0 0;若;若;若;若最高位为最高位为最高位为最高位为1 1, ,则则则则高高高高8 8位补位补位补位补1 1. .这称之为这称之为这称之为这称之为“ “符号扩展符号扩展符号扩展符号扩展” ”。1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0c=376i:1 11 1 1 1 1 1 1 1 1 1 1 1 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12.2.类型转换类型转换类型转换类型转换0 0 0 0 1 1 0 0 1 1 0 0 1

68、 1 1 1c=53i:0 00 0 1 1 0 0 1 1 0 0 1 1 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0实际使用中,整型变量的数值是以实际使用中,整型变量的数值是以实际使用中,整型变量的数值是以实际使用中,整型变量的数值是以补码形式补码形式补码形式补码形式存放的。存放的。存放的。存放的。正数的补码:正数的补码:正数的补码:正数的补码:正数的补码和其原码的正数的补码和其原码的正数的补码和其原码的正数的补码和其原码的形式相同形式相同形式相同形式相同。例:。例:。例:。例: 10 10 原码原码原码原码 补码补码补码补码负数的补码负数的补码负数的补码负数的补

69、码:绝对值绝对值绝对值绝对值的二进制形式,按位的二进制形式,按位的二进制形式,按位的二进制形式,按位取反再加取反再加取反再加取反再加1 1 -10 10-10 10的原码的原码的原码的原码 取反取反取反取反 再加再加再加再加1 1得得得得 -10 -10的补码的补码的补码的补码0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 1 1 0 0 1 1 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 1 1 0 0 1 1 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0

70、0 0 0 0 0 1 1 0 0 1 1 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 0 0 1 1 0 0 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0(5)将一个将一个int、short、long型数据赋给一个型数据赋给一个char型变量型变量时,只将时,只将低低8位位原封不动地原封不动地送到送到char型变量型变量(即即截断截断)0 00 0 1 1 0 0 0 0 0 0 0 0 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1

71、 1int i=289char c; c=i0 00 0 1 1 0 0 0 0 0 0 0 0 1 12.2.类型转换类型转换类型转换类型转换(6)(6)将一个将一个long型数据赋给一个型数据赋给一个int型变量,只将型变量,只将long型型数据中低数据中低16位原封不动送到整型变量位原封不动送到整型变量(即截断即截断)。(7)(7)将将unsigned int型数据赋给型数据赋给long int型变量,不存在符型变量,不存在符号扩展问题,只需号扩展问题,只需将高位补将高位补0即可。将一个即可。将一个unsigned类型数类型数据赋给一个占字节数相同的整型变量,将据赋给一个占字节数相同的整

72、型变量,将unsigned型变量型变量的内容原样送到的内容原样送到非非unsigned型变量中,但如果型变量中,但如果数据范围超数据范围超过相应的整型范围,则会出现数据错误过相应的整型范围,则会出现数据错误;(8)(8)将非将非将非将非unsignedunsigned型数据赋给长度相同的型数据赋给长度相同的型数据赋给长度相同的型数据赋给长度相同的unsignedunsigned型变量,也是型变量,也是型变量,也是型变量,也是数值位连同符号位原样传送数值位连同符号位原样传送数值位连同符号位原样传送数值位连同符号位原样传送。例:例:例:例: main( ) main( ) unsigned a;

73、unsigned a; int b=-1; int b=-1; a=b; a=b; printf(“%u”,a)printf(“%u”,a); 1 11 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 11 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1b的补码a原(补)码 运行结运行结果:果:65535不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送。所以:大家一定要好好熟悉原码,补码的概念。最后各位记住:最后各位记住:不同数据类型之

74、不同数据类型之间的赋值出错,间的赋值出错,C C语言的编译系语言的编译系统并不会提示出统并不会提示出错。错。3.3.复合运算符复合运算符复合运算符复合运算符 在赋值符在赋值符在赋值符在赋值符“ “” ”之前加上其他运算符之前加上其他运算符之前加上其他运算符之前加上其他运算符,可以构成,可以构成,可以构成,可以构成复合运算符复合运算符复合运算符复合运算符。例如:。例如:。例如:。例如: a+=3a+=3( (相当于相当于相当于相当于a=a+3a=a+3) ),x*=y+8x*=y+8( (相当于相当于相当于相当于x=x*(y+8)x=x*(y+8) ), x%=3x%=3( (相当于相当于相当于

75、相当于x=x%3x=x%3) ) a += 3 a += 3 a += 3 a += 3 a += 3 a += 3 a += 3 a += 3(将有下划线的(将有下划线的(将有下划线的(将有下划线的“a+”a+”a+”a+”移到移到移到移到“=”=”=”=”右侧)右侧)右侧)右侧) |_|_|_|_ a = a + 3 a = a + 3 a = a + 3 a = a + 3 (在(在(在(在“=”=”=”=”左侧补上变量名左侧补上变量名左侧补上变量名左侧补上变量名a a a a)a=12,a=12,计算计算计算计算a+=a a*=1+2a+=a a*=1+24.4.赋值表达式赋值表达式赋

76、值表达式赋值表达式一般形式:一般形式:一般形式:一般形式: 作用:作用:作用:作用:将赋值运算符将赋值运算符将赋值运算符将赋值运算符右右右右侧的侧的侧的侧的“ “表达式表达式表达式表达式” ”的值的值的值的值赋给左赋给左赋给左赋给左侧的变量。侧的变量。侧的变量。侧的变量。结合顺序结合顺序结合顺序结合顺序:“ “自右而左自右而左自右而左自右而左” ” 例例1: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6)表达式值为表达式值为5,a,b,c值为值为5 b=5;a=5 表达式值表达式值11,c=6,a=11 表达式值表达式值10,a=10,b=4,c=6例例2: a

77、+=a=a*a (设设a=12) 1)首先遇到左侧的第一个首先遇到左侧的第一个“”运算符,根据运算符,根据“自右而自右而左左”,先计算,先计算a=a*a ;它相当与它相当与a=aa*a 等于等于132; 2)然后计算然后计算a=a+(132),注意注意这时这时a=132,最后结最后结果是果是 264。 a=a+(a-a*a)3.10逗号运算符和逗号表达式逗号运算符和逗号表达式逗号表达式的一般形式:逗号表达式的一般形式:逗号表达式的一般形式:逗号表达式的一般形式: 表达式表达式表达式表达式1 1,表达式,表达式,表达式,表达式2 2求解表达式的求解过程:求解表达式的求解过程:求解表达式的求解过程

78、:求解表达式的求解过程: 先求解表达式先求解表达式先求解表达式先求解表达式1 1,再求解表达式,再求解表达式,再求解表达式,再求解表达式2 2,整个逗号表达式整个逗号表达式整个逗号表达式整个逗号表达式的值就是表达式的值就是表达式的值就是表达式的值就是表达式2 2的值的值的值的值。注意:注意:注意:注意:逗号运算符是所有运算符中级别最低的逗号运算符是所有运算符中级别最低的逗号运算符是所有运算符中级别最低的逗号运算符是所有运算符中级别最低的。例:例:例:例:a=3*5a=3*5,a*4a*4 1)1)根据运算符优先级根据运算符优先级根据运算符优先级根据运算符优先级( (赋值运算符优先级高于逗号运赋

79、值运算符优先级高于逗号运赋值运算符优先级高于逗号运赋值运算符优先级高于逗号运算符),先计算算符),先计算算符),先计算算符),先计算a=3*5a=3*5,结果为结果为结果为结果为a=15a=15; ; 2) 2)第二步,计算第二步,计算第二步,计算第二步,计算a*4a*4,结果为结果为结果为结果为6060; 3) 3)整个表达式的值为整个表达式的值为整个表达式的值为整个表达式的值为6060。 一个逗号表达式又可以与另一个表达式组成一个新的一个逗号表达式又可以与另一个表达式组成一个新的一个逗号表达式又可以与另一个表达式组成一个新的一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式逗号表达式

80、逗号表达式逗号表达式例:例:例:例: ( a =a = 3 * 5, a * 4), a + 53 * 5, a * 4), a + 5。 1 1)求解)求解)求解)求解a = 3 * 5a = 3 * 5,得得得得a=15a=15; 2 2)求)求)求)求a * 4=60a * 4=60; 3 3)求解)求解)求解)求解a + 5=20a + 5=20,所以逗号表达式的值为所以逗号表达式的值为所以逗号表达式的值为所以逗号表达式的值为2020一般表示式的扩展:一般表示式的扩展:一般表示式的扩展:一般表示式的扩展: 表达式表达式表达式表达式1 1,表达式,表达式,表达式,表达式2 2,表达式,表

81、达式,表达式,表达式3 3,表达式表达式表达式表达式n n注意事项注意事项注意事项注意事项 1)1)并不是任何地方并不是任何地方并不是任何地方并不是任何地方出现的逗号都是作为逗号运算符,出现的逗号都是作为逗号运算符,出现的逗号都是作为逗号运算符,出现的逗号都是作为逗号运算符, 例如:例如:例如:例如: printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,a,b,c); 2) 2)表达式表达式表达式表达式1 1,表达式,表达式,表达式,表达式2 2 ,表达式表达式表达式表达式n n,逐个求解,逐个求解,逐个求解,逐个求解,不能直接求解表达式不能直接求解表达式不能直接求解表达式不能直接求解表达式n n例:例:例:例:a=(3+5,3*5,5/3)a=(3+5,3*5,5/3) a=3+5,3*5,5/3 a=3+5,3*5,5/3 i=3,i+,+i,i+5 i=3,i+,+i,i+5 a=1,表达式的值为表达式的值为1a=8,表达式的值为表达式的值为1表达式的值为表达式的值为10

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号