C语言03-OperatorsandExpressions.ppt_第1页
C语言03-OperatorsandExpressions.ppt_第2页
C语言03-OperatorsandExpressions.ppt_第3页
C语言03-OperatorsandExpressions.ppt_第4页
C语言03-OperatorsandExpressions.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

运算符与表达式,吴清锋 2007年秋,提纲,变量的定义与赋初值 运算符与表达式概述 算术运算符与算术表达式 基本算术运算符 自增、自减运算符 几点说明 赋值运算符与赋值表达式 类型转换 逗号运算符和逗号表达式 运算符小结,结束,变量的定义与赋初值,变量定义的一般形式 类型名 变量名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); ,运算符与表达式概述(1),回顾:定义了变量的类型,不但定义了变量所拥有的存储单位的大小,同时也定义了变量所能参与的运算。这些运算就是通过运算符来实现的。 C运算符范围很宽,除控制语句以外的几乎所有基本操作都由运算符表示。 C语言的一个特点:运算符丰富 运算符一般要携带若干运算对象,运算对象称为操作数。根据操作数的个数,运算符可以分为单目运算符、双目运算符和三目运算符。,常量、变量或函数调用,运算符与表达式概述(2),表达式由运算符和相应的操作数及用于描述运算先后次序的括号构成。 为了表达式的书写方便(可以少写一些括号),C引进了运算符优先级和结合方向的概念。 在表达式求值时,先按运算符的优先级别高低次序执行。 运算符的结合方向(结合性)规定了同优先级运算符相遇时候的运算次序。 C运算符有两种结合方向:自左向右结合(左结合性),即运算对象先与左面的运算符结合;自右向左结合(右结合性),即运算对象先与左面的运算符结合,返回,运算符与表达式概述(3),在学习这部分内容的时候,注意: 对于运算符要掌握适用对象、优先级(通过与其他运算符的比较来体现)和结合方向; 对于表达式,一定要注意拷问下表达式的值。,基本算术运算符,C语言中的基本算术运算符有6个: +、-(减)、*、/、%(求模)、-(取负) 除了负号运算符是单目运算符外,基本算术运算符号都是二目运算符。 %运算符的两个操作数均要求为整型或字符型数据 两个整数相除的结果亦为整数,相应小数部分将被舍弃。这样,5/3的结果为1。(但-5/3的结果是-1或-2将取决于不同的系统) 六个基本算术运算符的优先级如下: -(取负)*、/、%+、-(减) 除了负号运算符是“右结合性”外,基本算术运算符号都是“左结合性”的。,返回,自增、自减运算符,自增、自减运算符的形式是+和-,其作用分别是使其操作数的值增1或减1。 自增、自减运算符只能用于变量,而不能用于常量或表达式。例如:5+,a+,+a都是错的。 自增、自减运算符均有前置和后置两种形式,当采用前置形式时,将先对变量执行自增(减)操作再取变量值为表达式的值;而采用后置形式时,将先取变量值为表达式的值再对变量执行自增(减)操作。例子 自增、自减运算符的优先级和负号运算符相同,其结合方向也和负号运算符相同(“自右至左”),因此表达式-i+将等价于-(i+)。 自增、自减运算符常用于循环语句,指针移动中,原因是:简洁;高效。,返回,几点说明(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,几点说明(2),出现可能产生歧义的运算符组合时,C编译系统在处理时尽可能多地(自左而右)将若干字符组成一个运算符。例: i+j (i+)+j。 -i -(-i) 为了提高程序的可读性,更明确地表达程序的意图,应该注意如下几点: 适当引入括号以取消可能出现的运算符组合歧义 避免表达式和函数调用的运算结果对子表达式或函数参数求值次序的依赖性。,返回,这是一个错误的表达式,为什么?,赋值运算符与赋值表达式(1),赋值符号“=”就是赋值运算符,作用是将一个数据赋给一个变量。例;注意:如果原来a中有值,赋值后会如何? 在赋值符“=”前加上其它运算符,可以构成复合赋值符。 凡是二目运算符,都可以与赋值符一起组合成复合赋值符。目前常用的有:+=,-=,*=,/=,%=。 引进复合赋值运算符是为了使程序更简洁。但在阅读程序时要注意如何“翻译”? 赋值运算符的优先级比算术运算符低。,赋值运算符与赋值表达式(2),由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为: 变量 赋值运算符 表达式 赋值表达式的求解过程 表达式是要有值的:赋值表达式的值是被赋值的变量的最终值。 赋值运算符是“自右而左”结合的,因而下面两行等价的: a=b=5 a=(b=5) 同理,下面两行也是等价的 a+=a-=a*a a+=(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,返回,类型转换(1):混合运算,数值类型之间、数值类型和字符类型之间的数据可混合运算。运算时,不同类型数据先转换为同类型,再进行运算 类型转换符合下图 其中,横向向左的箭头表示必定的转换,纵向箭头表示当运算对象为不同类型时转换的方向。 类型转换是由系统自动进行的! 一个示例,类型转换(2):强制类型转换,强制类型转换符可以将一个表达式转换为所需类型 需要注意:在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化 强制类型转换表达式的一般形式为: (目标类型名) 表达式 强制类型转换通常用于自动类型转换不能实现目的时。 强制类型转换通常也用于保证函数调用的实参和形参类型一致(这时并不发生自动类型转换)。 强制类型转换符是“自右至左” 强制类型转换符的优先级很高(高于算术运算符),因而对整个表达式(比如算术表达式)进行类型转换时,必须将表达式用括号括起。,当x, y均为float型时,下面两行是不同的 (int)x+y (int)(x+y),当f为float型时,要使f%3合法必须使用(int)f%3这种形式,类型转换(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位。 占用同样字节数的整型相互赋值,效果是原样拷贝字节内容。,返回,逗号运算符和逗号表达式,逗号运算符,又称“顺序求值运算符”,用它可以将两个表达式连接起来。 逗号表达式的一般形式为 表达式1 , 表达式2,表达式3 逗号表达式的求值过程就是顺序求值各个表达式。 逗号表达式的值为最后一个表达式的值。 注意:前面表达式对某个值的修改,将影响后后面表达式的运算 例子:a=a*5,a*4 逗号运算符的优先级是所有运算符中最低的。所以下面两行是不同的: x=(a=3, 6*3) x=a=3, 6*3,返回,运算符小结,返回,示例:混合运算,如果有变量定义为: int i; float f; double d; long e; 则表达式 10+a+i*f-d/e 中涉及的类型转换可以如图,返回,C语言运算符的类型,算术运算符 赋值运算符 强制类型转换符 逗号运算符 关系运算符、逻辑运算符、条件运算符 下标运算符 函数调用运算符 指针运算符 分

温馨提示

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

评论

0/150

提交评论