C语言教程同步课件5讲(第四章)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《C语言程序设计教程》编写组2007年1月第五讲运算符和表达式2第五讲运算符和表达式引例算术运算符自增自减运算符运算符的优先级和结合性类型转换关系运算符和逻辑运算符复合赋值运算符逗号运算符位运算符条件运算符C语言程序设计3引例引例问题输入一个四位的正整数,反序输出该四位数的四个数字字符。设计用一个无符号整型变量number保存输入的四位正整数。依次分解出个位数字、十位数字、百位数字和千位数字,并分别放到整型变量c1、c2、c3和c4中。怎么分解?–利用除法、取模等运算。顺序输出变量c1、c2、c3和c4中的数值。运算符和表达式4引例引例源程序(cw04-01.c)运算符和表达式#includestdio.hvoidmain(){unsignednumber;intc1,c2,c3,c4;printf(请输入一个四位的正整数:);scanf(%u,&number);c1=number%10;//得到个位数字c2=number/10%10;//得到十位数字c3=number/100%10;//得到百位数字c4=number/1000;//得到千位数字printf(\n%d%d%d%d\n,c1,c2,c3,c4);}请输入一个四位的正整数:12344321运算符和表达式1.运算符用来表示各种运算的符号称为运算符。C语言的运算符非常丰富,使用方法也非常灵活,这是C语言的主要特点。C语言具有44种运算符。运算符必须有运算对象。C语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可以分为:(1)单目运算:一个运算符连接一个运算对象(2)双目运算:一个运算符连接两个运算对象(3)三目运算:一个运算符连接三个运算对象2.表达式表达式就是用运算符将运算对象(常量、变量、函数)连接而成的符合C语言规则的算式。6算术运算符常用的算术运算及运算符运算符和表达式运算符名称算术运算符代数表达式C语言表达式适用的数据类型正号++a+a整数、字符、浮点数负号--b-b整数、字符、浮点数加+f+7f+7整数、字符、浮点数减-p–cp–c整数、字符、浮点数乘*bmb*m整数、字符、浮点数除/x/yx/y整数、字符、浮点数取模%rmodsr%s整数、字符算术运算符说明1.两个整数相除的结果为整数。1/2=05/3=12.整数求余运算的两个操作数必须为整数,结果也是整数类型。C语言规定,余数的符号和被除数的符号相同。10%3=1-10%3=-110%(-3)=12%7=23.两个运算符不能紧邻。a*-b应写成:a*(-b)4.两个操作数之间乘号“*”不能省略。(a+b)(a-b)应写成:(a+b)*(a-b)8算术运算符的优先级和结合性运算符的优先级某些运算符先于其他运算符被执行。例如,x+y*4,先乘除后加减。必要时可以用圆括号()改变计算顺序。例如,求三个数的平均值。错误的写法:a+b+c/3正确的写法:(a+b+c)/3运算符的结合性当出现并列的运算优先级别相同的运算符时,由运算符的结合性决定计算的次序。例如,x*y/z运算符和表达式9算术运算符的优先级和结合性常用的算术运算符的优先级和结合性运算符和表达式运算符运算符名称优先级结合性()圆括号1从左往右+-正号和负号2从右往左*/%乘、除、取模3从左往右+-加和减4从左往右10算术表达式算术表达式算术表达式,是由算术运算符和括号将运算对象(也称为操作数)连接起来的式子。运算对象包括常量、变量、函数等。举例运算符和表达式7/5x+y+z(f1*2)/f2+0.5sqrt(a)+sqrt(b)表达式有自己的值(计算结果),其值的类型就是表达式的类型。11算术表达式举例(cw0402.c)运算符和表达式#includestdio.hvoidmain(){doublef1;doublef2;f1=1/3;f2=1.0/3.0;printf(f1=%f\nf2=%f\n,f1,f2);}f1=0.000000f2=0.333333整数相除结果还是整数。12自增和自减运算符自增和自减运算符自增运算符:++将操作数的值增一。自减运算符:--将操作数的值减一。操作数必须是整型和字符型变量。不能用于常量和表达式。单目运算符。优先级:2。结合性:从右往左。运算符和表达式13自增和自减表达式表达式形式前缀形式:++操作数或--操作数先改变操作数的值,然后执行表达式中其它运算,并得到表达式的值。举例++c的值为c+1--c的值为c-1后缀形式:操作数++或操作数--先不改变操作数的值,执行表达式中其它运算,并得到表达式的值,然后改变操作数的值。举例c++的值为cc--的值为c运算符和表达式14自增和自减运算举例(cw0404.c)运算符和表达式#includestdio.hvoidmain(){inti=6,a,b;printf(%d\n,++i);printf(%d\n,i++);a=--i;printf(%d\n,a);b=i--;printf(%d\n,b);printf(%d\n,-i++);printf(i=%d\n,i);}7777-6i=?15自增和自减运算举例(cw0405.c)运算符和表达式#includestdio.hvoidmain(){inti=5,j=5,p,q;p=(i++)+(i++);q=(++j)+(++j);printf(p=%d,i=%d\n,p,i);printf(q=%d,j=%d\n,q,j);}p=10,i=7q=14,j=716自增和自减运算举例(cw0406.c)见例4.1.c运算符和表达式#includestdio.hvoidmain(){inti,j,k;i=1;j=1;k=i+++j;printf(“i=%d\nj=%d\nk=%d\n,i,j,k);}i=2j=1k=2k=(i++)+j;C语言处理运算符(标识符)时,遵循自左向右组合的原则,两个“+”是一个运算符,故处理成(i++)+j17类型转换在算术表达式中允许不同类型的数据参与运算。例如,10+‘a’+1.5-65.4*’b’在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换方式有两种:自动转换:数据类型自动由低级向高级转换。强制转换:将表达式的值强制转换成指定的数据类型。运算符和表达式18自动类型转换这种类型转换由编译系统自动完成。转换规则:运算符和表达式floatdoublelongunsignedintCharshort低高说明:1、横向的箭头表示必做的转换。2、纵向的箭头表示当运算对象类型不同时转换的方向。19强制类型转换类型转换运算符:()(类型说明符)(表达式)将一个表达式的值转换成指定的类型。属单目运算符。优先级:2。结合性:从右往左。举例(double)a(int)(x+y)≠(int)x+y(float)(5/3)=1.0运算符和表达式20类型转换下面表达式的类型是什么?10+‘a’+1.5-87.1*’b’举例(cw0403.c)运算符和表达式#includestdio.hvoidmain(){doublef;inti;f=3.6;i=(int)f;printf(“f=%f\ni=%d\n,f,i);}f=3.600000i=3f的类型并未因此而改变!关系运算符关系运算符是用来比较两个数值大小的,也称比较运算符。关系运算符均为二目运算符,C语言提供6种关系运算符:(小于)=(小于或等于)(大于)=(大于或等于)==(等于)!=(不等于)关系运算符要求两个操作数是同一种数据类型,其结果为一逻辑值,即关系成立时,其值为“真”,用整数1表示;关系不成立时,其值为“假”,用整数0表示。关系运算符关系运算符优先级规定:(1)算术运算符优先于关系运算符。(2)、=、、=优先于==、!=。(3)、=、、=同级,结合性自左至右。(4)==、!=同级,结合性自左至右。例:a+bc等价于(a+b)cab!=c等价于(ab)!=ca=b=c等价于a=(b=c)a-8=b==c等价于((a-8)=b)==c关系表达式由关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式或字符表达式)连接起来的式子称为关系表达式。例如,下面都是合法的关系表达式:xy、a+bc+d、(ab)(cd)、‘x’‘y’、123见例4.2.c各种关系运算符的比较例4.3.c用浮点数进行比较可能无法得到等值结果(TC环境中)。逻辑运算符逻辑运算实际上是复合的关系运算,是在关系运算结果之间进行的运算,所有参与逻辑运算的运算量都是逻辑量(即值只为“真”或“假”的量),所以逻辑运算的结果也是逻辑值(“真”或“假”)。C语言提供三种逻辑运算符:&&逻辑与||逻辑或!逻辑非注意:C语言没有逻辑型数据,用1表示逻辑值“真”,用0表示逻辑值“假”。C语言程序系统对任何非0值都认定为逻辑真,将0值认定为逻辑假。逻辑运算符逻辑运算符的优先级规定:(1)逻辑非(!)优先于双目算术运算符,双目算术运算符优先于关系运算符,关系运算符优先于逻辑与(&&),逻辑与(&&)优先于逻辑或(||)。(2)单目逻辑运算符(!)和单目算术运算符(+、-、++、--)是同级别的,结合性是自右向左。(3)双目逻辑运算符的结合性是自左向右。例如:(ab)&&(cd)等价于:ab&&cd(a==b)||(c==d)等价于:a==b||c==d(!a)||(bc)等价于:!a||bc!!!x等价于:!(!(!x)))逻辑运算符注意:在C语言中,若逻辑运算符的左操作数已经能够确定表达式的值,则系统不再计算右操作数的值。例4.4.c各种逻辑运算符的比较。main(){inta=3,b=4,c=5,x=0,y=0;printf(“%d\n”,a+bc&&b==c);printf(“%d\n”,a++||c++);printf(“%d\n”,!(x=a)&&(y=b));printf(“a=%d,c=%d\n”,a,c);printf(“x=%d,y=%d\n”,x,y);}例判断某一年year是否闰年。闰年的条件是符合下面二者之一:(1)能被4整除,但不能被100整除。(2)能被4整除,又能被400整除。可以用一个逻辑表达式来表示:(year%4==0&&year%100!=0)||year%400==0当year为某一整数值时,上述表达式值为真(1),则year为闰年;否则为非闰年。27赋值运算赋值运算符简单赋值运算符:=复合赋值运算符:+=,-=,*=,/=,%=优先级:14结合性:从右往左赋值表达式变量赋值运算符表达式d=23作用:将表达式的值赋给变量。赋值表达式的值就是被赋值的变量的值。运算符和表达式28简单赋值运算简单赋值运算符:=举例类型转换如果赋值运算符右边表达式的类型与左边变量的类型不一致,则把右边表达式值的类型按左边变量的类型进行转换,然后再赋值。例如,intn=3.6;n的值为3。运算符和表达式c=a+ba=b=c=d=10x=(a=5)+(b=8)a=(a+b)a=(b=(c=(d=10)))a=5,b=8,x=a+b29复合赋值运算复合赋值运算符:+=,-=,*=,/=,%=简化了赋值表达式variableoperator=expression由下面的表达式简化而来variable=variableoperatorexpression举例运算符和表达式a+=5x*=y+7x+=x-=x*=xa=a+5x=x*(y+7)x=x+(x=x-(x=x*x))≡30逗号运算符逗号运算符:,优先级:15。结合性:从左往右。逗号表达式表达式1,表达式2,…,表达式nx=1,(a=b+1),i++求解过程:先求表达式1的值,再求表达式2的值,···,直至求出表达式n的值。表达式的值为表达式n的值。运算符和表达式31逗号运算符

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功