第5部分-基本运算符与表达式课件

上传人:hloru****lorv6 文档编号:241324849 上传时间:2024-06-18 格式:PPT 页数:37 大小:218.42KB
返回 下载 相关 举报
第5部分-基本运算符与表达式课件_第1页
第1页 / 共37页
第5部分-基本运算符与表达式课件_第2页
第2页 / 共37页
第5部分-基本运算符与表达式课件_第3页
第3页 / 共37页
点击查看更多>>
资源描述
学习重点学习重点1.熟悉几种常用的运算符熟悉几种常用的运算符2.掌握运算符的运算规则掌握运算符的运算规则3.掌握表达式求值掌握表达式求值 学习重点熟悉几种常用的运算符3.1 表达式表达式一、一、表达式的概念表达式的概念 表达式是由运算符连接常量、变量、函表达式是由运算符连接常量、变量、函数所组成的式子。数所组成的式子。每个表达式都有一个值每个表达式都有一个值和类型。和类型。3.1 表达式一、表达式的概念 二、二、运算符的种类:运算符的种类:据运算对象的个数分有三种:据运算对象的个数分有三种:单目、双目、三目单目、双目、三目二、运算符的种类:据运算对象的个数分有三种:C运运算算符符算术运算符:(算术运算符:(+-*/%+-+-*/%+-)关系运算符:(关系运算符:(=!=!=)逻辑运算符:(!逻辑运算符:(!&|&|)位运算符位运算符 :(:(|&|&)赋值运算符:(赋值运算符:(=及其扩展)及其扩展)条件运算符:(条件运算符:(?:?:)逗号运算符:(逗号运算符:(,)指针运算符:(指针运算符:(*&)求字节数求字节数 :(:(sizeofsizeof)强制类型转换:(类型)强制类型转换:(类型)分量运算符:(分量运算符:(.-.-)下标运算符:(下标运算符:()其它其它 :(:(()-()-)C算术运算符:(+-*/%+-)学习运算符应注意:学习运算符应注意:运算符功能运算符功能与运算量关系与运算量关系要求运算量个数要求运算量个数要求运算量类型要求运算量类型运算符优先级别运算符优先级别结合方向结合方向结果的类型结果的类型学习运算符应注意:一、算术运算符:一、算术运算符:+-*/%*/%结合方向:从左向右结合方向:从左向右优先级:优先级:-*/%*/%-+-+-说明:说明:“-”可为可为单目单目运算符时运算符时,右结合性右结合性两整数相除,结果为整数两整数相除,结果为整数%要求两侧均为整型数据要求两侧均为整型数据例例 5/2 =-5/2.0 =例例 5%2 =-5%2 =1%10 =5%1 =5.5%2例例 5/2 =2 -5/2.0=-2.5例例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()3.2 算术运算符和表达式算术运算符和表达式一、算术运算符:+-*/%例 5/2 例例1:#include”stdio.h”main()int a,b;a=20/7;b=-20/7;printf(nn%d,%dn,a,b);printf(%f,%fn,20.0/7,-20.0/7);结果:结果:2,-22.857143,-2.857143例例2:#include”stdio.h”main()int i;i=100%3;printf(%dn,i);结果:结果:1例1:结果:例2:结果:13.33.3 赋值运算符赋值运算符一、简单赋值运算符:一、简单赋值运算符:=格式:格式:变量变量=表达式表达式作用:将一个数据(常量或表达式)赋给一个变量作用:将一个数据(常量或表达式)赋给一个变量例例 a=3;a=3;d=func();d=func();c=d+2;c=d+2;3.3 赋值运算符例 a=3;说明说明:结合方向:结合方向:自右向左自右向左左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式优先级:比算术低优先级:比算术低说明:3.4 不同类型数据间的转换不同类型数据间的转换转换有两种:转换有两种:隐式:计算机自动进行的转换隐式:计算机自动进行的转换显式:强制性转换显式:强制性转换一、隐式转换(一、隐式转换(4 4种)种)v运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时v赋值转换赋值转换-把一个值赋给与其类型不同的变量时把一个值赋给与其类型不同的变量时v输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式v函数调用转换函数调用转换-实参与形参类型不一致时转换实参与形参类型不一致时转换3.4 不同类型数据间的转换隐式:计算机自动进行的转换显式(1)运算转换运算转换:不同类型数据运算时先不同类型数据运算时先自动自动转换成同一类型转换成同一类型数据类型的级别数据类型的级别floatlongintbitchar低低高高unsignedsigned(1)运算转换:不同类型数据运算时先自动转换成同一类型数转换规则:转换规则:当运算符两端的数据类型不同时,按当运算符两端的数据类型不同时,按“向高看向高看齐齐”的原则,对较低的类型提升。的原则,对较低的类型提升。10+a +i*f -d/l例例 int i;float d,f;long l;intintfloatfloatfloatfloatfloatfloat转换规则:10+a +i*f -d/(2)赋值转换:)赋值转换:自动将自动将“=”右边的类型转换右边的类型转换为左边变量的类型。为左边变量的类型。实实整,舍弃小数。整,舍弃小数。例:例:int i;i=375.986;i=375intfloat,数值不变,但以浮点形式存到变量中。数值不变,但以浮点形式存到变量中。例:例:float f;f=36;f=36.000000(2)赋值转换:自动将“=”右边的类型转换为左边变量的类型。字符字符 整型,将字符的整型,将字符的ASCII码值放到整型码值放到整型量的低八位中,高八位为量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符变量。整型赋予字符型,只把低八位赋予字符变量。char c;c=322;例:例:int i;i=A;i=65 c=66 字符 整型,将字符的ASCII码值放到整型量的低八位 signedunsigned,原样照赋原样照赋例例3#include”stdio.h”main()unsigned int a;int b=-1;a=b;printf(“%u”,a);输出结果:输出结果:65535C signedunsigned,原样照赋例3#in二、显式转换(强制转换)二、显式转换(强制转换)格式:格式:(类型名类型名)(表达式)表达式)例例 (int)(x+y)(int)(x+y)(int)x+y(int)x+y (float)(3/2)(float)(3/2)(int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,原说明:强制转换得到所需类型的中间变量,原变量类型不变变量类型不变 例例4#include”stdio.h”main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:结果:x=3.600000,i=3精度损失问题精度损失问题较高类型向较低类型转换时可能发生较高类型向较低类型转换时可能发生二、显式转换(强制转换)例4#include”stdiov例:例:float f;f=6/7;问:问:f=?f=0.8571 f=0.0改为:改为:f=6.0/7 或或 f=6/7.0或或 f=(float)6/7v类型转换时,只赞成低类型转换时,只赞成低高高 不赞成高不赞成高低低 只赞成有符号数只赞成有符号数无符号数无符号数 不赞成无符号数不赞成无符号数有符号数有符号数例:float f;f=0.8571改为:f=6.3.5 关系运算符和表达式关系运算符和表达式l运算符:运算符:=!=l结合方向:自左向右结合方向:自左向右l优先级别:优先级别:=-=!=l与其它比:算术与其它比:算术关系关系赋值赋值例例 ca+b /c(a+b)ca+b /c(a+b)ab!=c /(ab)!=cab!=c /(ab)!=c a=bc /a=(bc)a=bc /a=(bc /a=(bc)a=bc /a=(bc)l关系表达式的值:是逻辑值,关系表达式的值:是逻辑值,1(真真)0(假假)例例 int a=3,b=2,c=1,d,f;ab (ab)=c b+cb f=abc/表达式值表达式值1/表达式值表达式值1/表达式值表达式值0/d=1/f=03.5 关系运算符和表达式例 ca+b /c注意:注意:例例 若若a=0;b=0.5;x=0.3;则则 a=x278在在C中是允许的,中是允许的,值为值为0例例 int i=1,j=7,a;a=i+(j%4!=0);则则a=2例例 a0 结果为结果为 A100 结果为结果为10注意:例 若a=0;b=0.5;x=0.3;0例 例例 注意区分注意区分“=”与与“=”int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);例 注意区分“=”与“=”例例5:#include”stdio.h”main()int x,y,z;printf(“input data x,y:n”);scanf(“%d%d”,&x,&y);printf(“n x y xy xy x=y x!=y x=y”);printf(“n%5d%5d”,x,y);z=xy;printf(“%5d”,z);z=xy;printf(“%5d”,z);z=x=y;printf(“%5d”,z);z=x!=y;printf(“%5d”,z);z=x=y;printf(“%5d”,z);printf(“n”);例5:结果结果1:input data x,y:5 3 回车回车 x y xy xy x=y x!=y x=y 5 3 0 0 1 1 1 0结果结果2:-input data x,y:-5 -3 回车回车 x y xy xy x=y x!=y x=y -5 -3 1 1 0 0 1 0结果结果1:input data x,y:4 4 回车回车 x y xy xy x=y x!=y x=y 4 4 0 1 0 1 0 1结果1:结果2:-结果1:ab!a!ba&ba|b真真假假真真假假假假假假真真真真3.6 逻辑运算符和表达式逻辑运算符和表达式l运算符:运算符:!&|l逻辑运算真值表逻辑运算真值表 运算量运算量:0 0(假)(假)非非0 0(真)(真)表达式值表达式值:0 0(假)(假)1 1(真)(真)真假假假假假真真假假真真真假真真ab!a!ba&ba|b真假真假假假真真3.6 逻辑运算例例 a=x&xb&xy a=b|x=y !a|abl优先级:优先级:l结合方向:结合方向:!:右右左左&:左左右右|:左左右右/(a=x)&(xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)l与其它比:单目与其它比:单目算术算术关系关系逻辑逻辑赋值赋值!&|例 a=x&x3&2|8b)&(n=cd)求求 m=?n=?/m=0,n=1例例 a&b&c /只在只在a为真时,才判别为真时,才判别b的值;的值;只在只在a、b都为真时,才判别都为真时,才判别 c的值的值v或表达式遇真结束或表达式遇真结束例例 a|b|c /只在只在a为假时,才判别为假时,才判别b的值;的值;只在只在a、b都为假时,才判别都为假时,才判别 c的值的值特性:例 a=1;b=2;c=3;d=4;m=1;n=1;例例6:#include”stdio.h”main()int x,y,z;printf(“input data x,y:n”);scanf(“%d%d”,&x,&y);printf(“n x y !x x|y x&y”);printf(“n%5d%5d”,x,y);z=!x;printf(“%8d”,z);z=x|y;printf(“%8d”,z);z=x&y;printf(“%8d”,z);printf(“n”);例6:结果结果1:input data x,y:12 8 回车回车 x y !x x|y x&y 12 8 0 1 1 结果结果2:input data x,y:9 -3 回车回车 x y !x x|y x&y 9 -3 0 1 1 结果结果3:input data x,y:0 81 回车回车 x y !x x|y x&y 0 8 1 1 0 结果1:结果2:结果3:结果结果4:input data x,y:-23 0 回车回车 x y !x x|y x&y -23 0 0 1 10 结果结果5:input data x,y:0 0 回车回车 x y !x x|y x&y 0 0 1 0 0 结果4:结果5:3.7 自增、自减运算符:自增、自减运算符:+-l作用:使变量值加作用:使变量值加1 1或减或减1 1 i+或或+i i=i+1 i-或或-i i=i-1l种类:种类:前缀:前缀:+i,-i 先增先增1 1(减减1 1),再使用),再使用i i值值后缀:后缀:i+,i-先使用先使用i i值值,再增再增1 1(减减1 1)例例 j=3;k=+j;j=3;k=+j;j=3;k=j+;j=3;k=j+;j=3;printf(j=3;printf(“%d%d”,+j);,+j);j=3;printf(j=3;printf(“%d%d”,j+);,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;a=3;b=5;c=(a+)*b;/k=4,j=4/k=4,j=4/k=3,j=4/k=3,j=4/4/4/3/3/c=20,a=4/c=20,a=4/c=15,a=4/c=15,a=43.7 自增、自减运算符:+-例 j=3;k=l说明:说明:不能用于常量和表达式不能用于常量和表达式,如如5+5+,(a+b)+a+b)+结合方向:结合方向:自右向左自右向左优先级:优先级:-+-+-*/%-+-*/%-+-例例-i+i+-(i+)-(i+)i=3;printf(i=3;printf(“%d%d”,-i+);,-i+);/-/-3 3 例例 int a=5,b;b=a+;printf(“a=%d,b=%d”,a,b);/a=6,b=5例例 int a=5,b;b=+a;printf(“a=%d,b=%d”,a,b);/a=6,b=6说明:例-i+-(i+)例 int a=例例7:#include”stdio.h”main()int x,y,z;x=y=8;z=+x;printf(“n%3d%3d%3d”,y,z,x);x=y=8;z=x+;printf(“n%3d%3d%3d”,y,z,x);x=y=8;z=-x;printf(“n%3d%3d%3d”,y,z,x);x=y=8;z=x-;printf(“n%3d%3d%3d”,y,z,x);printf(“n”);结果:结果:8 9 9 8 8 9 8 7 7 8 8 7 例7:结果:3.8 逗号运算符和表达式逗号运算符和表达式形式:形式:表达式表达式1,表达式表达式2,表达式表达式n结合性结合性:从左向右从左向右优先级优先级:最低最低表达式值:等于表达式表达式值:等于表达式n的值的值用途:常用于循环用途:常用于循环for语句中语句中例例 a=3*5,a*4 a=3*5,a*4,a+5例例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);/a=15,表达式值表达式值60/a=15,表达式值表达式值20/1,2,3/3,2,33.8 逗号运算符和表达式例 a=3*5,a*4/a=例例8:#include”stdio.h”main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,x);运行结果:运行结果:x=3例8:运行结果:x=33.9 条件运算符与表达式条件运算符与表达式 e1?e2 :e3 (唯一的三目运算符)唯一的三目运算符)功能:功能:e1为真,取为真,取e2值;值;e1为假,取为假,取e3值。值。(相当于条件语句,但不能取代一般(相当于条件语句,但不能取代一般if语句)语句)结合方向:结合方向:自右向左自右向左 如如 ab?a:cd?c:d ab?a:(cd?c:d)例例 if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,ab?a:b);例例 求求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);例例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a&c=z)?c-a+A:c3.9 条件运算符与表达式结合方向:自右向左例 if(3.10 3.10 求字节运算符求字节运算符 sizeof l单目运算符单目运算符l作用:返回变量或类型的字节长度。作用:返回变量或类型的字节长度。l一般形式为:一般形式为:sizeof(sizeof(变量或类型变量或类型变量或类型变量或类型)如如:sizeof(double)为为8 sizeof(int)为为2也可以求已定义的变量也可以求已定义的变量,例如例如:float f;int i;i=sizeof(f);则则i i的值将为的值将为4 4。3.10 求字节运算符 sizeof 单目运算符例例9:#include main()int a,b,c,d;a=sizeof(char);b=sizeof(int);c=sizeof(long);d=sizeof(float);printf(“n char:%5d byte,a);printf(“n int:%5d bytes,b);printf(“n long:%5d byte,c);printf(“n float:%5d byte,d);运行结果:运行结果:char 1 byteInt 2 byteslong 4 bytesfloat 4 bytes例9:运行结果:
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


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

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


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