C语言运算符优先级ppt课件_第1页
C语言运算符优先级ppt课件_第2页
C语言运算符优先级ppt课件_第3页
C语言运算符优先级ppt课件_第4页
C语言运算符优先级ppt课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计根底C言语东北大学高级言语程序设计课程组课程网站:/cxsj计算机及程序设计概述运算符与表达式 程序设计基础(C语言) n条件运算符:?: n逗号运算符:, n指针运算符:*,& n强迫类型转换运算符:type n分量运算符:和 n下标运算符: n函数调用运算符:( )程序设计基础(C语言) n特别地:一个常量、一个变量、一个函数都可以看成是一个表达式n表达式的分类n按照运算符与运算对象的关系 n单目表达式 n双目表达式n三目表达式程序设计基础(C语言) n算术表达式,例:3+4*5n赋值表达式,例:a=3n关系表达式,例:5bn逻辑表达式,例:35&a=bn条件表达式,

2、例:ab?a:bn逗号表达式,例:a=3,b=4,c=5n指针表达式,例:p-2,&a程序设计基础(C语言) a=2; float b=4.5;表达式 2*a+b 的结果为8.5n优先给与结合性n提示n两个整数相除其结果仍为整数即舍去小数部分n例如:13/10的结果为1n“%为求余运算符,参与运算的两个数均为整数n例如:10%31 -10%3-1 n除以0在计算机系统中是没有意义的n用括号可以改动表达式的运算顺序程序设计基础(C语言) int b=7;float a=2.5,c=4.7; n表达式a+intb/3*inta+c/2%4的值?n例2:tddbfa2412程序设计基础(C语言) +

3、/-运算符n+a,-a前缀运算:先进展增量运算后运用na+, a-后缀运算:先运用后进展增量运算n提示:n增和自减只能作用于变量,不允许对常量、表达式或其它进展操作n当自增/自减变量值本身就单独构成一条语句时,前缀和后缀的效果是一样的n对于“+和“-的运用要防止二义性程序设计基础(C语言) ,y=6*/ny=x+;/*先执行y=x,再计算x=x+1,结果y=5,x=6*/n问题:如何了解A+B ?nC规定:自左向右取尽能够多的符号组成运算符程序设计基础(C语言) x+。 y=25,x=7*/ny=+x*+x;/*先进展两次x自增,使x的值为7,再进展相乘运算。y=49,x=7*/程序设计基础(

4、C语言) n例nint a=2,float b=5.2,c; c=a*b;n赋值运算符具有右结合性n例如:a=b=3*5;/*先计算3*5,后将15赋给b,再将b的值15赋给a*/程序设计基础(C语言) n方式:变量名 表达式 n例: x%=y/3;/*x=x%y/3*/n a*=b+c /* a=a*(b+c)*/n留意:“a*=b+c与“a=a*b+c是不等价的 n 提示n“=不是数学中的“等号,它表示一个动作,右侧的值送与左侧的变量中左侧只允许是变量,不能是表达式或其他n赋值运算符两侧的类型要求一致,否那么要进展类型转换n赋值运算符=,相等运算符= =,和普通习惯有所不同程序设计基础(C

5、语言) int a=2; float b=3.4; ab、a+bb,abb的结果分别是多少?0、1、0n提示n进展关系运算时,先计算表达式的值,然后再进展关系比较运算n例如:int a=1,b=2,c=3; 1a+b3*c 的结果为0 /*39关系不成立*/ 2(a+=b)(b*=11%c)结果值为1 n /*34关系成立 */程序设计基础(C语言) n例如:设的取值范围为“-1010时,不能写成“-10=x=10,应写成“-10=x & x=10 为什么?程序设计基础(C语言) 衔接的表达式构成n方式: OP n表达式可以是常量、变量、或其他表达式n其结果为整数值n0 逻辑假 或1逻辑真n优

6、先级n“!最高,“&次之,“|最低n逻辑运算优先级低于一切关系运算n“!优先级高于一切算术运算单目运算n结合性n& 、| 自左向右 例如:ab&bdn! 自右向左 例如: !a 程序设计基础(C语言) a b !a a&b a|b 0 0 1 0 0 0 非非0 1 0 1非非0 0 0 0 1非非0 非非0 0 1 1程序设计基础(C语言) a=3,b=1, x=2, y=0; 那么那么(y|b) & (y|a) 的运算结果为的运算结果为1。 问题:问题: 1 y|b & y|a 的运算结果是多少?的运算结果是多少? 2两个表达式在运算次序能否一致?两个表达式在运算次序能否一致?程序设计基础

7、(C语言) ?:n条件运算符的“?个“:总是成对出现n表达式可以是任何类型,结果也可以是任何类型n运算过程n计算表达式1的值n为真,计算表达式2的值,并将表达式2的值作为整个条件表达式的结果,不再计算表达式3的值n为假,计算表达式3的值,并将表达式3的值作为整个条件表达式的结果,不计算表达式2的值程序设计基础(C语言) xy?x:zw?z:w 等同于xy?x:zw?z:w n三个运算对象的类型可以不一样n例如:x?a:0.5程序设计基础(C语言) int x=10,y=9; int a,b,c; a=-x=y+?x:-y; b=x+; c=y;执行上述程序段后执行上述程序段后a,b,c的结果是

8、?的结果是?分别为分别为8,8,10程序设计基础(C语言) x,a;n表达式x=(a=4,6*2)的x值?n表达式x=a=4,6*2的x值?x为为12x为为4程序设计基础(C语言) n例如:n 设:int a=3;float b=3.0;char c=3;n 那么表达式(a*c+b)/4+intb%2的结果?n进展混合运算的首要的问题是对参与运算的数据进展类型转换n类型转换n由一种数据类型到另一种数据类型的转换被称为类型转换程序设计基础(C语言) n“类型提升 :低类型向高类型转换n例如:1.5+2*a-1.2345678n /*运算次序为:n 2*a:先将a转换成整型数97,得乘积194n

9、1.5+194:1.5和194都转换成double型,和为95.5n 195.5-1.2345678:1.2345678本身应是double型的,所以最后结果也为double型 */程序设计基础(C语言) float 低低高高n“类型提升 表示图“隐式的自动类型转换程序设计基础(C语言) n在数据输出时发生的类型转换n同样要遵守“类型提升的原那么n赋值运算中最终结果的类型,以赋值运算符左边变量的类型为准n要将赋值符号右边表达式的值按左边变量的数据类型转换之后再赋值n当左边变量的类型长度较右边值的长度短时,就能够产生误差,甚至完全错误n提示n由言语的编译系统自动完成 n不会表达在言语源程序中n程

10、序设计人员必需了解这种自动转换的规那么及其结果程序设计基础(C语言) n经过用强迫类型转换运算符(type) 进展数据类型转换n其含义是将右边表达式的值转换成括号中指定的数据类型 n转换方式如下:(type) 表达式 ntype表示一个强迫数据类型名n表达式是任何一种类型的表达式 n例n(int )(x+y) /*留意与(int ) x+y不同*/程序设计基础(C语言) int a=1,b=1,c=1; a=a+b+c+; printf“%d,%d,%d,a,+b,c+; 输出结果为:输出结果为: A.4,3,2;B.3,3,2;C.3,3,3;D.3,2,2; 【例【例2】假设定义】假设定义

11、x,y为为double型,型, 那么表达式那么表达式x=1,y=x+3/2的值是?的值是? 2.0【例【例3】假设变量曾经定义并赋值,下面符合】假设变量曾经定义并赋值,下面符合C言语语法的表达式是:言语语法的表达式是: Aa:=b+1 Ba=b=c+2 Cint 18.5%3 Da=a+7=c+b 【例【例4】假设】假设a为为int类型,且值为类型,且值为3,那么执行完表达式,那么执行完表达式a+=a-=a*a后,后,a的值是多少?的值是多少? A-3 B9 C-12 D6 【例【例5】分析以下运算的结果。】分析以下运算的结果。#define printt(x,y,z) printf(x=%d, y=%d, z=%dn,x,y,z) main( ) int x,y,z; x=y=z=2; +x|+y&+z; printt(x,y,z); x=y=z=2; +x&+y|+z; printt(x,y,z) ; x=y=z=2; +x&+y&+z; printt(x,y,z); x=y=z=-2; +x|+y&+z; printt(x,y,z); x=y=z=-2; +x&+y|+z; printt(x,y,z); /* 定义宏交换定义宏交换 */* 输出:输出:x=3, y=2, z=2 */* +

温馨提示

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

评论

0/150

提交评论