您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 22常用的运算符和表达式
常用的运算符和表达式案例目标:1、掌握运算符、函数和表达式的使用方法;2、掌握赋值语句的使用方法。一、算术运算符1、算术运算符:+、-、*、/、%读为:加法、减法、乘法、除法、求余(或取模运算)。说明:(1)“-”减法运算,既是二元运算又是一元运算,例如:一元运算,求负运算-5,-x等;二元运算a-b=c。(2)“/”除法运算,当参与运算的量均为整型时,结果也为整形,舍去小数;如果运算量中有一个是实型,则结果为双精度实型。(3)“%”求余运算,要求参与运算的量均为整型。如,a%b,其值等于两数相除后的余数,符号与a相同。例1、main(){inta,b,c,d;floatx,y,z;a=1/3;/*两个整数相除,结果为整数,a=0*/b=-10/(-3);c=1%3;/*c的值是1,即1除以3得余数1*/d=-10%(-3);x=1.0/3;y=-10/3.0;printf(“\n%d,%d\n”,a,b);printf(“\n%d,%d\n”,c,d);printf(“%f,%f\n”,x,y);getch();}2、算术表达式和运算符的优先级和结合性(1)算术表达式:算术表达式是由算术运算符连接常量、变量、函数而成的式子。注:单个常量、变量也是表达式。如:a3A+3sin(x)(x+y)*x-(a+b)/d(2)运算符的优先级:C语言中,运算符的运算优先级共分为15级,1级最高,15级最低,优先级较高的先于优先级较低的进行运算,优先级相同时,则按运算符的结合性规定的结合方向处理。(运算符的优先级见附录3)如:+、-、*、/、%中*、/、%的优先级高于+、-;*、/、%优先级为3;+、-优先级为4。3、自加、自减运算符运算符:++,--功能:使变量的值自加1或自减1。例如:++i与i++的作用都相当于i=i+1.--i与i--的作用都相当于i=i-1。注:①自加1,自减1运算符均为一元运算,都具有右结合性,其优先级为2。②++i与i++的区别:如果初值i=1,表达式++i的值为2,此时i的值也为2;如果初值i=1,表达式i++的值为1,此时i的值为2;说明:++i,--i:i自加(减)1后,再参与其它运算;i++,i--:先参与其它运算,后i值自加(减)1。例2:main(){inti=1,a,b=2;a=++i*b;/*++在变量的前面,i先加1等于2,再参与表达式计算,与b相乘。*/printf(“%d\n”,a);printf(“%d\n”,i);getch();}运行结果:42例3:main(){inti=1,a,b=2;a=i++*b;/*++在变量的后面,i先参与表达式计算,即与b相乘,所以a=1*2=2.*/printf(“%d\n”,a);printf(“%d\n”,i);getch();}运行结果:22记忆方法:(1)运算符++、--在变量的前面,表示变量先加1或减1,然后再参加表达式的运算;(2)运算符++、--在变量的后面,表示变量先参加表达式的运算,然后再加1或减1。(3)++、--只影响它所在表达式的值;(4)无论++、--在变量前或在变量后,它所在的表达式计算结束后,它的值已经加上或减去1了。二、关系运算符和关系表达式关系运算符:把两个量进行比较的运算符。1、关系运算符(1)C语言提供6种关系运算符:,=,,=,==,!=小于,小于等于,大于,大于等于,等于,不等于(2)优先级(运算次序)系统规定:,=,,=优先级为6;==,!=优先级为7。2、关系表达式关系表达式:用关系运算符将两个表达式连接起来,进行关系运算的表达式。注:关系表达式的值显然应该是逻辑值(“真”或“假”),整数“1”为“真”,“0”为“假”。例1:设x1=1,x2=2,x3=3则:(1)求x1x2的值main(){intx1=1,x2=2,x3=3;printf(%d\n,x1x2);getch();}分析:因为x1=1,x2=2,所以x1x2不成立,它的值为0。(2)求(x1x2)!=x3的值main(){intx1=1,x2=2,x3=3;printf(%d\n,(x1x2)!=x3);getch();}分析:x1x2不成立,因此(x1x2)的值为0,所以0!=x3成立,它的值为1。(3)x1x2x3的值main(){intx1=1,x2=2,x3=3;printf(%d\n,x1x2x3);getch();}分析:x1x2成立,所以x1x2的值为1,导致1x3成立,所以它的值为1。例2:设x1=1,x2=2,x3=3,表达式(x1x2)+x3是关系表达式吗?它的值是多少呢?main(){intx1=1,x2=2,x3=3;printf(%d\n,((x1x2)+x3));getch();}上述表达式在此为算术表达式,而不是关系表达式,其值为4。三、逻辑运算符1、逻辑运算符(1)C语言提供三种逻辑运算符:&&读作:逻辑与||读作:逻辑或!读作:逻辑非例如:(x=1)&&(x2),!(x1),x||y(2)运算规则(1)&&:二元运算,当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。等价于“同时”;(2)||:二元运算,当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。等价于“或者”。(3)!:一元运算,当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。即“否定”。例如:设x=5,则:(1)(x=1)&&(x2)的值为?(2)!(x1)的值为?(3)x||(!x)的值为?main(){intx=5;printf(%d\n,(x=1)&&(x2));printf(%d\n,!(x1));printf(%d\n,x||(!x));getch();}运行结果:011(3)优先级!优先级为2;&&优先级为11;||优先级为12。常用运算符的优先级由高到低顺序为:!→算术运算→关系运算→&&→||→赋值运算2、逻辑表达式定义:C语言中指将若干个表达式连接起来,进行研究逻辑运算的式子,称为逻辑表达式。例如:需要说明“x=1”同时又有“x2”;可以用如下的逻辑表达式:(x=1)&&(x2)说明:(1)数学式子:“1=x2”,在C语言中是不合法的;(2)逻辑表达式的值是一个逻辑值(“真”或“假”),用整数“1”表示“真”、“0”表示“假”;(3)因为C语言逻辑表达式的概念与通常意义上的不完全一致,所以对非逻辑量也可以进行逻辑运算。判断一个数据的“真”或“假”时,都以0和非0为依据;如果为0,判定为“假”,如果为非0,判定为“真”。例如:假设x=-10,则:!x的值为“假”,x被视为“真”。例:求逻辑表达式的值main(){inta=2,b=2;floatx=0,y=2.3;printf(%d,%d\n,a*!b,!!a);printf(%d,%d\n,x||-1.5,ab);printf(%d,%d\n,a==5&&(b=2),(x=2)&&a==b);getch();}案例分析:第一行结果:b=2,所以!b的值为0,导致a*!b=0;a=2,所以!a=0,!!a=1第二行结果:||是或运算,-1.5不为0,所以x||-1.5的值为1a=2,b=2,所以ab不成立,导致ab的值为0第三行结果:a=2,所以a==5不成立,即a==5值为0,又因为&&是“与”运算,所以a==5&&(b=2)的值为0,因为x=2是赋值运算,x的值为2,非0,所以x=2的值为1,a=2,b=2所以a==b成立,所以(x=2)&&a==b的值为1四、赋值运算符1、赋值运算符:=作用:将一个数据赋给一个变量。如:“x=12”的作用是把常量12赋给变量x。注:①也可以将一个表达式的值赋给一个变量。②赋值运算符具有右结合性;③赋值运算符的优先级为14。2、赋值表达式一般形式为:变量=表达式说明:表达式是指由C的合法运算符连接常量、变量、函数而成的合法式子。3、赋值表达式的值赋值表达式的值就是被赋值变量的值。由于C语言将“=”定义为赋值运算符,因此其值过程应按运算符的规定进行。例如:假如inta=12,b=5,c=3;则x=a/b*c的计算结果为x=6;赋值表达式a=b=c=13的值为13。a=b=c=13可理解为a=(b=(c=13));x=(a=10)+(b=20)的值为30。其含义是把10赋给a,20赋给b,再把a,b相加的和赋给x,故x应等于30。4、类型转换如果赋值运算符两边的数据类型不同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型:(1)实型赋予整型,舍去小数部分。如:intx;x=3.14159;结果x=3.(2)整型赋给单、双精度变量时,数值不变,但将以浮点数形式存储。如:floatx;x=98;结果x=98.0000005、复合的赋值运算符在赋值符“=”之前加上其它二元运算符可构成复合赋值符。如:+=,-=,*=,/=,%=例如:a-=15等价于a=a-15(1)将“=”左边的全部移到“=”右边表达式的左边:=a-15(2)在“=”左边补上aa=a-15x*=y-17等价于x=x*(y-17)(1)将“=”右边的表达式加上括号。x*=(y-17)(2)将“=”左边的全部移到“=”右边表达式的左边:=x*(y-17)(3)在“=”左边补上xx=x*(y-17)复合赋值符的优先级和赋值运算符相同(14级)结合性也相同。例1:main(){intx=3,y=5;x*=x+y;printf(“x=%d\n”,x);}运行结果:x=246、各类数值型数据之间的混合运算在C程序中,常常会出现不同类型变量混合运算的情况,需将不同类型的数据转换成相同类型的数据,再进行运算。类型的转换有两种情况:自动转换和强制转换。转换规则如图所示:自动转换发生在不同数据类型的数据混合运算时,由编译系统自动完成。规则如下:(1)若参与运算量的类型不同,则先转换成同一类型,然后再进行运算;(2)转换按数据长度增加的方向进行,以保证精度不降低;(3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再计算;(4)char型和short型参与运算时,先转换成int型。7、强制类型转换(类型说明符)表达式功能:把表达式的运算结果强制转换成类型说明符所表示的类型。说明:这里的小括号:(),称为强制类型转换运算符。例如:(float)x把x转换为实型。(int)(a-b)把a-b的结果转换为整型。例2:实现保留小数点后2位有效数字。main(){floata=12.3456;a=(int)(a*100+0.5)/100.0;printf(“a=%f”,a);getch();}程序运行结果为:a=12.350000案例分析:1、由于(int)的作用,(int)(a*100+0.5)运算的结果为整型1235;2、除100.0运算时自动转换为实型12.350000;说明:1、在强制类型转换时,只得到一个所需类型的中间变量,原来变量的类型没有发生变化;2、(int)(x+y)和(int)x+y不同:前者是将x和y相加后,把结果转换为整型,而(int)x+y是把x转换成整型后再与y相加。例3:main(){floata=12.34;intb;b=(int)a;printf(%d,%f,b,a);getch();}程序运行结果:12,12.340000b是int型,a是float类型并不改变。3、无论是强制转换或是自动转换,如果要转换的量超过了转换后类型的表示范围,将出现溢出错误或不可预料的结果。如:main(){inta;floatb=123456;a=b;printf(a=%d,a);getch();}运行结果:-7616五、逗号运算符和逗号表达式1、逗号运算符:“,”2、逗号表达式:用逗号把两个表达式连接起来的式子,称为逗号表达式。一般形式为:表达式1,表达式2求值规则:
本文标题:22常用的运算符和表达式
链接地址:https://www.777doc.com/doc-2954820 .html