《C语言课件第三章数据运算》由会员分享,可在线阅读,更多相关《C语言课件第三章数据运算(23页珍藏版)》请在金锄头文库上搜索。
1、第3章 数 据 运 算 内容提要n本章主要介绍C语言中的各种表达式的构造方法及其求值规则。n通过本章学习,应掌握数值运算、赋值运算、逗号运算、关系运算、逻辑运算及简单的位运算的一般规则,这些运算贯穿在整个程序设计的过程中。 算术运算 n算术运算,也叫数值运算,是程序设计中使用最多的一种数据运算 n1. 算术运算符n2. 算术表达式 赋值运算 n 赋值运算符“=”是一种二元运算符,必须连接两个运算量。其左边只能是变量或数组元素,不能是常量或表达式;右边则可以是任何表达式。例如,x=y+2,x=x+1等是允许的,而y+2=x,5=x等是错误的。n 赋值运算符除了“=”,还有另外10种复合赋值运算符
2、。它们由赋值号“=”和另外一个二元运算符组成,具有计算和赋值双重功能。这10种复合赋值运算符是+=、 =、*=、/=、%=、&=、|=、=、=。其中,前5种复合赋值运算符具有算术运算和赋值的双重功能。逗号运算(顺序运算)n逗号运算符的作用是连接多个数据项,从而能将它们作为一个整体来处理。前面介绍的用一个类型关键字定义多个变量时,各变量之间要用逗号隔开。n在printf()函数中多个输出项之间用逗号隔开,在scanf()函数中多个输入项之间用逗号隔开等,目的都是将多个变量、输出项或输入项视为一个整体。本节介绍用逗号运算符将多个表达式作为一个整体时的处理原则。 关系运算和逻辑运算 n在程序设计的实
3、践中,关系运算和逻辑运算主要用来进行条件判断,以便程序能按照指定的流程运行。 关系运算和逻辑运算通常用在第4章要介绍的if语句、switch语句、for语句或while语句中n1. 关系运算符和关系表达式n2. 逻辑运算符和逻辑表达式测试数据长度运算符sizeof nC语言并不规定各种类型的数据占用多大的存储空间,同一类型的数据在不同的宿主机上可能占用不同的存储空间,为此,C语言提供了测试数据长度运算符sizeof,以测试各种数据类型的长度,它的一般格式如下:n sizeof(exp)n其功能是给出exp所占用的内存字节数。其中,exp可以是类型关键字、变量或表达式。例如: sizeof(do
4、uble),sizeof(x),sizeof(a+b),sizeof(3*1.46/7.28)等。 位操作 nC语言是介于汇编语言和高级语言之间的一种中级语言,它综合了高级语言的要素和汇编语言的机能,可以实现汇编语言位操作的功能。所谓位操作,是对字节或字节内部的二进制位进行测试、设置、移位或逻辑运算。n位操作经常应用于设备驱动程序中,如调制解调器驱动程序中用于屏蔽某些位,实现奇偶校验;在磁盘文件管理中如果希望文件不可读,可用密码子程序将文件中的字符逐位取反;有些C语言编译系统用左移位实现乘2运算,用右移位实现除2运算,其速度非常快。 数学函数 nC语言计算能力不强,但C语言编译系统在标题文件中
5、定义了众多的数学函数。当需要调用这些数学函数时,要用“#include ”命令行包含该标题文件。下面列出的函数中,自变量x和y为double型,n为int型,所有的函数值均为double型。三角函数的自变量以弧度为单位,反三角函数的函数值以弧度为单位。n sin(x) x的正弦,值域为1,1n cos(x) x的余弦,值域为1,1n tan(x) x的正切n asin(x) x的反正弦,定义域为1,1,值域为/2,/2n acos(x) x的反余弦,定义域为1,1,值域为0,n atan(x) x的反正切,定义域为1,1n atan2(y,x) y/x的反正切,y/x的取值范围为1,1n si
6、nh(x) x的双曲正弦,即(exex)/2n cosh(x) x的双曲余弦,即(ex+ex)/2n tanh(x) x的双曲正切,即(exex)/(ex+ex)本章总结n本章重点是在理解各种运算符的优先级和结合性的基础上,正确构造算术表达式、赋值表达式、逗号表达式、关系表达式、逻辑表达式,并掌握各种各类表达式的求值规则n初步掌握简单的位操作及测试数据长度运算符的应用。n本章的难点是:算术表达式和赋值表达式中的自动类型转换和强制类型转换规则;+和 运算符在表达式中的计算规则;复杂逻辑表达式的计算规则。 本章习题n一、选择题n1. C语言中要求运算量必须是整型的运算符是_。nA. + B. /
7、C. % D. n2. 在C语言中,不同类型的数据混合运算时,先要转换成同一类型,然后进行计算。设一表达式中含有int、long、unsigned和char类型的常数和变量,则表达式的最后运算结果是 。这四种类型的转换规律是 。n A. int B. char C. unsigned D. longn A. intunsignedlongchar B. charintlongunsignedn C. charintunsignedlong D. charunsignedlongintn3. a、b均为整数且b0,则表达式a/b*b+a%b的值为_。 nA. a B. bnC. a被b除的整数部
8、分 D. a被b除商的整数部分本章习题n4. a、b均为整数且b0,则表达式aa/b*b的值为_。nA. 0 B. anC. a被b除的余数部分 D. a被b除商的整数部分n5. 下列表达式中,值为0的是_。nA. 3%5 B. 3/5.0 C. 3/5 D. 35本章习题n6. 下列语句中符合C语言语法的语句是_。nA. a=7+b+c=a+7; B. a=7+b+=a+7; C. a=7+b,b+,a+7; D. a=7=b,c=a+7;n7. 表达式18/4*sqrt(4.0)/8的数据类型为_。nA. int B. float C. double D. 不确定n8. 若变量已正确定义且
9、k的值是4,执行表达式j=k 后,j,k的值是_。nA. j=4,k=4 B. j=4,k=3 C. j=3,k=4 D. j=3,k=3本章习题n9. 设int x=10,x+=3+x%(3),则x=_。nA. 14 B. 15 C. 11 D. 12n10. 表达式(int)(3.0/2.0)的值是_。nA. 1.5 B. 1.0 C. 1 D. 0n11. 设a为int型变量,则执行以下语句后,a的值为_。n a=10; a+=a-=a-a;nA. 10 B. 20 C. 40 D. 30本章习题n12. 设变量t为int型,下列选项中,不正确的赋值语句是_。nA. +t; B. n1=
10、(n2=(n3=0); C. k=i=1; D. a=b+c=1;n13. 设float m=4.0, n=4.0; 使m为10.0的表达式是_。nA. m =n*2.5 B. m/=n+9 C. m*=n6 D. m+=n+2n14. C语句x*=y+2;还可以写成_。nA. x=x*y+2; B. x=2+y*x; C. x=x*(y+2); D. x=y+2*x;本章习题n15. 若变量已正确定义,要将a和b中的数进行交换,则下列不正确的语句组是_。nA. a=a+b, b=ab, a=ab; B. t=a, a=b, b=t;nC. a=t; t=b; b=a; D. t=b; b=a
11、; a=t;n16. 设有如下变量定义:int a,b,i=4;double x=1.42,y;则以下符合C语言语法的表达式是_。nA. a+=a=(b=4)*(a=3) B. x%(3)nC. a=a*3=2 D. y=float(i)n17. 设已定义:int k=7,x=12; 下列表达式中,计算结果为0的是_。nA. x%=(k%=5) B. x%=(kk%5) C. x%=kk%5 D. (x%=k) (k%=5)本章习题n18. 若已定义x和y为double型变量,则表达式:x=1,y=x+3/2的值是_。nA. 1 B. 2 C. 2.0 D. 2.5 n19. 设int c=5
12、和int a,a=2+(c+=c+,c+8,+c),则a的值为_。nA. 15 B. 14 C. 13 D. 16n20. 设 int a=7,b=8; 则printf(%d,%d,(a+b,a),(b,a+b);的输出是_。nA. 7,15 B. 8,15 C. 15,7 D. 出错本章习题n21. 设int a=3; 则表达式a1的运算结果和a的值分别是_。nA. 0和2 B. 0和3 C. 1和2 D. 1和3n22. 为表示关系xyz,应使用的C语言表达式是_。nA. (x=y)&(y=z) B. (x=y)AND(y=z) C. x=y=z D. (x=y)&(y=z)n23. 已知
13、int x=43,y=0; char ch=A; 则表达式(x=y&ch0)&(b0) B. a&b C. (a0)|(b0) D. (a0)|(b0)n25. 当c的值不为0时,下列选项中能正确将c的值既赋给变量a又赋给变量b的是_。nA. c=b=a B. (a=c)|(b=c) C. (a=c)&(b=c) D. a=c=bn26. 设a为整型变量,下列不能正确表达数学关系:10a15的C语言表达式是_。nA. 10a10&a15 D. !(a=15)本章习题n27. 下面的程序输出为_。n main()n int a=-1,b=4,k;n k=(a+=0)&(!(b-=0);n pri
14、ntf(%d %d %d,k,a,b);n nA. 0 0 3 B. 0 1 2 C. 1 0 3 D. 1 1 2n28. 设a、b和c都是int型变量,且a=3,b=4,c=5; 则以下表达式中,值为0的是_。nA. a&b B. a=b C. a|b+c&bc D. !(a(int)(xy)的值为_。nA. 2 B. 4 C. 1 D. 3n33. 设int b=2;,表达式(b1)的值是_。nA. 0 B. 2 C. 4 D. 8n34. sizeof(double)是_。nA. 一种函数调用 B. 一个双精度表达式 nC. 一个整型表达式 D. 一个不合法的表达式本章习题n二、填空题
15、n1. 设有以下定义,并已赋确定的值n char ch; int i; float f; double d;n则表达式ch*i+df的数据类型为_。 n2. 设有int a=11;,则表达式(a+*1/5)的值为_。n3. 下列程序的输出结果是_。n main()n double d=3.2;n int a=1.2,b;n b=(a+3.8)/5.0;n printf(%fn,d*b);n 本章习题n三、编程题n1. 编写程序,其功能是:从键盘输入长方体三边边长x,y,z分别为2.5,3.5,4.5,然后求其表面积a和体积v。n2. 编写程序,其功能是:从键盘输入正方形的边长a,计算并输出该正方形的内接圆的面积s和周长c。