C语言程序设计  教学课件 ppt 作者 刘明才 第3章 运算符和表达式

上传人:E**** 文档编号:89381748 上传时间:2019-05-24 格式:PPT 页数:37 大小:417KB
返回 下载 相关 举报
C语言程序设计  教学课件 ppt 作者 刘明才 第3章  运算符和表达式_第1页
第1页 / 共37页
C语言程序设计  教学课件 ppt 作者 刘明才 第3章  运算符和表达式_第2页
第2页 / 共37页
C语言程序设计  教学课件 ppt 作者 刘明才 第3章  运算符和表达式_第3页
第3页 / 共37页
C语言程序设计  教学课件 ppt 作者 刘明才 第3章  运算符和表达式_第4页
第4页 / 共37页
C语言程序设计  教学课件 ppt 作者 刘明才 第3章  运算符和表达式_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《C语言程序设计  教学课件 ppt 作者 刘明才 第3章 运算符和表达式》由会员分享,可在线阅读,更多相关《C语言程序设计  教学课件 ppt 作者 刘明才 第3章 运算符和表达式(37页珍藏版)》请在金锄头文库上搜索。

1、第1页 共37页,第3章 运算符和表达式,算术运算符和算术表达式 自增、自减运算 位运算 赋值运算 关系表达式与逻辑表达式 条件表达式与逗号表达式,第2页 共37页,3.1 算术运算符和算术表达式,单目运算符 有一个运算对象的运算符是单目运算符(unary operator),C语言的单目算术运算符有两个:+、-。 “+”作为单目运算符(取正值运算符),其作用是取其右边的数或变量的正值。例如:+8或+x。 “-”作为单目运算符(取负值运算符),其作用是取其右边的数或变量的负值(相反数)。例如:-18或-y。,第3页 共37页,双目运算符 +、-、*、/与数学运算相似,先乘除后加减,即按运算符优

2、先级进行计算。结合性均为从左到右。这里需要说明的是/(除法)运算符的运算对象若都是整型数据时,结果也是整数,舍去小数部分。 例如:1.0/2为0.5,1/2为0,5/2为2,-7/4为-1。 根据运算符“/”的整除特性,可以对整型量作一些特殊的有效处理。例如,若整型变量n是一个两位数,求n的十位上的数字(digit),可以写作“n/10”,因整数除法的特性,结果只取整数部分,如n=21,则“n/10”为2,即求得了n的十位上的数字。,第4页 共37页,取余运算符“%”是求整数除法的余数,余数符号与左边的运算对象符号相同。需要说明的是取余运算符“%”不能用于实型数据的运算。 例如:3%4为3,6

3、%3为0,-9%5为-4,9%-5为4。 根据运算符“%”的取余特性,可以对整型量作一些特殊的有效处理。例如,若求整型变量n的个位上的数字,可以写作“n%10”,如n=123,则“n%10”为3。,第5页 共37页,字符类型的数据是以该字符的ASCII码参加运算。 例如:a+3为100(字符a的ASCII码为97)。 设chl,ch2为字符型,i为整型,则chl-ch2的值为字符chl与ch2的ASCII码的差值。当chl为09的字符时,i=ch1-0把数字字符转化为数字;如i=9-0则把字符9转换为数字9。 当chl为az的字符时,ch2=ch1-(a-A)把小写字母转换成了大写字母。参考附

4、录B的ASCII字符编码表,可以看到a的ASCII码为97,A的ASCII码为65,所以a-A=32,即任何一个小写字母与它对应的大写字母之间ASCII码的差为32,那么,ch2经过运算后,就是chl对应的大写字母了。同理,要把大写字母转换为小写字母也可用类似的算法,读者可以自己写出。,第6页 共37页,算术运算中的类型转换 自动转换 C语言中,允许不同类型数据进行混合运算,包括整型、实型、字符型数据都可以进行混合运算。在表达式的计算过程中,两个参加运算的操作数(operand),在计算前自动进行类型转换(type conversion)。不同类型数据运算自动转换规则,如图所示。,第7页 共3

5、7页,不同类型数据运算自动转换规则,第8页 共37页,强制类型转换 除了由系统自动实现数据类型转换外,还可以在程序中进行强制类型转换,将一个表达式转换成所需类型。其表示形式是:(类型标识符)表达式 假设有int i=3,j=2; 则i/j只能做整除运算,得到整数部分1,如要保留小数部分,需做实数除法,可以写作“(double)i/j”,其运算步骤是先将i值强制转换为double类型,再相除,其结果为1.5。注意“(double)i/j”与“(double)(i/j)”的区别,后者先完成“i/j”整除,再将结果转换成double型,即值为1.0,仍得不到真正的小数部分。,第9页 共37页,3.2

6、 自增、自减运算,运算符 自增运算符(increment operator):+ 自减运算符(decrement operator):- 自增、自减运算符只有一个运算对象。,第10页 共37页,使用格式 前缀格式:运算符 变量 后缀格式:变量 运算符 两种格式的区别:在前缀格式中,先使变量加(减)1,再使用变量的值;在后缀格式中,先使用变量的原值,再使变量加(减)1。例如: +i, -i是在使用i之前,先使i的值加(减)1; i+, i-是在使用i之后,使i的值加(减)1。 粗略地看,+i和i+的作用相当于i=i+1。但+i和i+不同之处在于+i是先执行i=i+1后,再使用i的值;而i+是先使

7、用i的值后,再执行i=i+1。,第11页 共37页,若i的原值为3,则下面两个赋值语句的作用是不同的。 (1)j=+i;是i的值先变为4,再赋给j,j的值为4。 (2)j=i+;是先将i的值3赋给j,j的值为3,然后i变为4。 又如:int i=3; printf(“%d“,+i); 则输出4; 若改为:int i=3; printf(“%d“,i+); 则输出3。,第12页 共37页,优先级与结合性 由附录C可以看出,自增、自减运算符的优先级与单目算术运算符(、-)优先级相同,比双目算术运算符(*、/、%、-)的优先级高。 例如:3+a+,处理时先计算优先级高的“+”,再进行“+”运算,该表

8、达式相当于“3+(a+)”。如果a的初始值为6,那么,表达式“(a+)”的值为6,再进行加法运算,得到整个表达式的值是9,然后,a的值再自增1变成7。,第13页 共37页,例如:+x*y-z,假设x、y、z的值分别为3、4、5。计算时先对x进行自增运算,x变成4,此时表达式“+x”的值也为4;然后进行乘法运算,表达式“+x”与变量y相乘得到16;最后,进行减法运算,得到整个表达式的值11。 自增、自减运算符具有右结合性。 例如:-a+,取负值运算符和自增运算符的优先级相同,这时按运算符的结合性进行处理。取负值运算符和自增运算符都具有右结合性,因此,变量a先与+结合,再与取负值运算符结合。该表达

9、式相当于:-(a+)。如果a的初始值为6,那么整个式子的值为-6,a的值变为7。,第14页 共37页,使用自增、自减运算符的注意事项 对于形如a+b的表达式,C语言的编译系统在处理时尽可能多的自左至右将若干个字符结合成一个运算符。因此,a+b被理解为(a+)+b,而不是a+(+b)。为避免产生误解,建议将此表达式写成(a+)+b的形式。 在一个表达式中,出现对同一个变量的多次自增、自减运算时,有的编译系统按从左到右的次序处理,而有些系统一次性地处理这些运算(如Turbo C 2.0系统)。 在调用函数时,对于实参的求值顺序,ANSI C也没有规定。有的系统按从左到右的顺序求值,有的系统按从右到

10、左的顺序求值。 编写程序时,应注意把可读性放在第一位,避免编写晦涩难懂、容易引起误解的程序。尤其在使用自增、自减运算符时,尽量不要使用容易产生误解的表达方式。,第15页 共37页,3.3 位运算,位运算符的种类 C语言共有6种位运算符: & 按位与运算符 | 按位或运算符 按位异或运算符 二进制右移运算符 按位取反运算符,第16页 共37页,按位与运算(&) 运算符&的作用是把参加运算的两个数,按对应的二进制位分别进行“与”运算,当两个相应的位都为1时,该位的结果为1,否则为0。 按位或运算(|) 按位“或”的运算规则是:参加运算的两个数中,只要两个相应的二进制位中有一个为1,该位的运算结果即

11、为1;只有当两个相应位的数都为0时,该位的运算结果才为0。 按位异或运算() 异或运算的规则是:参加运算的两个数中相对应的二进制位上,若数相同,则该位的结果为0;数不同,则该位的结果为1。,第17页 共37页,按位取反运算() 运算符是位运算中唯一的一个单目运算符,运算对象应置于运算符的右边。其运算功能是把运算对象的内容按位取反:即,使每一位上的0变1;1变0。 左移运算() 右移运算符的使用方法与左移运算符一样,所不同的是移位方向相反。右移时,右端(低位)移出的二进制数舍弃;左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1。这是因为负数在机器内均用

12、补码表示所至。,第18页 共37页,位数不同的数之间的运算规则 综上所述,位运算的对象可以是整型(long int或int)和字符型(char)数据。当两个数类型不同时位数也会不同。遇到这种情况,系统将自动进行如下处理: 先将两个数右端对齐。 再将位数短的一个数往高位扩充,即无符号数和正整数左侧用0补全;负数左侧用1补全;然后对位数相等的这两个数,按位进行位运算。,第19页 共37页,3.4 赋值运算,赋值表达式 在C语言中,“=”符号称为赋值运算符(assignment operator),由赋值运算符组成的表达式称为赋值表达式(assignment expression),它的形式如下:变

13、量名=表达式 赋值运算符的左边必须是变量(variable),右边必须是C语言的合法的表达式。赋值表达式的功能是先计算表达式的值,再将计算结果送给变量。赋值表达式的值就是赋给左边变量的值。 赋值运算符的优先级比算术运算符低,结合性“从右到左”。,第20页 共37页,赋值语句 在C语言中,任何一个表达式在末尾加上分号(;)就构成了一个语句(statement)。 赋值语句的形式为:变量名=表达式; 赋值表达式后加分号即为赋值语句,赋值语句执行赋值操作。 例如:赋值语句“y=3+2*3.14159;”的执行步骤是先计算“=”右边的表达式的值,然后赋给左边变量。 例如:赋值语句“a=b=c=l;”的

14、执行步骤是根据“=”运算符的右结合性,先执行赋值表达式“c=l”,且表达式值也为 1;然后执行赋值表达式“b=l”,且表达式值也为1;最后执行赋值表达式“a=1”;最终a、b、c均被赋值1。,第21页 共37页,赋值时数据类型的转换 在赋值语句中,左边变量和右边表达式的类型不同时,系统会自动完成类型转换,将表达式的值转换为与左边变量相同类型的数据,再赋值。不同类型数据的赋值转换规则,如表所示。,第22页 共37页,不同类型数据的赋值转换规则,第23页 共37页,复合赋值运算 C语言的双目运算符与赋值运算符的合成或简化,称为复合赋值运算符。C语言规定可以使用10种复合赋值运算符。即:+= 、-=

15、 、*= 、/= 、%= 、= 、&= 、= 、|= 复合赋值运算符的优先级与结合性与“=”相同。 C语言采用这种复合运算符,一是为了简化程序,使程序简练;二是为了提高编译效率。复合赋值运算可以简化程序,但降低了程序的可读性,且容易导致错误。,第24页 共37页,复合赋值运算构成的表达式在计算时,先把左边变量的当前值与右边整个表达式的值进行相应的运算,然后把运算的结果赋给左边的变量,并且整个复合赋值表达式的值就是赋给左边变量的值。例如: a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8) x/=2*y-10 等价于 x=x/(2*y-10) a&=b 等价于 a=a&b,第

16、25页 共37页,关系运算符 逻辑运算符,第26页 共37页,3.5.1 关系运算符,C语言中的关系运算符 C语言提供如下6种关系运算符(relational operator): (大于) = (大于等于) (小于) = (小于或等于) = (等于) != (不等于),第27页 共37页,运算优先级与结合性 在关系运算符中,“ 、= 、 、=”这4种运算的优先级相同,“= 、!=”这2种运算的优先级相同,且前4种优先级高于后2种。 与其他运算符比较,比算术运算符的优先级低、比赋值运算符的优先级高(参见附录C)。 关系运算符的结合性为“自左向右”。,第28页 共37页,关系表达式 用关系运算符将两个表达式连接起来的式子,称为关系表达式。例如,下面都是合法的关系表达式: ab, a+bb+c, (a=3)(b=5), ab)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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