第二章数据类型和表达式(最终版)_第1页
第二章数据类型和表达式(最终版)_第2页
第二章数据类型和表达式(最终版)_第3页
第二章数据类型和表达式(最终版)_第4页
第二章数据类型和表达式(最终版)_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机科学学院计算机科学学院2.1 C2.1 C语言的数据类型语言的数据类型2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4 2.4 实型数据实型数据2.5 2.5 字符型数据字符型数据2.6 2.6 变量赋初值变量赋初值2.7 2.7 各种类型数据之间的混合运算各种类型数据之间的混合运算2.8 2.8 算术运算符和算术表达式算术运算符和算术表达式 2.9 2.9 赋值运算符和赋值表达式赋值运算符和赋值表达式2.10 2.10 逗号运算符和逗号表达式逗号运算符和逗号表达式本章内容:本章内容:计算机科学学院计算机科学学院数数据据类类型型短整型短整型 (short)整型整

2、型 ( int )长整型长整型 (long)整型整型实型实型(浮点型浮点型)单精度型单精度型 ( float )双精度型双精度型 (double)数值类型数值类型字符类型字符类型 ( char )枚举类型枚举类型 ( enum )数组类型数组类型结构体类型结构体类型 (struct)共用体类型共用体类型 (union)基本类型基本类型 构造类型构造类型(组合类型组合类型)指针类型指针类型空类型空类型 (void)不返回任何类型的数据不返回任何类型的数据返回返回计算机科学学院计算机科学学院2.2 2.2 常量与变量常量与变量 2.2.1 2.2.1 常量和符号常量:常量和符号常量:常量:在程序运

3、行过程中,其值不能被改变的量称为常量。常量:在程序运行过程中,其值不能被改变的量称为常量。 如:如:1.21.2,3 3,a a 都是常量,分别代表实型、整型和字符型常量。都是常量,分别代表实型、整型和字符型常量。 它们的特点是从字面上即可判断它们是某一类型的常量,所以又称为它们的特点是从字面上即可判断它们是某一类型的常量,所以又称为字字面常量或直接常量。面常量或直接常量。符号常量:是在一个程序符号常量:是在一个程序( (或程序的一部分或程序的一部分) )中指定一符号或标识符代表一个中指定一符号或标识符代表一个常量。常量。例例3.1 #define PRICE 30 main ( ) int

4、num , total; num=10; total=num*PRICE; printf(“total=%d”,total); 输出结果:输出结果:total=300total=300说明:说明:(1) (1) 习惯上符号常量用大写,习惯上符号常量用大写, 变量用小写以示区别变量用小写以示区别(2) (2) 符号常量不同于变量,它符号常量不同于变量,它 的值在其作用域内不能改的值在其作用域内不能改 变,也不能再被赋值变,也不能再被赋值PRICE=50 PRICE=50 计算机科学学院计算机科学学院2.2 2 2.2 2 变量变量用来标识变量名、符号常量名、函数名、数组名、用来标识变量名、符号常

5、量名、函数名、数组名、类型名、文件名的有效字符序列称为类型名、文件名的有效字符序列称为标识符标识符。简单。简单地说,标识符就是一个名字。地说,标识符就是一个名字。 如:如:sum,PI,_sysflag,Number_of_moves,J5_7num-of-flagpiece flag5_7_9$123.4( (非法非法-)-)( (非法空格非法空格) ) ( (数字开头数字开头) )都不是合法的标识符都不是合法的标识符 ($($开头,且出现开头,且出现 .).) c c语言的标识符是以字母或下划线开头,由字母、语言的标识符是以字母或下划线开头,由字母、数字或下划线组成的字符序列数字或下划线组

6、成的字符序列计算机科学学院计算机科学学院关于标识的几点说明:关于标识的几点说明:(1) C(1) C语言有语言有3232个关键字个关键字(keyword)(keyword),它们有专门的定义,用,它们有专门的定义,用户不应采用与它们同名的标识符户不应采用与它们同名的标识符( (见见P375 P375 附录附录)(2) ANSI C(2) ANSI C标准没有规定标识符的长度,但各个标准没有规定标识符的长度,但各个C C编译系统都编译系统都有自己的规定。有自己的规定。 IBM PCIBM PC的的MS CMS C的标识符长度为的标识符长度为8 8 Turbo C Turbo C的标识符长度为的标

7、识符长度为3232(3) C(3) C语言将大写字母和小写字母认为是两个不同字符语言将大写字母和小写字母认为是两个不同字符 例如:例如:p p 和和 P P 被认为是两个标识符被认为是两个标识符计算机科学学院计算机科学学院(4)(4)在定义标识符时,建议遵循以下原在定义标识符时,建议遵循以下原则则: :a) a) 尽量见名知意,以增加程序的可读尽量见名知意,以增加程序的可读性性例如例如sum , area , score , day , name , age sum , area , score , day , name , age 等等. .b) b) 变量名、函数名用小写字母变量名、函数名

8、用小写字母, , 符号常量用大写字母符号常量用大写字母c) c) 容易混淆的地方尽量避免使用容易用错的字符容易混淆的地方尽量避免使用容易用错的字符 0 (0 (数字数字) O() O(大写字母大写字母) o () o (小写字母小写字母) ) 1 ( 1 (数字数字) I (i ) I (i 的大写字母的大写字母) l (L) l (L的小写字母的小写字母) ) 2 ( 2 (数字数字) Z() Z(大写字母大写字母) z () z (小写字母小写字母) )计算机科学学院计算机科学学院变量变量:其值可以改变的量称为变量。其值可以改变的量称为变量。变量名变量名:每一个变量都有一个名字,在内存中占

9、据一定每一个变量都有一个名字,在内存中占据一定的存储单元,这个名字称之为变量名。的存储单元,这个名字称之为变量名。13a变量名变量名变量值变量值存储单元存储单元比如一个整型变量比如一个整型变量a,它的值是,它的值是13 变量名:符号地址变量名:符号地址 变量值:变量名所代表的内存单变量值:变量名所代表的内存单元中存放的内容元中存放的内容计算机科学学院计算机科学学院u在在C C语言中,要求对所有用到的变量作强制定义,也就是语言中,要求对所有用到的变量作强制定义,也就是“先定义,先定义,后使用后使用”。目的:目的: (1) (1) 凡未事先定义的,不做为变量名,这就能保证程序中变量名使用凡未事先定

10、义的,不做为变量名,这就能保证程序中变量名使用得正确得正确(2) (2) 每一变量被指定为一确定类型,在编译时就能为其分配相应的每一变量被指定为一确定类型,在编译时就能为其分配相应的存储单元存储单元(3) (3) 每一个变量属于一个类型,就便于在编译时据此检查该变量所每一个变量属于一个类型,就便于在编译时据此检查该变量所进行的运算是否合法进行的运算是否合法变量的定义变量的定义类型关键字类型关键字 变量名;变量名;或或 类型关键字类型关键字 变量名变量名1,变量名,变量名2,;返回返回计算机科学学院计算机科学学院2.3 2.3 整型数据整型数据2.3.1 2.3.1 整型常量:整型常量:整型常量

11、可以使用十进制数、八进制数、十六进制数三种形式表示整型常量可以使用十进制数、八进制数、十六进制数三种形式表示1. 1. 十进制整数十进制整数: : 如:如:123, -456, 0123, -456, 0等等2. 2. 八进制整数八进制整数: : 以以0 0开头的后面跟数字开头的后面跟数字0707整数是八进制整数整数是八进制整数 如:如:0123, -011, 010070123, -011, 01007等等3. 3. 十六进制整数十六进制整数: : 以以 0 x(0 x(或或 0X)0X)开头的后面跟开头的后面跟0909或或afaf或或AFAF的整数的整数是十六进制整数是十六进制整数 如:如

12、:0 x123, 0X12, 0Xafc, 0 x12ff, 0 xffff0 x123, 0X12, 0Xafc, 0 x12ff, 0 xffff等等 09877 09877,20fa20fa,0X10fg0X10fg不合法的整型常量不合法的整型常量计算机科学学院计算机科学学院2.3.2 2.3.2 整型变量:整型变量:1. 1. 整型变量的分类整型变量的分类:基本型基本型 intint短整型短整型 short int short int 或或 shortshort长整型长整型 long int long int 或或 longlong无符号型无符号型无符号整型无符号整型 unsigned

13、 int unsigned int 无符号长整型无符号长整型 unsigned long unsigned long 无符号短整型无符号短整型 unsigned shortunsigned short 说明:说明:无符号型变量只能存放不带符号的整数,不能存放负数无符号型变量只能存放不带符号的整数,不能存放负数 一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数 的范围大一倍的范围大一倍-32768 -32768 32767 327670 0 65535 6553501110111 11111111 11111111 1111

14、1111intint一个字节一个字节11111111 11111111 11111111 11111111unsignedunsigned符号位符号位0 0 正数正数1 1 负数负数计算机科学学院计算机科学学院06553516unsigned int0429496729532Unsigned long int-2147483648 214748364732long int06553516unsigned short int-327683276716signed short int-327683276716signed int最小取值范围最小取值范围位数位数类型类型ANSIANSI标准定义的整数

15、类型标准定义的整数类型计算机科学学院计算机科学学院2. 2. 整型变量的定义整型变量的定义 ( ( 定义变量一般放在函数开头定义变量一般放在函数开头) ) int a , b ; short c , d ; 或或 short int c, d; long e , f ; 或或 long int e, f; unsigned g , h ; 或或 unsigned int g, h; 例例3.2 3.2 整型变量的定义和使用整型变量的定义和使用main()main()int a,b,c,d; int a,b,c,d; * * 指定指定a,b,c,da,b,c,d为整型变量为整型变量 * *uns

16、igned u; unsigned u; * * 指定为无符号整型变量指定为无符号整型变量* * / /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); 运行结果为运行结果为 + +=22,b+u=-14=22,b+u=-14计算机科学学院计算机科学学院3. 整型数据的溢出整型数据的溢出例例3.33.3 main() main() int a,b; int a,b; a=32767; a=32767; b=a+1; b=a+

17、1; printf(%d,%dn,a,b); printf(%d,%dn,a,b); 运行结果:运行结果:a=32767,b=-32768a=32767,b=-32768计算机科学学院计算机科学学院a 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1符号位符号位32767b=a+11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0符号位符号位-32768b 计算机科学学院计算机科学学院一个整型常量后面加一个一个整型常量后面加一个 l 或或 L则认为是则认为是long 型常量型常量 如:如: int a ; long b ; a=1234 ; b=12L ;4. 整型常

18、量的类型整型常量的类型在将一个整型常量赋值给一个整型变量时,应注意以下几点:在将一个整型常量赋值给一个整型变量时,应注意以下几点:(1)一个整数,如果其值在一个整数,如果其值在-3276832767范围内,认为它是范围内,认为它是int型,型,可以赋值给可以赋值给int型或型或long int型变量。型变量。(2)一个整数,如果其值超过了上述范围,而在一个整数,如果其值超过了上述范围,而在-2147483648 2147483647范围内,则认为它是范围内,则认为它是long int型,可以赋值给型,可以赋值给long int型变量。型变量。(3)如果机器中短整型和基本整型所占字节数相同,则同

19、等对待如果机器中短整型和基本整型所占字节数相同,则同等对待(4)一个整型常量后面加一个一个整型常量后面加一个 u或或 U,认为是认为是unsigned int 型常量型常量 如:如:12345u,-12345u(先转换成先转换成53191,再按无符号数存储,再按无符号数存储)返回返回计算机科学学院计算机科学学院2.4 2.4 实型数据实型数据 实型常量只能用十进制形式表示,不能用八进制或十六实型常量只能用十进制形式表示,不能用八进制或十六进制表示。进制表示。 实数在语言中又称浮点数,它有两种表示形式:实数在语言中又称浮点数,它有两种表示形式:2.4.12.4.1实型常量的表示方法实型常量的表示

20、方法1. 1. 十进制数形式:由数字和小数点组成十进制数形式:由数字和小数点组成( (注意必须有注意必须有小数点小数点) ) 如:如:.123 , 0.123 , 123.0 , 123. , 0.0.123 , 0.123 , 123.0 , 123. , 0.0计算机科学学院计算机科学学院u规范化的指数形式:在字母规范化的指数形式:在字母e(e(或或E)E)之前的小数部分中,小数左边有之前的小数部分中,小数左边有且仅有一位非且仅有一位非0 0的数字。实数在用指数形式输出时,是按规范化的指的数字。实数在用指数形式输出时,是按规范化的指数形式输出的。数形式输出的。 2.3478e2,3.099

21、9E5,6.46832e12 2.3478e2,3.0999E5,6.46832e12 规范化指数形式规范化指数形式 12.908e10,0.4578e3,756e0 12.908e10,0.4578e3,756e0 非规范化指数形式非规范化指数形式 2. 2. 指数形式:指数形式: 如:如:123e3 123e3 或或 123E3 123E3 都代表都代表 12312310103 3 注意:注意:e e 或或 E E 之前必须有数字,之前必须有数字,e e后面必须有数字且指数后面必须有数字且指数必须为整数必须为整数 e3 , 2.1e3.5 , e e3 , 2.1e3.5 , e 错误!错

22、误!计算机科学学院计算机科学学院2.4.2 2.4.2 实型变量实型变量1.1.实型数据在内存中的存放形式实型数据在内存中的存放形式 .314159+1数符数符 小数部分小数部分 指数指数 + .314159 10 3.141591实数实数3.141593.14159在内存中的存放形式示意:在内存中的存放形式示意:计算机科学学院计算机科学学院2.2.实型变量的分类实型变量的分类实型变量分为单精度(实型变量分为单精度(float型)、双精度(型)、双精度(double型)和长双精度型(型)和长双精度型(long double型)型)-1.2104932 1.21049321819128long

23、double-1.710308 1.710308151664double-3.41038 3.410386732float数值范围数值范围有效数字有效数字位数位数类型类型计算机科学学院计算机科学学院3.3.实型变量的舍入误差实型变量的舍入误差例例3.4main( )float a , b ; a=123456.789e5 ; b= a+20 ; printf(“a=%f,b=%fn” , a,b ) ; 运行结果:运行结果:a=12345678848.000000 , b= 12345678848.000000u应当避免将一个很大的数和一个很小的数直接相加或相减应当避免将一个很大的数和一个很小

24、的数直接相加或相减计算机科学学院计算机科学学院1. 许多许多C编译系统将实型常量作为双精度数处理。编译系统将实型常量作为双精度数处理。 如:如: float f ; f=2.45678 * 4523.65 ;系统将系统将2.45678和和4523.65按双精度数据存储按双精度数据存储(64位位),得,得到一个双精度的乘积,然后取前到一个双精度的乘积,然后取前7位赋给实型变量位赋给实型变量f。2.4.3 2.4.3 实型常量的类型实型常量的类型这样做虽然保证了精度,但降低了运算速度。这样做虽然保证了精度,但降低了运算速度。f=2.45678f * 4523.65 f;计算机科学学院计算机科学学院

25、 2 . 实型常量不分实型常量不分float型和型和double型。一个实型常量可以赋型。一个实型常量可以赋给一个给一个float型或型或double型变量。根据变量的类型截取实型常型变量。根据变量的类型截取实型常量中相应的有效位数字量中相应的有效位数字,假如假如a已指定为单精度实型变量已指定为单精度实型变量: float a; a=111111.111; 由于由于float型变量只能接收位有效数字,因此最后两位型变量只能接收位有效数字,因此最后两位小数不起作用。如果改为小数不起作用。如果改为double型,则能全部接收上述型,则能全部接收上述位数字并存储在变量中。位数字并存储在变量中。返回返

26、回计算机科学学院计算机科学学院2.5 2.5 字符型数据字符型数据2.5.1 2.5.1 字符常量字符常量C的字符常量是用的字符常量是用单撇号单撇号括起来的一个字符。括起来的一个字符。例如例如:a, A , $,? , #,C还有一种特殊形式的字符常量还有一种特殊形式的字符常量以一个以一个“”开头的字符序列,称为开头的字符序列,称为“转义字符转义字符”例如:例如: 101 101 表示表示A A 134 134 表示表示 077 077 表示表示? 计算机科学学院计算机科学学院 1 1到到2 2位位1616进制数所代表的字符进制数所代表的字符xddxdd l l到到3 3位位8 8进制数所代表

27、的字符进制数所代表的字符dddddd3434双撇号字符双撇号字符”3939单撇号字符单撇号字符9292反斜杠字符反斜杠字符“”1212走纸换页走纸换页ff1313 回车回车rr8 8 退格退格( (不换行不换行) )bb9 9横向跳格横向跳格( (即跳到下一个输出区即跳到下一个输出区- -占占8 8列列) )tt1010换行换行nnASCIIASCII码码功能功能字符形式字符形式常用的转义字符及其含义常用的转义字符及其含义计算机科学学院计算机科学学院 main ( ) main ( ) printf(“ printf(“_ abab_ctct_derftgn”);derftgn”); prin

28、tf(htibbj printf(htibbj_k);k); u程序运行时在打印机上得到以下结果程序运行时在打印机上得到以下结果:fab _ c_ _ _ gdeh _ _ _ _ _ _ jiku在屏幕上看到的结果是:在屏幕上看到的结果是:f_ _ _ _ _ _ _ gdeh_ _ _ _ _ _ j_k计算机科学学院计算机科学学院2.5.2 2.5.2 字符型变量字符型变量: :字符变量的定义形式字符变量的定义形式: :char c1 , c2 ; c1=a; c2=b;一个字符变量只能放一个字符,在内存中占一个字节一个字符变量只能放一个字符,在内存中占一个字节计算机科学学院计算机科学学

29、院2.5.32.5.3字符数据在内存中的存储形式及使用方法字符数据在内存中的存储形式及使用方法 将一个字符常量放到一个字符变量中,实际上并不是把该将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的字符本身放到内存单元中去,而是将该字符的ASCASC代码放到代码放到存储单元中。存储单元中。9797989801100001011000010110001001100010c1c2char c1 , c2 ; c1=a; c2=b;计算机科学学院计算机科学学院在在C C中中, ,字符型数据和整型数据之间可以通用字符型数据和整型数据之间可以通用, ,一个字符数据一

30、个字符数据既可以字符形式输出既可以字符形式输出, ,也可以以整数形式输出。也可以以整数形式输出。 例例3.6 向字符变量赋以整数向字符变量赋以整数 main( ) char c1 , c2 ; c1=97 ; c2=98 ; printf(“%c %c”, c1, c2) ; 输出结果输出结果: a bprintf(“%c,%dn”,c,c); 输出:输出: a , 97printf(“%c,%dn”, i, i); 输出:输出: a , 97 计算机科学学院计算机科学学院main( ) char c1 , c2 ; c1=a; c2=b; c1=c1-32 ; c2=c2-32 ; prin

31、tf(“%c %c”, c1 , c2) ; 输出结果输出结果: : A B也可以对字符数据进行算术运算也可以对字符数据进行算术运算, 此时此时, 相当于对相当于对它们的它们的ASCII码进行算术运算码进行算术运算计算机科学学院计算机科学学院l 字符数据与整型数据可以互相赋值字符数据与整型数据可以互相赋值int i ;char c ;i=a; /* i的值输出得到的值输出得到97 */c=97 ; /* 输出输出C可得到字符可得到字符 a*/ 有的系统将字符变量中的最高位作为符号位,也就是将有的系统将字符变量中的最高位作为符号位,也就是将字符处理成带符号的整数,即字符处理成带符号的整数,即si

32、gned charsigned char型(取值范围型(取值范围-128-128127127)。如果不想按有符号处理,可以将字符定义为)。如果不想按有符号处理,可以将字符定义为unsigned charunsigned char类型类型( (取值范围取值范围0 0255)255)。计算机科学学院计算机科学学院2.5.4 2.5.4 字符串常量字符串常量 如:如:How do you do., CHINA, a , $123.45 C C规定每一个字符串的结尾加一个字符串结束标志规定每一个字符串的结尾加一个字符串结束标志00,以便,以便系统判断字符串是否结束系统判断字符串是否结束C H I N

33、A 0“CHINA”内存中内存中00是系统自己加上的,写字符串时不必加是系统自己加上的,写字符串时不必加00,在输出时不输出,在输出时不输出00字符串常量是用字符串常量是用双撇号双撇号括起来的一个字符序列。括起来的一个字符序列。计算机科学学院计算机科学学院注意:注意:aa和和aa的区别的区别 a是单个字符常量,一个字符是单个字符常量,一个字符 a 是字符串常量,含有二个字符是字符串常量,含有二个字符a, 0 char c ; c=a; c=a; 在在C语言中没有专门的字符串变量,字符串如果语言中没有专门的字符串变量,字符串如果需要存放在变量中,需要用字符数组来存放,即用一需要存放在变量中,需要

34、用字符数组来存放,即用一个字符型数组来存放一个字符串,数组中每个元素存个字符型数组来存放一个字符串,数组中每个元素存放一个字符。放一个字符。返回返回计算机科学学院计算机科学学院2.6 2.6 变量赋初值变量赋初值程序中常需要对一些变量预先设置初值。程序中常需要对一些变量预先设置初值。 C语言允许在定义变语言允许在定义变量时对变量赋初值量时对变量赋初值 -变量的初始化。变量的初始化。int a=3; /* 指定指定a为整型变量,初值为为整型变量,初值为3 */ float f=3.56; /* 指定指定f为实型变量,初值为为实型变量,初值为3.56 */ char c=a; /* 指定指定c为字

35、符变量,初值为为字符变量,初值为a */1.可以对定义变量的一部分初始化可以对定义变量的一部分初始化 如:如: int a int a,b b,c=5;c=5;2.如果对几个变量赋以同一个初值,不能写成:如果对几个变量赋以同一个初值,不能写成: int a=b=c=3;int a=b=c=3; 而应写成:而应写成: int a=3,b=3,c=3;int a=3,b=3,c=3;3. 初始化不是在编译阶段完成的,而是在程序运行时,执行函数初始化不是在编译阶段完成的,而是在程序运行时,执行函数时赋初值的,相当于有一个赋值语句。时赋初值的,相当于有一个赋值语句。int a=3;相当于:相当于:in

36、t a; a=3;返回返回计算机科学学院计算机科学学院2.7 2.7 各类数值型数据间的混合运算各类数值型数据间的混合运算数据类型的转换有如下三种基本形式:数据类型的转换有如下三种基本形式: 同一类型但长度不同的数据间的转换同一类型但长度不同的数据间的转换 定点方式与浮点方式之间的转换定点方式与浮点方式之间的转换 整型数中有符号格式与无符号格式之间的转换整型数中有符号格式与无符号格式之间的转换 整型、实型整型、实型(float , double)(float , double),字符型数据间可以混合运算,字符型数据间可以混合运算,在进行运算时,在进行运算时, ,不同类型的数据要先转换成同一类型

37、,然后进不同类型的数据要先转换成同一类型,然后进行运算。行运算。计算机科学学院计算机科学学院char ,shortchar ,shortintintunsignedunsignedlonglongdoubledoublefloatfloat向左箭头表示必定的转换向左箭头表示必定的转换纵向箭头表示当运算对象纵向箭头表示当运算对象 为不同类型时的转换方向为不同类型时的转换方向低低高高 转换规则如图:转换规则如图:以上类型转换是由系统自动进行的以上类型转换是由系统自动进行的计算机科学学院计算机科学学院例如:例如: int i;int i; float f; float f; double d; do

38、uble d; long e; long e;10+a+i10+a+i* *f-d/ef-d/e返回返回计算机科学学院计算机科学学院2.8 2.8 算术运算符和算术表达式算术运算符和算术表达式2.8.1 C2.8.1 C的运算符的种类的运算符的种类 1 1算术运算符算术运算符 (+ - + - * * / % ) / % ) 2 2关系运算符关系运算符 ( = = = !=) 3 3逻辑运算符逻辑运算符 (!(! & |& |) 4 4位运算符位运算符 ( | & | &) 5 5赋值运算符赋值运算符 (= = 及其扩展赋值运算符)及其扩展赋值运算符) 6 6条

39、件运算符条件运算符 (? :? :) 7. 7.逗号运算符逗号运算符 (,)(,) 8 8指针运算符指针运算符 (* * 和和 & &) 9 9求字节数运算符求字节数运算符 (sizeofsizeof) 10 10强制类型转换运算符强制类型转换运算符 (( (类型类型) )) 11 11分量运算符分量运算符 ( ) 12 12下标运算符下标运算符 ( ) 13 13其它其它 (如函数调用运算符()(如函数调用运算符()计算机科学学院计算机科学学院2.8.2 2.8.2 算术运算符和算术表达式算术运算符和算术表达式 1.1.基本的算术运算符基本的算术运算符 + + (加法运算符,

40、或正值运算符。如(加法运算符,或正值运算符。如3 35 5、3 3) - - (减法运算符,或负值运算符,如(减法运算符,或负值运算符,如5-25-2、-3-3) * * (乘法运算符。如(乘法运算符。如3 3* *5 5) (除法运算符。如(除法运算符。如5 53 3) (模运算符,或称求余运算符,要求两侧均为整型数(模运算符,或称求余运算符,要求两侧均为整型数 据,如据,如7 74 4的值为的值为3 3)。)。说明:说明:1.1.两个整数相除结果为整数两个整数相除结果为整数 2.2.如果参加运算的两个数中有一个数为实数,则结果如果参加运算的两个数中有一个数为实数,则结果是是doubledo

41、uble型型计算机科学学院计算机科学学院2.2.算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象(也称操作数)连接起来的、符合用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C C语法规则的式子,称语法规则的式子,称C C算术表达式。运算对象包括常量、变量、函数等。算术表达式。运算对象包括常量、变量、函数等。例如:例如: a a* *b/c-1.5+ab/c-1.5+a 在表达式求值时:在表达式求值时: 先按运算符的优先级别高低次序执行先按运算符的优先级别高低次序执行 同一优先级的运算符,运算次序由结合方向决定同一优先级的运算符,运算次

42、序由结合方向决定C C语言规定了运算符的优先级和结合性。语言规定了运算符的优先级和结合性。算术运算符的结合方向为算术运算符的结合方向为“自左至右自左至右”,即先左后右即先左后右单目运算符、三目运算符、赋值运算符的结合方向单目运算符、三目运算符、赋值运算符的结合方向为“自右至自右至左左”,即先右后左即先右后左计算机科学学院计算机科学学院运算符的优先级运算符的优先级( (由高到低由高到低)P375)P375附录附录IIIIII初等运算符初等运算符 ( ) - . ( ) - . 单目运算符单目运算符算术运算符算术运算符 ( (先乘除,后加减先乘除,后加减) )关系运算符关系运算符 逻辑运算符逻辑运

43、算符 (不包括(不包括! !)条件运算符条件运算符 赋值运算符赋值运算符 逗号运算符逗号运算符 计算机科学学院计算机科学学院3.3.强制类型转换运算符强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型。可以利用强制类型转换运算符将一个表达式转换成所需类型。( (类型名类型名)()(表达式表达式) )例如:例如: (double)a (double)a (将(将a a的值转换成的值转换成doubledouble类型)类型) (int)(x+y) (int)(x+y) (将(将x+yx+y的值转换成整型)的值转换成整型) (float)(5(float)(53) 3) (将(将

44、5 53 3的值转换成的值转换成floatfloat型)型)强制类型转换时,得到一个所需类型的中间变量,原来变量的类强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。型未发生变化。main()main() float x float x; int i; int i; x=3.6; x=3.6; i=(int)x; i=(int)x; printf printf(x=%f,i=%dx,i);x=%f,i=%dx,i); 运行结果如下:运行结果如下: x=3.600000,i=3x=3.600000,i=3计算机科学学院计算机科学学院4.4.自增、自减运算符自增、自减运算符(+

45、(+、- - -) ) 作用是使变量的值增作用是使变量的值增1 1或减或减1 1,如:,如: i i,-i -i (在使用(在使用i i之前,先使之前,先使i i的值加(减)的值加(减)1 1) i i,i- i- (在使用(在使用i i之后,使之后,使i i的值加(减)的值加(减)l l)若若 i=3i=3;j ji i; i i的值先变成的值先变成4 4,再赋给,再赋给j,jj,j的值为的值为4 4j=ij=i; 先将先将i i的值的值3 3赋给赋给j,jj,j的值为的值为3 3,然后,然后i i 变为变为4 4注意注意(1)(1)自增运算符自增运算符(+),(+),自减运算符自减运算符(

46、-),(-),只能用于变量,而不能只能用于变量,而不能用于常量或表达式,如用于常量或表达式,如5 5或或(a(ab)b)都是不合法的。都是不合法的。(2)(2)十十和十十和-的结合方向是的结合方向是“自右至左自右至左” -i+-i+相当于相当于 - -(i+i+)计算机科学学院计算机科学学院5.5.有关表达式使用中的问题说明有关表达式使用中的问题说明(1 1)在表达式中包含自加或自减运算时,很容易出错)在表达式中包含自加或自减运算时,很容易出错。 如:如: (i+i+)+ +(i+i+)+ +(i+i+)(2 2)C C语言中有的运算符为一个字符,有的运算符由两个字符组语言中有的运算符为一个字

47、符,有的运算符由两个字符组成,成,C C编译在处理时尽可能多地自左而右将若干个字符组成一个运编译在处理时尽可能多地自左而右将若干个字符组成一个运算符,如算符,如i ij j,将解释为(,将解释为(i i)j j,而不是,而不是i+i+(j j)。)。(3 3)C C语言中类似上述这样的问题还有一些。例如,在调用函数时,语言中类似上述这样的问题还有一些。例如,在调用函数时,实参数的求值顺序,实参数的求值顺序,C C标准并无统一规定。标准并无统一规定。如如i i的初值为的初值为3 3如果有下面的函数调用:如果有下面的函数调用: printf(printf(d,d,d,i,id,i,i)在多数系统中

48、对函数参数的求值顺序是自右而左在多数系统中对函数参数的求值顺序是自右而左返回返回计算机科学学院计算机科学学院2.9 2.9 赋值运算符和赋值表达式赋值运算符和赋值表达式1.1.赋值运算符(赋值运算符(= =)作用是将一个数据赋给一个变量作用是将一个数据赋给一个变量 a=3a=32.2.类型转换类型转换将实型数据将实型数据( (包括单、双精度包括单、双精度) )赋给整型变量时赋给整型变量时, ,舍弃实数的小数部分。舍弃实数的小数部分。将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中到变量中将一个将一个doubledo

49、uble型数据赋给一个型数据赋给一个floatfloat变量时,截取其前面的变量时,截取其前面的7 7位有效数位有效数字,存放到字,存放到floatfloat变量的存储单元中变量的存储单元中(32(32位位) )。但应注意数值范围不能。但应注意数值范围不能溢出。溢出。计算机科学学院计算机科学学院字符型数据赋给整型变量时,有两种情况:字符型数据赋给整型变量时,有两种情况:(1 1)如果所用系统将字符处理为无符号的量或用)如果所用系统将字符处理为无符号的量或用unsigned charunsigned char型变量赋值,则将字符的型变量赋值,则将字符的8 8位放到整型变量低位,高位放到整型变量低

50、位,高8 8位补零。位补零。(2 2)如果所用系统将字符处理为带符号的量,若字符最高位为)如果所用系统将字符处理为带符号的量,若字符最高位为0 0则整型变量高则整型变量高8 8位补位补0 0;若字符最高位为;若字符最高位为1 1则高则高8 8位全补位全补1 1。这称。这称为为“符号扩展符号扩展”。1111 11101111 11101 111 1111 1111 11101 111 1111 1111 11101111 11101111 11100 000 0000 1111 11100 000 0000 1111 1110char c=376char c=376char c=376char

51、c=376计算机科学学院计算机科学学院将一个将一个intint、shortshort、longlong型数据赋给一个型数据赋给一个charchar变量时,只变量时,只将其低将其低8 8位原封不动地送到位原封不动地送到charchar型变量型变量( (即截断即截断) )。001000010010000100000001 0010000100000001 00100001int i=289int i=289char c=33char c=33 或或c=!c=!计算机科学学院计算机科学学院 将带符号的整型数据(将带符号的整型数据(intint型)赋给型)赋给1ong int1ong int型变量时。

52、要进行型变量时。要进行符号扩展,如果符号扩展,如果intint型数据为正值(符号位为型数据为正值(符号位为0 0)则)则1ong1ong、intint型变型变量的高量的高1616位补位补0 0;如;如intint型变量为负值(符号位为型变量为负值(符号位为1 1),则),则1ong1ong型变量型变量的高的高1616位补位补1 1,将整型数的,将整型数的1616位送到位送到1ong1ong型低型低1616位中,以保持数值不位中,以保持数值不改变。反之,若将一个改变。反之,若将一个1ong int1ong int型数据赋给一个型数据赋给一个intint型变量,只将型变量,只将1ong int1ong int型数据中低型数据中低1616位原封不动送到整型变量(即截断)。位原封不动送到整型变量(即截断)。00000000 00000000 00000001 1111010000000000 00000000 00000001 1111010000000001 1111010000000001 11110100int i=500int i=500long n=500long n=5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论