大学C语言实用教程第3章.ppt

上传人:max****ui 文档编号:11498236 上传时间:2020-04-25 格式:PPT 页数:33 大小:275.16KB
返回 下载 相关 举报
大学C语言实用教程第3章.ppt_第1页
第1页 / 共33页
大学C语言实用教程第3章.ppt_第2页
第2页 / 共33页
大学C语言实用教程第3章.ppt_第3页
第3页 / 共33页
点击查看更多>>
资源描述
第3章数据运算,大学C语言实用教程,计算机的基本功能是进行数据处理,而数据处理主要是通过对表达式的计算完成的。表达式是将运算量用运算符连接起来组成的式子,其中运算量可以是常量、变量或函数。由于运算量划分为不同的数据类型,每一种数据类型都规定了自己特有的运算或操作,这就形成了对应于不同数据类型的运算符集合及其相应的求值规则。,必须连接两个运算量的运算符称为二元运算符a+ba%ba/b只连接一个运算量的运算符称为一元运算符-aa+-b,3.1算术运算,1.算术运算符,用算术运算符连接数值型的运算量而得到的式子。-5*3+6%4/2-1(a+b)/(a-b)a+(b+)*c,(1)求余运算的规则假设两个整数分别为a和b,则a%b=a-a/b*b8%3=2,-8%3=-2,8%(-3)=2-8%(-3)=-2(2)自加(加1)自减(减1)运算+i表示i=i+1-i表示i=i-1,2.算术表达式,+或-可以用于前缀,也可以用于后缀。+n表示先令n=n+1,然后取n的值/先运算后变化n+表示先取n的值,然后令n=n+1/先运算后变化如果前缀或后缀运算形成一条语句,其运算结果是相同的。例如,设i=5,则i+;及+i;运算后,i的值均为6。,100101101100,【例】加1和减1运算。#includevoidmain()inta=100;printf(%dn,a);printf(%dn,+a);/前缀printf(%dn,a-);/后缀printf(%dn,a);,-+i-i+5*6%4/3a+b-c用圆括号可以提高某个运算符的优先级或结合性,但不允许使用方括号或花括号。x+y*s-a+4/5*32与(x+(y*(s-a)+4)/5)*32,3.算术表达式求值规则(1)算术运算符的优先级和结合性优先级:不同的运算符同时出现在表达式中时,进行运算的优先次序结合性:同一优先级的运算符同时出现在同一表达式中时,进行运算的顺序,【例】算术表达式计算优先级和结合性规则。,#includevoidmain()inta=3,b=5,c=15,d=2;printf(%dn,6-a*b/c%d);printf(%dn,+a-a+);printf(%dn,a);,C编绎系统先将所有的char和shortint都转换成int,所有的float都转换成double。如果表达式中只含同类型的运算量,则直接进行运算,运算结果即表达式的值也是同类型的。3/2值为1(整型)3.0/2.0值为1.5(双精度型)A+B值为131(int)型如果表达式中含有不同运算类型的运算量,先将精度较低的运算量转化成精度较高的类型,再与精度较高的运算量进行运算,得到的运算结果为精度较高的类型。,(2)自动类型转换规则,【例】算术表达式计算自动类型转换规则,#includevoidmain()charch=a;inti=5;unsignedintj=6;longintk=12;floatf=3.0;doubled=6.0;printf(“%lfn”,ch/i+i*k-(j+k)*(f*d)/(f+i);,38.500000,ch/i+i*k-(j+k)*(f*d)/(f+i)intlonglongdoubledoubledoublelongdoubledoubledouble-,表达式ch/i+i*k-(j+k)*(f*d)/(f+i)中含有多种类型的变量,根据优先级和结合性规则及自动类型转换规则进行计算,计算过程如图所示。,(3)强制类型转换规则,当算术表达式中需要违反自动类型转换规则,或者说自动类型转换规则达不到目的时,可以使用强制类型转换,其格式为:(类型关键字)(表达式)(double)a强制将变量a转换成double型(int)(x+y)强制将表达式(x+y)转换成int型(int)x+y强制将变量x转换成int型,然后与y相加其中包围类型关键字的圆括号必不可少。,使用强制应注意以下几点:(1)在进行强制类型转换时,类型关键字必须用括号括住。例如(int)x不能写成intx。(2)在对一个表达式进行强制类型转换时,整个表达式也应该用括号括住。例如,(float)(a+b)若写成(float)a+b就只对变量a进行了强制类型转换。(3)在对变量或表达式进行了强制类型转换后,并不改变原变量或表达式的类型。例如,设x为float型,y为double型,则(int)(x+y)为int型,而x+y仍然是double型。(4)将float型或double型强制转换成int型时,对小数部分是四舍五入还是简单地截断,取决于具体的系统。VC+采用的是截断小数的办法。,2.5000001VC+对高精度类型转换乘低精度类型增强了检查能力,因此,对float型变量用double型常数初始化将给出警告。,【例】算术表达式计算强制类型转换规则。#includevoidmain()inta=7,x=3,y=2;floatb=2.5F,c=4.7F,z=3.5F;printf(%fn,b+a%3*(int)(b+c)%2/4);printf(%dn,(x+y)%2+(int)b/(int)z);,3.2赋值运算,1.赋值运算符和赋值表达式v=e;/赋值语句v=e/赋值表达式赋值运算符:+=-=*=/=%=,前五种复合赋值运算符具有算术运算和赋值的双重功能;后五种复合赋值运算符则具有位运算和赋值的双重功能。,2.赋值表达式的值和类型在赋值表达式中,被赋值的变量得到的值就是赋值表达式的值,而被赋值的变量的类型就是赋值表达式的类型。例如,在形如v=e的赋值表达式中,变量v的值就是该赋值表达式的值,变量v的类型也就是赋值表达式的类型。,#includevoidmain()inta=-1;unsignedintb;b=a;/低精度转换成高精度printf(%d%un,a,b);,#includevoidmain()inta;charb;floatc;c=2.5;/高精度转换成低精度b=c;/高精度转换成低精度a=b;/低精度转换成高精度printf(%d,%d,%.1f,a,b,c);,2,2,2.5,-14294967295,3.赋值表达式中的数据类型转换在v=e这样的赋值表达式中,当v和e的数据类型不一致时,C编译系统自动将e的类型转换成与v相同的类型后再赋值。【例3.53.6】赋值表达式中的数据类型转换。,-264,【例3.7】复合赋值运算符和赋值表达式作为运算量。#includevoidmain()inta=12;a=a-a*a;a=a+a;a+=a-=a*a;/赋值表达式作为运算量printf(%dn,a);,3.3逗号运算,1.逗号运算符(顺序运算符)用逗号运算符将几个表达式连接在一起就构成逗号表达式。a=3*5,a*4,a+5;t=a,a=b,b=t;2.逗号表达式的值逗号表达式中最右边的一个表达式的值视为逗号表达式的值。inta=5;a=3*5,a*4,a+5/该逗号表达式的值=?inta=5;a=(3*5,a*4,a+5)/该赋值表达式的值=?,【例】逗号运算符及逗号表达式。#includevoidmain()intc=5;printf(%d,%d,%dn,c+=c+,c+8,+c);c=5;printf(%dn,(c+=c+,c+8,+c);c=5;printf(%dn,c+=c+,c+8,+c);,(1)用一个逗号表达式语句可代替多个赋值语句,如a=0;b=1;c=2;可写成a=0,b=1,c=2;(2)用一个逗号表达式语句可得到多个计算结果,如y=10;x=(y=y-5,60/y);执行后,x的值为12,y的值为5。(3)当某些语法位置只允许出现一个表达式时,用逗号表达式可实现多个表达式的运算,例如后面要介绍的for循环:for(i=0,j=0;i90(2)用“=”或“!=”连接两个关系表达式xy!=yy)=(z=x-1);x=y=z;printf(%d,x);printf(%dn,x+=+y-z-);,011,3.逻辑运算符,4.逻辑表达式,用逻辑运算符连接关系表达式或任意数值型表达式。charch=a;intx=5;ch=Aprintf(%dn,3*(a+b)c,逻辑表达式的特殊计算问题形如(表达式1)(m=ab),02,3.5测试数据长度运算,C语言并不规定各种类型的数据占用多大的存储空间,这与宿主机器的硬件特性有关。为了能够确定某一种类型数据的长度,C语言提供了测试数据长度运算符sizeof,它的一般格式为:sizeof(exp)其中,exp可以是类型关键字、变量或表达式。其功能是给出exp所代表的数据类型、变量或表达式占用的内存字节数。sizeof(double),sizeof(x),sizeof(a+b),sizeof(3*1.46/7.28)sizeof是一元运算符,它的优先级与+、-、intx=5,y=6;floata=1.28f,b=3000.0f;printf(char:%dn,sizeof(ch);printf(shortint:%dint:%dlongint:%dn,sizeof(shortint),sizeof(int),sizeof(longint);printf(float:%dn,sizeof(a);printf(double:%dlongdouble:%dn,sizeof(double),sizeof(longdouble);printf(intexpress:%dn,sizeof(x+y);printf(floatexpress:%dn,sizeof(a+b);printf(characterexpress:%dn,sizeof(a-0);,C编译系统在标题文件math.h中定义了众多的数学函数。当需要调用这些数学函数时,要用#include命令行包含该标题文件。下面列出的函数中,自变量x和y为double型,n为int型,所有的函数值均为double型,三角函数的自变量以弧度为单位,反三角函数的函数值以弧度为单位。,3.6常用数学函数,知识点本章,知识点1:运算符的优先级和结合性知识点2:算术表达式知识点3:赋值表达式知识点4:关系表达式和逻辑表达式知识点5:逗号表达式知识点6:条件表达式知识点7:测试数据长度运算符,
展开阅读全文
相关资源
相关搜索

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


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

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


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