运算符与表达式课件.ppt

上传人:za****8 文档编号:14551523 上传时间:2020-07-23 格式:PPT 页数:60 大小:357.51KB
返回 下载 相关 举报
运算符与表达式课件.ppt_第1页
第1页 / 共60页
运算符与表达式课件.ppt_第2页
第2页 / 共60页
运算符与表达式课件.ppt_第3页
第3页 / 共60页
点击查看更多>>
资源描述
教学目标: 本章详细介绍了C语言提供的运算符和表达式的使用方法,要求通过本章的学习了解运算符的优先级和结合性,掌握的运算符和表达式类型及求值规则,掌握数据类型转换的方法。 教学重点: 重点掌握运算符:+,-,*,/,%,+,-, printf(“Key-in a number: “); scanf(“%d”, ,Key-in a number: 26 Value before being incremented: 26 _,26,27,Key-in a number: 26 Value before being incremented: 26 Value after being incremented: 27 _,+num; /*结果如何?*/,此时,前缀+(-)和后缀+(-)相同,作用仅是增1(减1)。,例 main() int j,k,a,b,c; j=3; k=+j; printf(“%d,%d”,k,j); j=3; k=j+; printf(“%d,%d”,k,j); j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; printf(“%d,%d,%d”,a,b,c); a=3;b=5;c=(a+)*b; printf(“%d,%d,%d”,a,b,c); ,/*相当于:j=j+1;k=j;*/,/*相当于:k=j; j=j+1;*/,/*相当于:j=j+1; printf(“%d”,j); */,/*相当于:printf(“%d”,j); j=j+1; */,/*相当于:a=a+1; c=a*b;*/,/*相当于:c=a*b ;a=a+1; */,2.算术表达式,定义:用算术运算符和圆括号将运算对象连接起来的,并且符合C语言语法规则的式子。,单个的常量和变量都是算术表达式,是最简单的算术表达式。算术表达式的值是数值型。 +a+b/5 等价于 (+a)+(b/5),例 -i+ i=3; printf(“%d”,-i+);,例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3,3. 运算符的组合问题 i+j如何解释? main() int i=3, j=5, k; k=i+j; printf(“%d,%d,%d”,i,j,k) ; ,/* i+j解释为(i+)+j*/,在表达式中出现多个字符时如何组合呢? 尽可能自左而右将若干字符组合成一个运算符, 标识符、关键字也按同样的原则进行处理。,输出:4,5,8,【例】阅读下面程序写出运行结果 include stdio.h main( ) int i, j; i=j=5; printf(i+=%d, j=%dn, i+, j); printf(+i=%d, j=%dn, +i, j); printf(i+=%d, j=%dn, i+, j); printf(+i=%d, j=%dn, +i, j); printf(i=%d, j=%dn, i, j); ,运行结果: i+=5, j=5 +i=7, j=3 i+=7, j=3 +i=9, j=1 i=9, j=1,4.算术运算中的类型转换 不同类型数据进行运算时, 要进行类型转换。类型转换有自动转换(又称隐含转换)与强制转换两种方式。 (1)自动类型转换 自动转换由系统自动完成, 适用于整型、实型和字符型数据的混合运算。 转换的规则是: 精度从低到高的顺序是,例如:计算表达式3.14+18/4+a 的值,3.14 + 18 / 4 + a,(1)计算18/4,结果4,int型,(2)先将3.14转换成double型,再将4转换成 double型4.0,计算3.144.0,结果是7.14(double),(3)先将a转换成int型值为97,再将97转换成double型97.0,计算7.1497.0,结果是104.14,double型,4,104.14,7.14,(2) 强制类型转换 格式: (类型名) (表达式) /*(类型名)是类型转换运算符,单目*/ 功能:将表达式的值类型强制转换成类型名指定的类型。 如: ,(int)(x+y),(int)x + y,注意:类型名两侧的()不能省略,将表达式x+y的值强制转换成整型,将表达式x的值强制转换成整型,(double)(3/2) (int)3.6,说明:强制转换得到所需类型的中间变量,原变量类型不变,当低精度强制转换成高精度,易造成精度损失 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 输出:x=3.600000,i=3,2.2.3 关系运算符与关系表达式,1 关系运算符,关系运算符的优先级低于算术运算,高于赋值运算符。,种类:、 = 、 =、 != 均双目 结合型:左结合 优先级 、 = 高于 =、 !=,例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc),例如: 32 b*b-4*a*c=1e-6 x=y a%b!=0,2 关系表达式,关系表达式的值:是逻辑值“真”或“假”,用1和0表示。,设有定义 int a=3,b=2,c=1; 则: ab 的值为1 c=a 的值为0,【例题】计算表达式3=4+12!=5的值并给出求解过程,3 = 4 + 1 2 != 5,5,1,0,1,注意 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为0 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,2.2.4逻辑运算符与逻辑表达式,逻辑运算符有:,!(非,单目,右结合)、 (m=ab) ,运行结果:m=0 n=1,【例题2】写出表达式53 a+=2 ; (2) float x=1.2, y=2.1; y*=x+3.4 ; (3) int a=1, b=2; b/=a+=1;,变量 OP= 表达式 等价于: 变量 = 变量 OP (表达式),【例题】已知int a=12;计算表达式a+=a-=a*a 的值,a += a -= a * a,144,aa144即a-132,a-132 即a=-264,main() int a=12; printf(%d %dn, a ,a+=a-=a*a); ,2.2.7 逗号表达式,逗号运算符: , 双目运算 左结合 逗号表达式一般形式如下: 表达式1,表达式2,表达式3,表达式n 用途:用于将多个表达式连接成一个表达式。常用于for循环语句中 运算过程:从左向右依次计算每个表达式的值,逗号表达式的值就是最右边表达式的值,逗号表达式值的类型就是最右边表达式的值的类型。 优先级:最低 结合:左结合(自左向右)。 如表达式x=a=3, 6*x, 6*a, a+x的值为_。,6,【例题】 main() int a,x; printf(“%d %d %dn”,a,x,(x=a=3,+a,a+=4,a5); printf(%d %d %dn,a,x,x=(a=3,+a,a+=4,a5); ,运行结果: 8 3 1 8 1 1,2.2.8条件运算符及条件表达式,条件表达式一般形式: 表达式 1? 表达式 2: 表达式 3,条件运算符 ? :,求解过程如右图。 表达式值的类型: 取表达式2和3中值的类型中的精度较高者。,其中,表达式1一般为关系表达式或逻辑表达式,表达式2和表达式3一般为同类型表达式。,三目运算符,图 条件表达式的求解过程,注意:条表达式2和表达式3只有一个被求解。,例如:32?1:1.5 的值为_,类型为_。 ,优先级:条件运算为倒数第 3 级, 高于赋值运算, 低于逻辑运算。 结合性:右结合 条件运算符可嵌套使用,如 107 ? 2:3) /*表达式的值为3*/,例1 编写程序计算两个整数a和b的最大值,main() int a=3,b=4,max; max = ab?a:b; printf(“max(%d,%d)=%d”,a,b,max); ,运行结果: max(3,4)=4,例2用条件运算符求 a+|b|,main() int a=3,b=-4; printf(“%d+|%d|=%dn”,a,b,b0?a+b:a-b); ,运行结果: 3+|-4|=7,【例3】读程序写结果 main() int a=1,b=2,c=3,d=4,m,n,e; m=1; n=1; printf(m=%d n=%d e=%dn, m, n, (a+d=b+c)?(m=ab):(n=cd); m=1; n=1; printf(m=%d n=%d e=%dn, m, n, (a+d!=b+c)?(m=ab):(n=cd); ,运行结果: m=0 n=1 e=0 m=1 n=0 e=0,2.2.9 其它运算,1. 取地址运算 运算符: p= 则输出为:,3. 求字节数运算 运算符: sizeof单目运算 右结合 优先级次高 书写形式:sizeof(类型名或变量或表达式) 操作数可以是类型名, 也可以是变量、表达式, 用以 求得相应类型或数据所占的字节数。 ,10,10,10 /* a、*p和* printf(%dn,sizeof(int); printf(%dn,sizeof(long); printf(%dn,sizeof(float); printf(%dn,sizeof(double); ,4. 括号运算 在其它语言中括号是某些语法成分的描述方式, C语言将括号亦作为运算处理。 (1) 圆括号运算( ): 用于改变运算的优先级, 还用于将函数的参数与函数名相分离。 (2) 中括号运算 : 又称下标运算, 用来得到数组的分量下标变量。 括号运算的优先级处于最高一级。,作业: P73 一、4,5,7,8,9,10,12,13 二、程序填空题 1 三、程序改错题 1 四、程序分析题 1 实验2 写出测试程序的输出结果 实验课前检查,书后习题:P73 一、4,5,7,8,9,10,12,13,4.设m,n,a,b,c,d的值均为0,执行 (m=a=b)|(n=c=d)后,m,n的值是( ) 0,0 0,1 1,0 1,1 5.设有定义:int a=5,b; 执行下列语句后,b的值不为2的是( ) b=a/2 b=6-(-a) b=a%2 b=a3?2:4 7.设有定义:int x,a,b;则执行完语句 x=(a=3,b=a-);后,x,a,b的值依次是( ) 3,3,2 3,2,2 3,2,3 2,3,2 8.若有定义:char ch=A;则表达式ch=(ch=Aa=2+(c+=c+,c+8,+c),则 a=( ) A.13 B. 14 C. 15 D.16 5.表达式 (int)5.7*2.0的值为( ) (A) 11.4 (B) 10 (C)10.0 (D) 11,二、程序填空题(在下列程序的 处填上正确的内容,使程序完整) 1.下列程序的功能是把从键盘上输入的整数取绝对值后输出。 main() int x; scanf(%d, ,三、程序改错题(下列每小题有一个错误,找出并改正) 1. main() int a,b; float x,y,z; scanf(%f%f%f, ,四、程序分析题 1.下面程序的输出结果是 main() int x=3,y=3,z=1; printf(%d %dn,(+x,y+),z+2); ,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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