c语言 03operators and expressions

上传人:ll****x 文档编号:243010444 上传时间:2024-09-13 格式:PPT 页数:20 大小:77KB
返回 下载 相关 举报
c语言 03operators and expressions_第1页
第1页 / 共20页
c语言 03operators and expressions_第2页
第2页 / 共20页
c语言 03operators and expressions_第3页
第3页 / 共20页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,运算符与表达式,2007年秋,1,提纲,变量的定义与赋初值,运算符与表达式概述,算术运算符与算术表达式,基本算术运算符,自增、自减运算符,几点说明,赋值运算符与赋值表达式,类型转换,逗号运算符和逗号表达式,运算符小结,结束,2,变量的定义与赋初值,变量定义的一般形式类型名 变量名1, 变量名2, ,;,变量定义的位置:,在所有函数之外,或,在块内的开头部分,程序中经常要对一些变量预先设置初值。C语言允许在定义变量的同时执行变量初始化。如,int a=3; int a, b, c=5; 这样将,使得程序更为简洁,。,返回,正确的例子:,int g;,main(),int a;,a=1;,printf(a=%dn, a);,错误的例子1:,main(),int a;,a=1;,printf(a=%dn, a);,错误的例子2:,main(),printf(,errorn);,int a;,a=1;,printf(a=%dn, a);,3,运算符与表达式概述(1),回顾:定义了变量的类型,不但定义了变量所拥有的存储单位的大小,同时也定义了变量所能参与的运算。这些运算就是通过,运算符,来实现的。,C运算符范围很宽,除,控制语句,以外的几乎所有,基本操作,都由运算符表示。,C语言的一个特点:,运算符丰富,运算符一般要携带若干运算对象,运算对象称为,操作数,。根据操作数的个数,运算符可以分为,单目运算符,、,双目运算符,和,三目运算符,。,常量、变量或函数调用,4,运算符与表达式概述(2),表达式,由运算符和相应的操作数及用于描述运算先后次序的括号构成。,为了表达式的书写方便(可以少写一些括号),C引进了运算符,优先级,和,结合方向,的概念。,在表达式求值时,先按运算符的,优先级别,高低次序执行。,运算符的结合方向(结合性)规定了,同优先级运算符,相遇时候的运算次序。,C运算符有两种结合方向:自左向右结合(左结合性),即运算对象先与左面的运算符结合;自右向左结合(右结合性),即运算对象先与左面的运算符结合,返回,5,运算符与表达式概述(3),在学习这部分内容的时候,注意:,对于运算符要掌握适用对象、优先级(通过与其他运算符的比较来体现)和结合方向;,对于表达式,一定要注意拷问下表达式的值。,6,基本算术运算符,C语言中的基本算术运算符有6个:+、-(减)、*、/、%(求模)、-(取负),除了负号运算符是单目运算符外,基本算术运算符号都是二目运算符。,%运算符的两个操作数均要求为整型或字符型数据,两个整数相除的结果亦为整数,相应小数部分将被舍弃。这样,5/3的结果为1。(但-5/3的结果是-1或-2将取决于不同的系统),六个基本算术运算符的优先级如下:-(取负),*、/、%+、-(减),除了负号运算符是“右结合性”外,基本算术运算符号都是“左结合性”的。,返回,7,自增、自减运算符,自增、自减运算符的形式是+和-,其作用分别是使其操作数的值增1或减1。,自增、自减运算符只能用于变量,而不能用于,常量或表达式,。例如:5+,a+,+a都是错的。,自增、自减运算符均有前置和后置两种形式,,当采用前置形式时,将先对变量执行自增(减)操作再取变量值为表达式的值;而采用后置形式时,将先取变量值为表达式的值再对变量执行自增(减)操作。,例子,自增、自减运算符的优先级和负号运算符相同,其结合方向也和负号运算符相同(“自右至左”),因此表达式-i+将等价于-(i+)。,自增、自减运算符常用于,循环语句,,,指针移动,中,原因是:简洁;高效。,返回,8,几点说明(1),C标准并没有具体规定表达式中的,子表达式,的求值顺序。如,下面代码在不同C编译系统中的输出可能不同:main() int i=3, j; j=(i+)+(i+)+(i+); printf(,i=%d, j=%dn, i, j);,在调用函数时,,实参,的求值顺序,C标准也没有统一的规定。如,下面代码在不同C编译系统中的输出可能不同:main() int i=3; printf(,%d, %dn, i, i+);,TC和VC的输出为i=6, j=9,多数系统输出4, 3。原因是多数系统中的参数传递顺序是从右到左的;但是VC的输出是3,3,9,几点说明(2),出现可能产生,歧义,的运算符组合时,C编译系统在处理时,尽可能多地(自左而右)将若干字符组成一个运算符,。例:i+j,(i+)+j。-i,-(-i),为了提高程序的可读性,更明确地表达程序的意图,应该注意如下几点:,适当引入括号以取消可能出现的运算符组合歧义,避免表达式和函数调用的运算结果对子表达式或函数参数求值次序的依赖性。,返回,这是一个错误的表达式,为什么?,10,赋值运算符与赋值表达式(1),赋值符号“=”就是赋值运算符,作用是将一个数据赋给一个变量。,例,;注意:如果原来a中有值,赋值后会如何?,在赋值符“=”前加上其它运算符,可以构成复合赋值符。,凡是二目运算符,都可以与赋值符一起组合成复合赋值符。目前常用的有:,+=,,,-=,,,*=,,,/=,,,%=,。,引进复合赋值运算符是为了使程序更简洁。但在阅读程序时要注意如何“翻译”?,赋值运算符的优先级比算术运算符低。,11,赋值运算符与赋值表达式(2),由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:变量 赋值运算符 表达式,赋值表达式的求解过程,表达式是要有值的:赋值表达式的值是被赋值的变量的最终值。,赋值运算符是“自右而左”结合的,因而下面两行等价的:a=b=5a=(b=5)同理,下面两行也是等价的a+=a-=a*aa+=(a-=a*a),变量的初始化,基本上相当于,一次赋值。例如,下面两行是等价的int a=3;int a; a=3;,若a=12,,则a+=a-=a*a的运算流程如下:,首先计算a=a-(a*a) ,得到a=-132,然后计算a=a+(a-=a*a),得到a=-264,返回,12,类型转换(1):混合运算,数值类型之间、数值类型和字符类型之间的数据可混合运算。运算时,不同类型数据先转换为同类型,再进行运算,类型转换符合下图其中,,横向向左的箭头表示必定的转换,,,纵向箭头表示当运算对象为不同类型时转换的方向,。,类型转换是由系统自动进行的!,一个示例,double,float,long,unsigned,int,char, short,高,低,13,类型转换(2):强制类型转换,强制类型转换符可以将一个表达式转换为所需类型,需要注意,:在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化,强制类型转换表达式的一般形式为:,(,目标类型名,),表达式,强制类型转换通常用于自动类型转换不能实现目的时。,强制类型转换通常也用于保证函数调用的实参和形参类型一致(这时并不发生自动类型转换)。,强制类型转换符是“,自右至左,”,强制类型转换符的,优先级很高,(高于算术运算符),因而对整个表达式(比如算术表达式)进行类型转换时,必须将表达式用括号括起。,当x, y均为float型时,下面两行是不同的(int)x+y(int)(x+y),当f为float型时,要使f%3合法必须使用(int)f%3这种形式,14,类型转换(3):赋值,当赋值运算符两侧的类型不一致但都是字符或数值型时,赋值时要进行类型转换。,int=float、double:舍弃实数的小数部分。,float、double=int:数值不变,补足有效数字,以浮点形式存储。,float=double:数值范围不溢出时截取前7位有效数字,否则出错。,double=float:数值不变,有效位数扩展。,int=unsigned char:以char的8位为int的低8位,高8位补0。,int=char:以char的8位为int的低8位,char的符号位扩展为高8位。,char=int、short或long:取其低8位。,long=int:效果类似int=char。,long=unsigned int:效果类似int=unsigned char。,int=long:取其低16位。,占用同样字节数的整型相互赋值,效果是原样拷贝字节内容。,返回,15,逗号运算符和逗号表达式,逗号运算符,又称“顺序求值运算符”,用它可以将两个表达式连接起来。,逗号表达式的一般形式为表达式1 , 表达式2,表达式3,逗号表达式的求值过程就是,顺序求值各个表达式,。,逗号表达式的值为最后一个表达式的值。,注意:前面表达式对某个值的修改,将影响后后面表达式的运算,例子:a=a*5,a*4,逗号运算符的优先级是所有运算符中最低的。所以下面两行是,不同的,:x=(a=3, 6*3)x=a=3, 6*3,返回,16,运算符小结,返回,高,低,17,示例:混合运算,如果有变量定义为:int i; float f; double d; long e;则表达式10+,a,+i*f-d/e中涉及的类型转换可以如图,返回,int,char,int,float,double,long,int,double,double,double,double,int,double,double,double,double,+,+,*,-,/,18,C语言运算符的类型,算术运算符,赋值运算符,强制类型转换符,逗号运算符,关系运算符、逻辑运算符、条件运算符,下标运算符,函数调用运算符,指针运算符,分量运算符,位运算符,求字节数运算符(sizeof),返回,19,示例:自增、自减运算符,情景一:,若有i=3,则执行j=+i运算后j=4,i=4;而执行j=i+运算后j=3,i=4。,情景二:,若有i=3,则执行printf(“%d”,+i);后,输出4;而执行printf(“%d”, i+);后,输出3。,情景三:,若有i=3,则执行printf(“%d”,-i+);后,输出-3。,返回,20,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!