第3章 数据类型运算符和表达式优秀PPT.ppt
第3章 数据类型运算符和表达式现在学习的是第1页,共50页 整型整型 基本类型基本类型 字符型字符型 单精度型单精度型 实型(浮点型)实型(浮点型)空类型空类型 双精度型双精度型数据类型数据类型 数组类型数组类型 结构体类型结构体类型 构造类型构造类型 共用体类型共用体类型 枚举类型枚举类型 指针类型指针类型 我们可以把基本数据类型按照一定的规则构造成复杂的数据类型,如基本类型的数组,含有各种类型的结构和联合,也是可以构造成指向各种数据的类型的指针。还可以构造成程序设计设计中需要用到的表、树、栈等数据结构。现在学习的是第2页,共50页3.2 常量与变量常量与变量3.2.1 常量和符号常量常量和符号常量 一个量有计算机运行过程中其值不能改变的称为常量,一个量有计算机运行过程中其值不能改变的称为常量,根据常量的类型有整型常量、实型常量、字符常量等。根据常量的类型有整型常量、实型常量、字符常量等。例:例:3 3.1415926 c例:例:#define PI 3.1415926#define n 100使用符号常量的优点:使用符号常量的优点:(1)含义清楚含义清楚(2)修改方便修改方便现在学习的是第3页,共50页3.2.2 变量变量 相对于常量来说变量在计算机运行时是可以改变的,相对于常量来说变量在计算机运行时是可以改变的,C语言的变量与常量一样有整型变量、实型变量、字符变量等。语言的变量与常量一样有整型变量、实型变量、字符变量等。由于变量的值在运行其间可以改变因此需为变量在内存中开由于变量的值在运行其间可以改变因此需为变量在内存中开辟一块存储空间存放变量的值以便变量的存取。其存储空间辟一块存储空间存放变量的值以便变量的存取。其存储空间在内存中也有相应的地址,但如果用变量的地址作为存取数在内存中也有相应的地址,但如果用变量的地址作为存取数据的依据那么存取变量时会很不方便,也不太直观。据的依据那么存取变量时会很不方便,也不太直观。C语言语言和其它高级语言一样是用标识符来表示变量。和其它高级语言一样是用标识符来表示变量。C语言的标识符规定:语言的标识符规定:是以字母或下划线开头由数字、字母和下划线组成的与保留字是以字母或下划线开头由数字、字母和下划线组成的与保留字不同的符号串。不同的符号串。现在学习的是第4页,共50页例:例:ma pi price student02 a3214 _s例:例:1ma t3.1 int double 标识允许的最大长度各版本不同,如标识允许的最大长度各版本不同,如Turbo C规定长度为规定长度为32个,即前个,即前32个有效。个有效。变量也有类型变量也有类型,变量的类型既决定了该变量的取值范围,也变量的类型既决定了该变量的取值范围,也决定了在该变量上所能执行的运算,所以决定了在该变量上所能执行的运算,所以C语言规定所有变量必语言规定所有变量必需在使用前加以说明需在使用前加以说明“先定义,后使用先定义,后使用”C语言中变量说明形式:语言中变量说明形式:类型名类型名 变量名,变量名,变量名,变量名,变量名;变量名;例:例:int lower,upper,step;例:例:float x,y;例:例:char c,a100;现在学习的是第5页,共50页使用变量与标识符应注意:使用变量与标识符应注意:1.在程序的同一作用域中,一个标识符只能说明一次。在程序的同一作用域中,一个标识符只能说明一次。2.C语言的标识符是区分大小写的语言的标识符是区分大小写的,即大小写字母为不同的符号。即大小写字母为不同的符号。3.标识符虽然不能与保留字相同但可以与标准标识相同,当标标识符虽然不能与保留字相同但可以与标准标识相同,当标准标识符重新定义后,会失去原来的含义。准标识符重新定义后,会失去原来的含义。4.虽然用标识符标识变量,但标识符与变量的意义不同虽然用标识符标识变量,但标识符与变量的意义不同:(1)标识符是描述变量名的一种手段。标识符是描述变量名的一种手段。(2)一个标识符可以标识多个变量,一个变量也可以有多个变量一个标识符可以标识多个变量,一个变量也可以有多个变量标识。标识。5.C语言中的变量与数学中的变量的意义不同:语言中的变量与数学中的变量的意义不同:(1)C语言中的变量瞬时只有一个值,而数学中的变量没有一语言中的变量瞬时只有一个值,而数学中的变量没有一定值。定值。(2)C语言中的变量的值是离散的,而数学中的变量是连续的。在语言中的变量的值是离散的,而数学中的变量是连续的。在C语言中可以有语言中可以有x=x+1,而数学中不能有而数学中不能有x=x+1。现在学习的是第6页,共50页例:例:int i;float i;例:例:char sin;例:例:int i;float i;例:例:int Ma;float ma;现在学习的是第7页,共50页3.3 整型数据整型数据 3.3.1 整型常量整型常量 虽然人们常用的是十进制数但计算机内都是二进制数的形式,虽然人们常用的是十进制数但计算机内都是二进制数的形式,八进制和十六进制是可以来表示二进制数的,因此在八进制和十六进制是可以来表示二进制数的,因此在C语言中还语言中还可以使用八进制和十六进制。可以使用八进制和十六进制。(1)十进制整数十进制整数 由正负号和由正负号和0-9十个数符组成的,逢十进一,借十个数符组成的,逢十进一,借一当十。一当十。C语言的十进制整数与普通格式相同,如:语言的十进制整数与普通格式相同,如:123 -49 7(2)八进制整数八进制整数 由正负号和由正负号和0-7八个数符组成的,逢八进一,八个数符组成的,逢八进一,借一当八。借一当八。C语言的八进制整数是以语言的八进制整数是以0开头(开头(0在正负号后)的数,在正负号后)的数,如:如:0123-012。但。但080不是八进制数不是八进制数(3)十六进制整数十六进制整数 由正负号和由正负号和0-9、a-f十六个数符组成的,逢十六个数符组成的,逢十六进一,借一当十六。十六进一,借一当十六。(0 x在正负号后在正负号后,表示十六进制数表示十六进制数)0 x123-0 xa都是十六进制数都是十六进制数现在学习的是第8页,共50页3.3.2 整型变量整型变量1.整型数据在内存中的存放形式整型数据在内存中的存放形式 无论是十进制、八进制还是十六进制数在计算机内部都是无论是十进制、八进制还是十六进制数在计算机内部都是有二进制形式存放的,它的存放形式关系到数的内部转换问题,有二进制形式存放的,它的存放形式关系到数的内部转换问题,因此要对数的内部形式有所了解。因此要对数的内部形式有所了解。一个整数在计算机内的长度不是一定的,如一个整数在计算机内的长度不是一定的,如turbo C是二个是二个字节,而字节,而VC+是四个字节,现以二个字节为例。正数的最高位表是四个字节,现以二个字节为例。正数的最高位表示正负号,用表示正,表示负。其余示正负号,用表示正,表示负。其余15位表示数,如:位表示数,如:int i=10;其内部形式为:其内部形式为:现在学习的是第9页,共50页 但负数怎样在计算机中表示是需要考虑的问题,一般微型机但负数怎样在计算机中表示是需要考虑的问题,一般微型机中以所谓补码形式的存放,补码的正数形式与原码相同,而负中以所谓补码形式的存放,补码的正数形式与原码相同,而负数的补码是该数的绝对值求补,求补的方法是求反加或者是数的补码是该数的绝对值求补,求补的方法是求反加或者是最后一个前面求反。最后一个前面求反。例:例:int i=-10;i的内部形式是:的内部形式是:现在学习的是第10页,共50页 使用补码形式表示的优点是:不管正负数,只要结果在表使用补码形式表示的优点是:不管正负数,只要结果在表示范围内直接相加即可。如:(示范围内直接相加即可。如:(-35)+48=13 11111111 11011101 +)00000000 00110000 00000000 00001101如:(如:(-63)+37=26 11111111 11000001 +)00000000 00100101 11111111 11100110现在学习的是第11页,共50页2.整型变量的分类整型变量的分类 整形变量可以分为:基本型、短整型、长整型三类,而每一整形变量可以分为:基本型、短整型、长整型三类,而每一类又可以加无符号(类又可以加无符号(unsigned)修饰)修饰(一般不用有符号一般不用有符号signed).(1)基本型基本型 用用int表示表示(2)短整型短整型 用用short int 或或short表示表示(3)长整型长整型 用用long int 或或long表示表示加上无符号修饰又有:加上无符号修饰又有:(4)无符号基本型无符号基本型 用用unsigned int表示表示(5)无符号短整型无符号短整型 用用unsigned short int 或或unsigned short表示表示(6)无符号长整型无符号长整型 用用unsigned long int 或或unsigned long表示表示现在学习的是第12页,共50页 值得指出的是对于各类型的数据的字节数值得指出的是对于各类型的数据的字节数C语言没有统一语言没有统一的标准,各版本有所不同,如的标准,各版本有所不同,如Turbo C中的中的short和和int都是都是16位,位,即二个字节,而即二个字节,而long是是32位的。位的。下面介绍下面介绍Turbo C的类型长度和取值范围。的类型长度和取值范围。类型大小取值范围unsigned short16065535short16-3276832767unsigned int16065535int16-3276832767unsigned long3204294967295long32-21474836482147483647现在学习的是第13页,共50页3.整型变量的定义整型变量的定义整型变量的定义与其它变的定义形式一样。整型变量的定义与其它变的定义形式一样。例:例:int a,b,c;unsigned int d,e long p,q4.整型数据的溢出整型数据的溢出 当当C语言的整数超出其表示范围时称为溢出,如在语言的整数超出其表示范围时称为溢出,如在Turbo C中中的整型数超过其表示范围的整型数超过其表示范围-3276832767时称为溢出。时称为溢出。例:例:#include main()int a=-26532,b=-13456;Printf(“%d”,a+b);其运行结果为:其运行结果为:25728现在学习的是第14页,共50页 那么二个负数为什么会加出来一个正数呢?这是因为那么二个负数为什么会加出来一个正数呢?这是因为-26352和和-13456的内部表示分别为:的内部表示分别为:1001100100010000和和1100101101110000其和为其和为0110010010000000,即,即25728。因此需。因此需要程序设计者注意在运算过程中不要超过其表示范围。要程序设计者注意在运算过程中不要超过其表示范围。现在学习的是第15页,共50页3.3.3 整型常量的类型整型常量的类型 一个整型常量是否有类型?回答是有类型的。那么如何确定一个整型常量是否有类型?回答是有类型的。那么如何确定其类型呢?其规则如下:其类型呢?其规则如下:(1)如其值在如其值在-3276832767默认为默认为int型,如超过型,如超过int的表示范围的表示范围而在而在-21474836482147483647则默认为则默认为long型。型。(2)Turbo C中的中的short和和int型都是型都是16位的,称其类型是等价的,位的,称其类型是等价的,它们是可以相互赋值的,其常量也是等价的。它们是可以相互赋值的,其常量也是等价的。(3)一个数后面加一个数后面加U或或u表示无符号常量表示无符号常量(4)一个数后面加一个数后面加L或或l表示长整型常量,如表示长整型常量,如20L在在Turbo C也是存也是存入四个字节。入四个字节。现在学习的是第16页,共50页3.4 浮点型数据浮点型数据 浮点型数据又称实型数,它也是计算机中常用数据形式。浮点型数据又称实型数,它也是计算机中常用数据形式。3.4.1 浮点型常量的表示方法浮点型常量的表示方法(1)普通形式普通形式 C语言的小数普通形式与普通表示的十进制数基本相同,语言的小数普通形式与普通表示的十进制数基本相同,但它允许以小数点开始或以小数点结束的小数形式。但它允许以小数点开始或以小数点结束的小数形式。例:例:345.3.1415926 0.0 1.1564(2)指数形式指数形式C语言的指数形式是由尾数语言的指数形式是由尾数e或或E和阶码组成的。和阶码组成的。例:例:2.1e05 .123E2 4096e-5因此因此C语言实型数是由整数部分(十进制串)、小数点(小数语言实型数是由整数部分(十进制串)、小数点(小数部分标志)、小数部分(十进制串)、部分标志)、小数部分(十进制串)、e或或E(阶码标志)、(阶码标志)、整数阶码(可带正负号)组成的,其中整数部分和小数部整数阶码(可带正负号)组成的,其中整数部分和小数部分是可以省略的,但不能同时省略;小数点和分是可以省略的,但不能同时省略;小数点和e或或E也不能也不能同时省略。同时省略。现在学习的是第17页,共50页例:例:345 e5 .-12 123.-e3 3.0e 2e1.0 都不是合法的都不是合法的C语言语言实数。实数。使用实数时应注意:使用实数时应注意:实数的输入形式可以是满足实数的任何形式,而在以指数实数的输入形式可以是满足实数的任何形式,而在以指数形式输出时以规范化形式输出,即小数点前面保留一位。如形式输出时以规范化形式输出,即小数点前面保留一位。如:31415926e-2 0.031415926e+3和和0.31415926e2均输出均输出3.1415926e+01现在学习的是第18页,共50页3.4.2 浮点型变量浮点型变量1.浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式 一个单精度实型数在一个单精度实型数在C语言中一般存放成四个字节,其中一个语言中一般存放成四个字节,其中一个字节存放尾数,另三个字节存放阶码,如图:字节存放尾数,另三个字节存放阶码,如图:其表示的值为:(其表示的值为:(1+2-2+2-11)X 210=1024+256+0.5=1280.5内部存放的数大多数是规格化的,即尾数的第一位为内部存放的数大多数是规格化的,即尾数的第一位为1。现在学习的是第19页,共50页2.浮点型变量的分类浮点型变量的分类 C语言中的型变量分为单精度和双精度型二类,即语言中的型变量分为单精度和双精度型二类,即float和和double二种形式,有的二种形式,有的C语言系统还提供长双精度(语言系统还提供长双精度(long double)型。型。一个四字节的数表示的绝对值最大的数是一个四字节的数表示的绝对值最大的数是 (1-2-22)X 2127,绝对值最小的数是,绝对值最小的数是1 X 2-128,即即3.4X10-38和和3.4X1038C的实型数据长度和取值范围:的实型数据长度和取值范围:类型大小|x|的取值范围float323.4X10-383.4X1038double641.7X10-3081.7X10308long double1281.2X10-49321.2X104932现在学习的是第20页,共50页Turbo C的实型数据长度和取值范围:的实型数据长度和取值范围:类型大小|x|的取值范围float323.4X10-383.4X1038double641.7X10-3081.7X10308long double641.7X10-3081.7X103083.实型数据的舍入误差实型数据的舍入误差 由于实型数存放在内存中是以一定的长度表示的,一些十由于实型数存放在内存中是以一定的长度表示的,一些十进制实数转换成二进制实数时会有一些误差,如输入进制实数转换成二进制实数时会有一些误差,如输入0.3后,输后,输出其值不一定是出其值不一定是0.3。x/3*3也不一定等于也不一定等于x,另外二个阶码相差较大的数另外二个阶码相差较大的数进行加减时需对阶,即把阶码小的转换成阶码大的值,这样有可能移出进行加减时需对阶,即把阶码小的转换成阶码大的值,这样有可能移出一定的位数影响其精度,造成一定的误差。一定的位数影响其精度,造成一定的误差。现在学习的是第21页,共50页3.5 字符型数据字符型数据 3.5.1 字符常量字符常量 C的字符变量是用单引号括起的一个字符,如的字符变量是用单引号括起的一个字符,如C,x。C语言的字符是以语言的字符是以ASCII码存放的(见附录),在码存放的(见附录),在ASCII码表中除码表中除了可见字符外还有许多控制字符,了可见字符外还有许多控制字符,C语言也提供了控制字符的语言也提供了控制字符的常量。这些特殊字符称为转义字符。它是由反斜线常量。这些特殊字符称为转义字符。它是由反斜线和一个字和一个字符组成的,它表示一个字符。符组成的,它表示一个字符。3.4.3 浮点型常量的类型浮点型常量的类型 C语言中一般将浮点常量看作是双精度来处理的语言中一般将浮点常量看作是双精度来处理的,即浮点数即浮点数2.0也也是用四个字节表示的。这样可以提高计算的精度,但增加了是用四个字节表示的。这样可以提高计算的精度,但增加了存储量和计算时间,如要将常量表示单精度数可在数的后面存储量和计算时间,如要将常量表示单精度数可在数的后面加字母加字母f或或F。现在学习的是第22页,共50页常用转义字符表:常用转义字符表:字符形式功能ASCII码值n换行10t横向跳格(一个Tab)9b退格8r回车13f换页12单个符号92单个符号39”单个符号“34ddd13位八进制数代表的符号0255xhh12位十六进制数代表的符号0255现在学习的是第23页,共50页使用转义字符应注意:使用转义字符应注意:若反斜线(若反斜线()之后不是转义字符中所列的字符()之后不是转义字符中所列的字符(n,t等),等),则反斜线不起作用,也即把则反斜线不起作用,也即把和后面的字符看成是二个字符。和后面的字符看成是二个字符。3.5.2 字符变量字符变量 字符变量是用来存放字符型数据的,每个字符变量只能存放字符变量是用来存放字符型数据的,每个字符变量只能存放一个字符一个字符例:例:char c1,c2;c1=a;c2=A;3.5.3 字符数据在内存中的存储及使用方法字符数据在内存中的存储及使用方法 字符在内存中是以字符在内存中是以ASCII码存放的,它既可以作为字符输出也可码存放的,它既可以作为字符输出也可以将其以将其ASCII码作为整数输出码作为整数输出现在学习的是第24页,共50页例:例:main()char c1,c2;c1=97;c2=122;printf(“%c%c”,c1,c2);例:例:main()char c1,c2;c1=0-48;c2=9-48;printf(“%d%d”,c1,c2);在C语言中一个字符型变量的值实质上是一个八位的整型量,因此其取值范围为-123+127,有时为了不出现负号可用unsigned修饰,如unsigned char c;此时c的取值范围为0255,但其内部形式仍然的ASCII码。现在学习的是第25页,共50页3.5.4 字符串常量字符串常量 C语言当需要表示多个字符时,用双引号把它们括起,如:语言当需要表示多个字符时,用双引号把它们括起,如:“C is good language.”“I am a student.”C语言的字符串实际上是一个字符语言的字符串实际上是一个字符“数组数组”,它将字符一个个,它将字符一个个连续存放在一起,最后存放一个连续存放在一起,最后存放一个0作为字符串结束符。作为字符串结束符。例:例:“C is good language.”存放为:存放为:使用字符或字符串应注意:0的ASCII码值为0,而空格的ASCII码值为32。3.6 变量的赋初值变量的赋初值 在C语言中允许在定义变量时同时给变量赋初值,这其定义格式为:类型名 变量项,变量项变量项;现在学习的是第26页,共50页其中变量项为变量或者为变量其中变量项为变量或者为变量=常量常量例:例:int a=3;float f=3.14;char c=a;int a,b,c=5;int a=5,b=5,c=5;使用变量赋初值应注意:使用变量赋初值应注意:除静态变量和外部变量外,变量的初值是在编译阶段完成的,它相除静态变量和外部变量外,变量的初值是在编译阶段完成的,它相当于二部分一部分分配存储单元,另一部分在运行时存放其值。当于二部分一部分分配存储单元,另一部分在运行时存放其值。例:例:int a=30;相当于:相当于:int a;a=30;现在学习的是第27页,共50页3.7 各类数值型数据的混合运算各类数值型数据的混合运算 整型、实型(单、双精度)、字符型数据间可以混合运算。整型、实型(单、双精度)、字符型数据间可以混合运算。例如:例如:10+a+1.5-8765.1234*b 高高 doublefloat long unsigned 低低 intchar,short:为必定的转换:为必定的转换 :表示当运算对象为不同表示当运算对象为不同类型时转换的方向。类型时转换的方向。C语言处理混合类型数据运算时,将低字节转换成高字节,整型转语言处理混合类型数据运算时,将低字节转换成高字节,整型转换成实型后统一类型后进行运算,其运算结果也就是最复杂的类换成实型后统一类型后进行运算,其运算结果也就是最复杂的类型。型。现在学习的是第28页,共50页3.8 算术运算符和算术表达式算术运算符和算术表达式3.8.1 运算符的简介运算符的简介1算术运算符算术运算符 */%2关系运算符关系运算符 =!=3逻辑运算符逻辑运算符 !&|4位运算符位运算符|&5赋值运算符赋值运算符 =及其扩展赋值运算符及其扩展赋值运算符6条件运算符条件运算符?:7逗号运算符逗号运算符 ,8指针运算符指针运算符 *&9求字节数运算符求字节数运算符 sizeof10强制类型转换运算符强制类型转换运算符 类型类型11分量运算符分量运算符 12下标运算符下标运算符 13其它其它 如函数调用运算符()如函数调用运算符()现在学习的是第29页,共50页3.8.2 算术运算符和算术表达式算术运算符和算术表达式 1.基本的算术运算符基本的算术运算符 (1)+表示单目运算符正和双目运算符加表示单目运算符正和双目运算符加 (2)-表示单目运算符负和双目运算符减表示单目运算符负和双目运算符减 (3)*表示乘运算符(在指针运算中可以表示为取内容)表示乘运算符(在指针运算中可以表示为取内容)(4)/表示除运算符表示除运算符 (5)%表示求余数运算符表示求余数运算符现在学习的是第30页,共50页使用算术运算符应注意:使用算术运算符应注意:(1)不同类型运算时自动进行转换不同类型运算时自动进行转换 (2)/运算符的两个操作对象均为整型(或运算符的两个操作对象均为整型(或short、char)其结果为整)其结果为整型(或型(或short、char)即为整除。当)即为整除。当5/2需要得值需要得值2.5时应写成时应写成5.0/2 (3)负数求整时应注意各版可能有所不同负数求整时应注意各版可能有所不同 (4)%运算符只能作用在整型类运算对象(运算符只能作用在整型类运算对象(char、short、int、long)现在学习的是第31页,共50页 2.算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性 C语言算术运算符的优先级:语言算术运算符的优先级:+,-(正、负)(正、负)*,/,%(乘、除、求余)(乘、除、求余)+,-(加、减)(加、减)C语言算术运算符的结合性:都是左结合的,所谓左结合当运行符语言算术运算符的结合性:都是左结合的,所谓左结合当运行符优先级相同时,其运行符是从左到右计算的。优先级相同时,其运行符是从左到右计算的。例:例:a+b+c+d现在学习的是第32页,共50页3.强制类型转换运算符强制类型转换运算符 当在运算过程中需要将一种类型转换成另一种类型时可以用强制,当在运算过程中需要将一种类型转换成另一种类型时可以用强制,其格式如下:其格式如下:(类型)表达式(类型)表达式例:例:(double)3.2 (int)(x+y)(float)(5/2)使用强制转换类型时应注意:使用强制转换类型时应注意:(1)由于强制运算符的优先级较高(仅次于括号和成员运算符),由于强制运算符的优先级较高(仅次于括号和成员运算符),故在一般表达式时转换类型时需用括号故在一般表达式时转换类型时需用括号 (2)强制不是函数不能写成:类型(表达式)强制不是函数不能写成:类型(表达式)例:例:(double)(3+5*a)例:不能写成例:不能写成int(3.5)现在学习的是第33页,共50页4自增、自减运算符自增、自减运算符 +,-运算符是自增和自减运算符,它的含义是将原变量的值加运算符是自增和自减运算符,它的含义是将原变量的值加1或减或减1后放回原变量中,其格式如下:后放回原变量中,其格式如下:+变量变量 先加先加1再取值再取值 变量变量+先取值再加先取值再加1变量变量 先减先减1再取值再取值 变量变量-先取值再减先取值再减1例:例:int x=5,y;y=x+;printf(“%d”,y);现在学习的是第34页,共50页例:例:int x=5,y;y=-x;printf(“%d”,y);使用自增、自减运算符应注意:使用自增、自减运算符应注意:(1)自增(自减)运算符只能作用于变量,不能作用于常量或其它表自增(自减)运算符只能作用于变量,不能作用于常量或其它表达式达式(2)+和和是右结合的是右结合的(3)各计算机版本处理各计算机版本处理+和和有所不同有所不同例:例:k=(i+)+(i+)+(i+)若若i的初值为的初值为3,在,在Tc,Msc系统中系统中k=9,i=6 例:例:k=(+i)+(+i)+(+i)若若i的初值为的初值为3,在,在Tc,Msc系统中系统中k=18,i=6例:例:printf(“%d,%d”,i,i+);若若i的初值为的初值为3,在,在Tc,Msc系统中结果为系统中结果为4,3现在学习的是第35页,共50页例:#defined x 5 printf(“%d”,+x);结果结果:出错出错例:例:x=5;printf(“%d”,-x+);结果结果:-5例:例:x=5;printf(“%d”,(x+)+(x+)+(x+);Turbo C结果结果:15而而 (+x)+(+x)+(+x)却为却为24 现在学习的是第36页,共50页5.有关表达式使作中的问题说明有关表达式使作中的问题说明(1)C语言的没有规定子表达式的求值顺序语言的没有规定子表达式的求值顺序例:例:a=f1()+f2()例:例:(x+)+(x+)+(x+)(2)C语言对于语言对于i+j表示为表示为(i+)+j,i+j在在Turbo C中出错中出错(3)C语言的函数求值各版本不同,可能是从左到右也可能是从右到左语言的函数求值各版本不同,可能是从左到右也可能是从右到左例:例:printf(“%d”,%d”,i,i+);自已编写程序时应注意尽量避免各种版本不同处理的情况,但参加自已编写程序时应注意尽量避免各种版本不同处理的情况,但参加省或全国统考时应注意参考书使用的版本。省或全国统考时应注意参考书使用的版本。现在学习的是第37页,共50页3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式1.赋值运算符赋值运算符 符号符号=为为C语言中的赋值运算符,其意义是将赋值语言中的赋值运算符,其意义是将赋值号后面的表达式的值存放在赋值号前面的变量中。号后面的表达式的值存放在赋值号前面的变量中。例:例:a=5使用赋值号应注意:使用赋值号应注意:(1)赋值号(赋值号(=)与数学中的等号()与数学中的等号(=)意义不同)意义不同(2)赋值号(赋值号(=)是右结合的)是右结合的例:例:x=y=z=5现在学习的是第38页,共50页2.类型转换类型转换当赋值运算时其类型不一致时:当赋值运算时其类型不一致时:(1)实型数赋给整型变量(含字符变量)时,先舍去实数的小数点部分,其实型数赋给整型变量(含字符变量)时,先舍去实数的小数点部分,其次其值如超过其表示范围时,则舍去高位。次其值如超过其表示范围时,则舍去高位。(2)将整型数赋给实型数时,按浮点格式存储,如有效数字不够时舍去存放将整型数赋给实型数时,按浮点格式存储,如有效数字不够时舍去存放实数尾数的后面位数。实数尾数的后面位数。例:例:main()long x;float a;x=214783647;a=x;printf(“%f”,a);现在学习的是第39页,共50页(3)当整型数(含字符型数)赋给整型变量,由低字节向高字节转换时当整型数(含字符型数)赋给整型变量,由低字节向高字节转换时高位部分补低字节的符号位;由高字节向低字节转换时舍去高位部分。高位部分补低字节的符号位;由高字节向低字节转换时舍去高位部分。(4)当整型数赋给实型变量,由低字节向高字节转换时数值不变,虽然其当整型数赋给实型变量,由低字节向高字节转换时数值不变,虽然其有效数位扩大但无实际意义;由高字节向低字节转换时,如不在低字节表有效数位扩大但无实际意义;由高字节向低字节转换时,如不在低字节表示范围内则出错,否则截去高字节的尾数放入低字节中去。示范围内则出错,否则截去高字节的尾数放入低字节中去。(5)整型类有符号数据赋给无符号变量和无符号数据赋给有符号变整型类有符号数据赋给无符号变量和无符号数据赋给有符号变量,长度相同直接赋值,长度不同按整型数的方法转换。量,长度相同直接赋值,长度不同按整型数的方法转换。现在学习的是第40页,共50页赋值运算符和其它运算符还可以组成复合运算符赋值运算符和其它运算符还可以组成复合运算符,如:如:x=x+2可以表示可以表示成成x+=2;使用复合运算符的优点是产生的目标代码较短,运算时间使用复合运算符的优点是产生的目标代码较短,运算时间较少。较少。C语言还允许使用的复合运算符有:语言还允许使用的复合运算符有:+=、-=、*=、/=、%=、=、&=、=、|=例:例:a+=3 即即 a=a+3 x*=y+8 即即 x=x*(y+8)x%=3 即即 x=x%3使用复合赋值运算符可以:使用复合赋值运算符可以:简化程序,使程序精炼。简化程序,使程序精炼。提高编译效率。提高编译效率。现在学习的是第41页,共50页赋值表达式 由于由于C语言的赋值号是运算符,由赋值运算符组成的就是赋值表语言的赋值号是运算符,由赋值运算符组成的就是赋值表达式,如:达式,如:=。格式:格式:意义:意义:其整个表达式的值为赋值运算符后的其整个表达式的值为赋值运算符后的的值的值例:例:a=b=c=5 a+=b=a=5;a=5+(c=6)a=(b=4)+(c=6)a+=a-=a*a现在学习的是第42页,共50页3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式 C语言提供了一些特殊的运算符语言提供了一些特殊的运算符逗号运算符,它可以用来连接逗号运算符,它可以用来连接若干表达式,如若干表达式,如x+y,5%2,y-7。格式:格式:表达式,表达式,表达式,表达式,表达式表达式意义:意义:从左到右依次求表达式的值,并把最后表达式的作为整个表达式从左到右依次求表达式的值,并把最后表达式的作为整个表达式的值。的值。使用逗号运算符应注意:使用逗号运算符应注意:逗号运算符的优先级最低和其它运算符混合运算时一般要加括号。逗号运算符的优先级最低和其它运算符混合运算时一般要加括号。例:例:a=(a,b,c,d);例:例:printf(“%d,%d”,(a,b),(c,d);例:例:a=3*5,a*4 a的值为的值为15,表达式的值为,表达式的值为60 x=(a=3,6*3)赋值表达式赋值表达式 x=a=3,6*a 逗号表达式逗号表达式现在学习的是第43页,共50页3.11 其它运算符其它运算符 1.关系运算符 C语言有关系运算符:语言有关系运算符:、=、=和和!=其优先级为大小类(其优先级为大小类(、=)高于等类()高于等类(=和和!=)C语言的关系运算符的值为语言的关系运算符的值为true和和false其内部用其内部用0和和1表示。表示。例:例:printf(“%d”,3x5);例:例:printf(%d”,3x&x3&!x+5|y例:例:if(0=9)printf(“c is digit%cn”,c)使用使用C语言的逻辑表达式时应注意:语言的逻辑表达式时应注意:(1)C语言在处理逻辑运算时非零为语言在处理逻辑运算时非零为true,零为,零为false(2)在在C语言具体实现中一般采用的是所谓短路表达式,也就是处语言具体实现中一般采用的是所谓短路表达式,也就是处理理A|B时,当时,当A的值为的值为true时,整个表达式的值为时,整个表达式的值为true而不计算表达式而不计算表达式B的值,处理的值,处理A&B时,当时,当A的值为的值为false时,整个表达式的值为时,整个表达式的值为false而不而不计算表达式计算表达式B的值。的值。例:例:x=5;x+&!(x+3)|(x=7);x+|!(x+3)&(x=7);现在学习的是第45页,共50页3.条件运算符 C语言还提供了一种所谓条件表达式,它的形式是:语言还提供了一种所谓条件表达式,它的形式是:表达式表达式1?表达式?表达式2:表达式:表达式3意义:意义:当表达式当表达式1的值为的值为true(非(非0)时,结果为表达式)时,结果为表达式2的值,否则为表的值,否则为表达式达式3的值。的值。例:例:(ab)?a:b a0?a:-a运算符?:是右结合的。运算符?:是右结合的。现在学习的是第46页,共50页4.位运算符 C语言中的位逻辑运算符有以下四个:语言中的位逻辑运算符有以下四个:&(位逻辑与)、(位逻辑与)、|(位逻辑或)、(位逻辑非)、(位逻辑或)、(位逻辑非)、(位逻辑异或)(位逻辑异或)其优先级如下:、其优先级如下:、&、|其结合性如下:右结合,其余左结合的其结合性如下:右结合,其余左结合的例:例:0 x317f&0 x6152例:例:0 x317f|0 x6152例:例:0 x317f0 x6152例:例:0 x6152例:例:(-5)使用位逻辑运算符应注意:使用位逻辑运算符应注意:其运算符只能作用在整型或字符型,其结果为原类型。其运算符只能作用在整型或字符型,其结果为原类型。例:将某几位清零、某几位求反、某几位置例:将某几位清零、某几位求反、某几位置1、加密、加密现在学习的是第47页,共50页5.移位运算符 C语言还提供了移位运算符,有语言还提供了移位运算符,有(右移右移)二个。二个。格式:格式:移位符号移位符号 移位长度移位长度例:例:83使用移运算符应注意:使用移运算符应注意:左移时右部空位补左移时右部空位补0,右移时左部空位补最高位。,右移时左部空位补最高位。这样左移相当于乘法,右移相当于除法。这样左移相当于乘法,右移相当于除法。现在学习的是第48页,共50页6.求字节数运算符 由于由于C语言的各版本有所不同,在语言的各版本有所不同,在C语言中允许使用语言中允许使用sizeof运算运算符求相应的字节数。符求相应的字节数。例:例:printf(“%d”,sizeof(int);7.其它运算符 常用于数组常用于数组()常用于函数()常用于函数和和-常用于成员常用于成员现在学习的是第49页,共50页3.12 运算符总结运算符总结 1.括号类运算符优先级相对最高,其次是单目运算符接着是算术运算符、括号类运算符优先级相对最高,其次是单目运算符接着是算术运算符、移位运算符、关系运算符、位逻辑运算符、逻辑运算符、条件运算符、移位运算符、关系运算符、位逻辑运算符、逻辑运算符、条件运算符、赋值运算符和逗号运算符。赋值运算符和逗号运算符。2