您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 《运算符与表达式》PPT课件.ppt
2.2运算符与表达式教学目标:本章详细介绍了C语言提供的运算符和表达式的使用方法,要求通过本章的学习了解运算符的优先级和结合性,掌握C的运算符和表达式类型及求值规则,掌握数据类型转换的方法。教学重点:1.重点掌握运算符:+,-,*,/,%,++,--,&&,||,,,=,=,!=,==;2.不同数值型数据间的混合运算规则;3.算术表达式和赋值表达式的基本使用方法。教学难点:1.不同数值型数据间的混合运算规则;2.数据类型转换的方式。教学方法:理论教学与实践教学相合。2.2运算符与表达式2.2运算符与表达式2.2.1表达式基础2.2.2算术运算符与算术表达式2.2.3关系运算符和关系表达式2.2.4逻辑运算法与逻辑表达式2.2.5位运算符2.2.6赋值运算符与赋值表达式2.2.7逗号运算符与逗号表达式2.2.8条件运算符和条件表达式2.2.9其它运算符2.2运算符与表达式2.2.1表达式基础1.表达式的组成(1)运算符运算符又称操作符,是一个符号,它指示在一个或多个操作数上完成某种运算操作或动作。C语言中,除了输入、输出及程序流程控制操作以外的所有基本操作都作为运算处理。如,赋值运算符“=”、逗号运算符“,”、括号运算符“()”。2.2运算符与表达式①算术运算符有+、-、*、/、%、++、--②关系运算符有、=、==、!=、、=③逻辑运算符有!、&&、||④位运算符有、、~、|、^、&⑤赋值运算符有=、+=、-=、*=、/=、%=、&=、|=、^=、=、=⑥条件运算符有?:⑦逗号运算符有,⑧指针运算符有*、&⑨求字节数运算符有sizeof⑩强制类型转换运算符有(类型标识符)⑾分量运算符有.、-/*参见结构体*/⑿下标运算符[]/*参见数组*/⒀其它()、-2.2运算符与表达式(2)操作数是运算符的操作对象,都是表达式(包括常量、变量、函数调用、复杂表达式)。常量、变量、函数本身就是简单表达式,从一般意义上讲,C语言中所有操作数都是表达式。复杂表达式由运算符连接简单表达式形成。2.2运算符与表达式2.表达式的书写(1)C语言的表达式只能采用线性的形式书写。例如:①应写成1/3.0+i+j*j*j。②应写成(a+b)/(c+d)*e+f。331jifedcba2.2运算符与表达式(2)C语言的表达式只能使用C语言中合法的运算符和操作数,对有些操作必须调用库函数完成,而且运算符不能省略。例如:①πr2应写成3.1415926*r*r②应写成0.5*a*b*sin(alph),alph是事先定义好的整型变量。③|x-y|(设x,y都是整数)应写成abs(x-y)④|x-y|(设x,y都是实数)应写成fabs(x-y)⑤y+2X应写成y+pow(2,x)。absin21数学函数使用前应添加命令:#includemath.h2.2运算符与表达式•运算符功能•与操作数关系–要求操作数个数–要求操作数类型•运算符优先级别•结合方向•结果的类型3.学习运算符应注意2.2运算符与表达式(1)运算符优先级P30表2-6C语言将运算符的优先级划分为15级,①初等运算()、[]、→、.②单目运算!、~、++、--、-、(类型标识符)、*、&、sizeof右结合③算术运算*、/、%④+、-⑤位运算符⑥关系运算符、=、、=⑦==、!=⑧位运算符&⑨^⑩|⑾逻辑运算&&⑿||⒀条件运算符?:右结合⒁赋值运算=、+=、-=、*=、/=、%=,=,=,&=,^=,|=右结合⒂逗号运算,2.2运算符与表达式(2)运算符的结合性运算符的结合性是指,优先级相同的运算符运算次序。包括从左到右进行(左结合性)和从右至左进行(右结合性)。右结合:C中只有以下三种运算符的结合性是右结合。单目运算(!、~、++、--、-、*、&)条件运算(?:)赋值运算(=、+=、-=、*=、/=、%=、=、=、&=、^=、|=)其余运算符均为左结合。2.2运算符与表达式优先级-(取负)++--*/%+-2.2.2算术运算符与算术表达式1.算术运算符双目:+、-、*、/、%(取余(模))左结合单目:-(取负)、++(自加)、--(自减)右结合高低2.2运算符与表达式(2)取余(模)运算符%注意:分子和分母必须同为整型数,%运算的符号只取决于第一个数(分子)的符号。(1)除法运算符/两整数相除,结果为整数,舍去小数部分。若有一个操作数是实数,则结果是实数。如7/2的结果为,而7.0/2的结果为。33.5例7%4=5.5%23非法2.2运算符与表达式(3)自加++、自减--运算符作用:使整型变量值加1或减1种类:前置++i先执行i=i+1再使用i值,表达式++i的值是i+1--i先执行i=i-1再使用i值,表达式++i的值是i-1)后置i++先使用i值再执行i=i+1,表达式i++的值是ii--先使用i值再执行i=i-1,表达式i--的值是i注意:操作数只能是整型变量,如5++,(a+b)++。2.2运算符与表达式Key-inanumber:_Key-inanumber:26_main(){intnum;printf(“Key-inanumber:“);scanf(“%d”,&num);printf(“Valuebeforebeingincremented:%d\n”,num);num++;printf(“Valueafterbeingincremented:%d”,num);}num??Key-inanumber:26Valuebeforebeingincremented:26_2627Key-inanumber:26Valuebeforebeingincremented:26Valueafterbeingincremented:27_++num;/*结果如何??*/此时,前缀++(--)和后缀++(--)相同,作用仅是增1(减1)。2.2运算符与表达式例main(){intj,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.2运算符与表达式2.算术表达式定义:用算术运算符和圆括号将运算对象连接起来的,并且符合C语言语法规则的式子。单个的常量和变量都是算术表达式,是最简单的算术表达式。算术表达式的值是数值型。++a+b/5等价于(++a)+(b/5)例-i++i=3;printf(“%d”,-i++);例-i++-(i++)i=3;printf(“%d”,-i++);//-32.2运算符与表达式3.i+++j如何解释???main(){inti=3,j=5,k;k=i+++j;printf(“%d,%d,%d”,i,j,k);}/*i+++j解释为(i++)+j*/在表达式中出现多个字符时如何组合呢?尽可能自左而右将若干字符组合成一个运算符,标识符、关键字也按同样的原则进行处理。输出:4,5,82.2运算符与表达式【例】阅读下面程序写出运行结果#include″stdio.h″main(){inti,j;i=j=5;printf(″i++=%d,j--=%d\n″,i++,j--);printf(″++i=%d,--j=%d\n″,++i,--j);printf(″i++=%d,j--=%d\n″,i++,j--);printf(″++i=%d,--j=%d\n″,++i,--j);printf(″i=%d,j=%d\n″,i,j);}2.2运算符与表达式运行结果:i++=5,j--=5++i=7,--j=3i++=7,j--=3++i=9,--j=1i=9,j=12.2运算符与表达式4.算术运算中的类型转换不同类型数据进行运算时,要进行类型转换。类型转换有自动转换(又称隐含转换)与强制转换两种方式。(1)自动类型转换自动转换由系统自动完成,适用于整型、实型和字符型数据的混合运算。转换的规则是:精度从低到高的顺序是intunsignedlongdouble必须必须short,charfloat2.2运算符与表达式例如:计算表达式3.14+18/4+’a’的值3.14+18/4+’a’(1)计算18/4,结果4,int型(2)先将3.14转换成double型,再将4转换成double型4.0,计算3.14+4.0,结果是7.14(double)(3)先将‘a’转换成int型值为97,再将97转换成double型97.0,计算7.14+97.0,结果是104.14,double型4104.147.142.2运算符与表达式(2)格式:(类型名)(表达式)/*(类型名)是类型转换运算符,单目*/功能:将表达式的值类型强制转换成类型名指定的类型。如:(int)(x+y)(int)x+y注意:类型名两侧的()不能省略将表达式x+y的值强制转换成整型将表达式x的值强制转换成整型(double)(3/2)(int)3.6说明:①强制转换得到所需类型的中间变量,原变量类型不变2.2运算符与表达式测试程序:main(){inta;printf(“%d%d”,sizeof(a),sizeof(double(a)));}输出结果:28②当低精度强制转换成高精度,易造成精度损失main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}输出:x=3.600000,i=32.2运算符与表达式2.2.3关系运算符与关系表达式1关系运算符关系运算符的优先级低于算术运算,高于赋值运算符。种类:、=、、=、==、!=均双目结合型:左结合优先级、=、、=高于==、!=例ca+b//c(a+b)ab!=c//(ab)!=ca==bc//a==(bc)a=bc//a=(bc)2.2运算符与表达式例如:32b*b-4*a*c=1e-6x==ya%b!=02关系表达式关系表达式的值:是逻辑值“真”或“假”,用1和0表示。设有定义inta=3,b=2,c=1;则:ab的值为1c==a的值为02.2运算符与表达式【例题】计算表达式3==4+12!=5的值并给出求解过程3==4+12!=55101注意应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为0可改写为:fabs(1.0/3.0*3.0-1.0)1e-62.2运算符与表达式2.2.4逻辑运算符与逻辑表达式逻辑运算符有:!(非,单目,右结合)、&&(与)、||(或)优先级:!&&||结合性:!是右结合,&&和||是左结合高低2.2运算符与表达式ab!aa&&ba||b非00非0000非0非0操作数:0表示“假”,非0表示“真”,运算结果:0表示“假”,1表示“真”,100000111011真值表:2.2运算符与表达式短路特性:&&和||是一种短路运算。所谓短路运算,是指在计算的过程中,只要表达式的值能确定,便不再计算下去。(逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符)例如:(1)e1&&e2,若e1为0,可确定表达式的值为0,不再计算e2(2)e1||e2,若e1为真,则可确定表达式的值为真,也不再计算e2。2.2运算符与表达式【例题1】main(){inta=1,b=2,c=
本文标题:《运算符与表达式》PPT课件.ppt
链接地址:https://www.777doc.com/doc-5275712 .html