C语言将变量中的值乘以二的习语,c语言数据运算.ppt

本文详细介绍了C语言中的数据运算,包括算术运算符、赋值运算符、关系运算符和逻辑运算符的使用规则,以及逗号运算符和条件运算符的应用。还探讨了类型转换规则,包括自动类型转换和强制类型转换,并通过实例展示了运算符的优先级和结合性。此外,还讲解了sizeof运算符用于测试数据长度的方法。最后,列举了一些常用的数学函数,如三角函数和反三角函数,强调了它们在C语言编程中的应用。
摘要由CSDN通过智能技术生成

第3章数据运算,计算机的基本功能是进行数据处理,而数据处理主要是通过对表达式的计算完成的。表达式是将运算量用运算符连接起来组成的式子,其中运算量可以是常量、变量或函数。由于运算量划分为不同的数据类型,每一种数据类型都规定了自己特有的运算或操作,这就形成了对应于不同数据类型的运算符集合及其相应的求值规则。,必须连接两个运算量的运算符称为二元运算符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,【例3-1】加1和减1运算。#includevoidmain(){inta=100;printf("%d\n",a);printf("%d\n",++a);//前缀printf("%d\n",a--);//后缀printf("%d\n",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)算术运算符的优先级和结合性①优先级:不同的运算符同时出现在表达式中时,进行运算的优先次序②结合性:同一优先级的运算符同时出现在同一表达式中时,进行运算的顺序,-++i-i++5*6%4/3a+b-c③用圆括号可以提高某个运算符的优先级或结合性,但不允许使用方括号或花括号。x+y*s-a+4/5*32与(x+(y*(s-a)+4)/5)*32,【例3-2】算术表达式计算优先级和结合性规则。,#includevoidmain(){inta=3,b=5,c=15,d=2;printf("%d\n",6-a*b/c%d);printf("%d\n",++a-a++);printf("%d\n",a);},①C编绎系统先将所有的char和shortint都转换成int,所有的float都转换成double。②如果表达式中只含同类型的运算量,则直接进行运算,运算结果即表达式的值也是同类型的。3/2值为1(整型)3.0/2.0值为1.5(双精度型)‘A’+’B’值为131(int)型③如果表达式中含有不同运算类型的运算量,先将精度较低的运算量转化成精度较高的类型,再与精度较高的运算量进行运算,得到的运算结果为精度较高的类型。,(2)自动类型转换规则,【例3-3】算术表达式计算自动类型转换规则,#includevoidmain(){charch=a;inti=5;unsignedintj=6;longintk=12;floatf=3.0;doubled=6.0;printf(“%lf\n”,ch/i+i*k-(j+k)*(f*d)/(f+i));},38.500000,,ch/i+i*k-(j+k)*(f*d)/(f+i)││││││││││int│long│long│double│doubledouble││││││││││└┬┘└┬┘└┬┘└┬┘└┬┘④⑤①②③long│double││└─┬─┘└──┬─┘double⑧⑥│double└──-─┬──┘│⑦└─────┬──────-─┘⑨,表达式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型常数初始化将给出警告。,【例3-4】算术表达式计算强制类型转换规则。#includevoidmain(){inta=7,x=3,y=2;floatb=2.5F,c=4.7F,z=3.5F;printf("%f\n",b+a%3*(int)(b+c)%2/4);printf("%d\n",(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%u\n",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.5~3.6】赋值表达式中的数据类型转换。,【例3-7】复合赋值运算符和赋值表达式作为运算量。#includevoidmain(){inta=12;a+=a-=a*a;//赋值表达式作为运算量printf("3%d\n",a);},运行结果-264,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)//该赋值表达式的值=?,【例3-8】逗号运算符及逗号表达式。#includevoidmain(){intc=5;printf("%d,%d,%d\n",c+=c++,c+8,++c);c=5;printf("%d\n",(c+=c++,c+8,++c));c=5;printf("%d\n",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;i<8,j=c-dx==yscore>90(2)用“==”或“!=”连接两个关系表达式x>y!=yy)==(z=x-1));x=y==z;printf("%d",x);printf("%d\n",x++>=++y-z--);},011,3.逻辑运算符,,4.逻辑表达式,用逻辑运算符连接关系表达式或任意数值型表达式。charch=‘a’;intx=5;ch>=‘A’printf("%d\n",3*(a+b)>c},逻辑表达式的特殊计算问题①形如(表达式1)(m=a>b)},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:%d\n",sizeof(ch));printf("shortint:%dint:%dlongint:%d\n",sizeof(shortint),sizeof(int),sizeof(longint));printf("float:%d\n",sizeof(a));printf("double:%dlongdouble:%d\n",sizeof(double),sizeof(longdouble));printf("intexpress:%d\n",sizeof(x+y));printf("floatexpress:%d\n",sizeof(a+b));printf("characterexpress:%d\n",sizeof(a-0));},char:1shortint:2int:4longint:4float:4double:8longdouble:8intexpress:4floatexpress:4characterexpress:4,C编译系统在标题文件math.h中定义了众多的数学函数。当需要调用这些数学函数时,要用"#include"命令行包含该标题文件。下面列出的函数中,自变量x和y为double型,n为int型,所有的函数值均为double型,三角函数的自变量以弧度为单位,反三角函数的函数值以弧度为单位。,3.6常用数学函数,知识点本章,知识点1:运算符的优先级和结合性知识点2:算术表达式知识点3:赋值表达式知识点4:关系表达式和逻辑表达式知识点5:逗号表达式知识点6:条件表达式知识点7:测试数据长度运算符,

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值