第2章 数据类型、运算符、表达式

上传人:m**** 文档编号:170537421 上传时间:2022-11-21 格式:DOCX 页数:12 大小:56.28KB
收藏 版权申诉 举报 下载
第2章 数据类型、运算符、表达式_第1页
第1页 / 共12页
第2章 数据类型、运算符、表达式_第2页
第2页 / 共12页
第2章 数据类型、运算符、表达式_第3页
第3页 / 共12页
资源描述:

《第2章 数据类型、运算符、表达式》由会员分享,可在线阅读,更多相关《第2章 数据类型、运算符、表达式(12页珍藏版)》请在装配图网上搜索。

1、第二章 数据类型、运算符、表达式一、数据类型C 语言中的数据类型比别的语言丰富。整型(int短整型(short)I长整型(long)厂基本类型字符型char)单精度型(float实型双精度型(double)厂枚举类型(enum)数据类型构造类型数组类型结构体类型( struct)共用体类型(union指针类型( *)空类型(void基本类型的数据又可分为常量和变量,它们可与数据类型结合起来分类,即为整型常量、整 型变量、实型(浮点型)常量、实型(浮点型)变量、字符常量、字符变量、枚举常量、枚 举变量。1、常量与符号常量常量:在程序执行过程中,其值不发生改变的量称为常量。常量区分为不同的类型,如

2、68、0、-12为整型常量,3.14, 9.8为实型常量,a b, c 则为字符常量。常量即为常数,一般从其字面即可判别。符号常量:有时为了使程序更加清晰和便于修改,用一个标识符来代表常量,即给某个常量 取个有意义的名字,这种常量称为符号常量。如: #define PI 3.142、变量变量:程序执行过程中其值可以改变的量。 定义方法变量名 n;定义形式:数据类型 变量名 1,变量名2如:char chi, ch2;/* chl,ch2 为变量*/float x, y;/* x,y 为实型变量*/int a, b, c;/* a,b,c 为整型变量*/在书写变量说明时,应注意以下几点:(1)允

3、许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔 类型说明符与变量名之间至少用一个空格间隔。(2)最后一个变量名之后必须以“;”号结尾。(3)变量说明必须放在变量使用之前。一般放在函数体的开头部分。 另外,也可在说明变量为整型的同时,给出变量的初值。其格式为: 类型说明符 变量名标识符1=初值1,变量名标识符2=初值2,.;3、数据在内存中的表示整型数据:以二进制的形式表示(1) int 类型正数:如 123 (+123)原码00 0000 (0011 11 0)1t符号位0表示正00 0000 01 0011 11 0)100 0000(0011 11 0)101 111

4、1 1111 11 11反码(原码同)补码(原码同) 最大正整数用 16 位二进制(二个字节)表示215-1=214+213+212+211+210+29+2827+26+25+24+23+22+21+20=32767负数:如-23原码1000 00000 1旦01f符号位1表示负反码(符号位不动,飞它取反1L1lb1 11 10 00 0 1 0 0补码(补码加1)Ill 11 1 11llllllllo Io 0 0 1 0 11 I已知补码求原负数符号位不动,其它取反加1 取反 最大负整数1 0 0 00 0 0 00 1 11 11 0 1加1-215=32768 因为 -215 -(

5、215-1) 所以用 -21510 0000)001111 0)1而不用 -(215-1)(2)unsigned (int) 类型称为无符号整数,它不是指不带“+ 或 -”号的整数,而是指内存表示这类数时没有符号位,16位二进制都用来表示数,因此1111111111 11215+214+213+212+211+210+29+2827+26+25+24+23+22+21+20=65535最小数 0(3) long (int) 类型0000000000000 0)0用 32 位二进制(四个字节)表示,其他同 int 型(4) short 类型有的计算机(小型、中型、大型机) int 即是 long

6、 ,而 short 用 16 位二进制(二个字节)表示。因此C语言中,short 一定是短整型,long 一定是长整型,而int因不同的系 统而不同。PC 586机int即short,所以一般不用short。(5)在C语言中,整型常量有三种形式的写法:十进制整数(0 - 9)表示。通常整数的写法。八进制整数(0 - 7)表示。在整数的前面加数字0。十六进制整数(0 - f)表示。在整数的前面加Ox。长整型常量表示方法:在整数的后面加L或1。字符型数据:以二进制的形式表示内存中表示为char 型 用 8 位二进制(一个字节)表示如a,在程序中要用单引号表示,输出时无单引号,26+25+20=97

7、 即 ASCII 码 97实型数据:以二进制的形式表示(1) float 类型如123.45 (+123.45)用32位二进制(四个字节)表示为0.12345X103 0.12345的二进制表03的二进制表示32位不 个指数符指数小数部分0.12345+103不同的系统,n的位数有不同,n长,精度咼,但可表示的指数小,能表示的数的范围 小。反之,则能表示的数的范围大,但精度低。 float 类型又称为“浮点” 类型,把实数 的小数点都看成在第一位,而用指数位“浮动”小数点。(2) double 类型与float同只不过用64位二进制(八个字节)表示。因此精度高,称双精度。4、各类数值型数据之间

8、的混合运算整型、单精度型、双精度型数据可以混合运算。前已述及,字符型数据可以和整型数据 通用,因此,整型、实型(包括单、双精度)、字符型数据间可以混合运算。例如:10+a+1.5T2.34*b 是合法的。在进行运算时,不同类型的数据要转换成同一类型,然后进行运算。转换的方法 有两种,一种是自动转换,一种是强制转换。1. 自动转换 自动转换发生在不同类型的数据混合运算时,由编译系统自动完成。自动转换遵循以下 规则:(1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。(2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算 时,先把int量转成long型后再进行

9、运算。(3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式, 也要先转换成 double 型,再作运算。(4)char型和short型参与运算时,必须先转换成int型。(5) 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为 左边量的类型。 如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低 精度,丢失的部分按四舍五入向前舍入。图2-1 表示了类型自动转换的规则。图中横向向左的箭头表示必定发生的转换,如字符型数据必先转成整型,单精度数据先 转成双精度数据,等等。高 double floatA水longunsigned低 intcha

10、r,short图2-1类型转换方向图中纵向的箭头表示当运算对象为不同的类型时转换的方向。例如整型与双精度型数据 进行运算,先将整型数据转换成双精度型数据,然后在两个同类型数据(双精度)间进行运 算,结果为双精度型。注意箭头方向只表示数据类型级别的高低,由低向高转换。不要理解 为整型先转成无符号型,再转成长整形,再转成双精度型。如果一个整型数据与一个双精度 型数据运算,是直接将整型转成双精度型。同理,一个整型数据与一个长整型数据运算,先 将整型转成长整型。换言之,如果有一个数据是单精度型或双精度型,则另一数据要先转成双精度型,结果 为双精度型。如果两个数据中最高级别为长整型,则另一数据转成长整型

11、,结果为长整型。 其它依此类推。假设i已指定为整型变量,f为单精度实型变量,d为双精度实型变量,e 为长整型变量,有下面式子:10+a+i*f-d/e运算次序为:1. 进行10+ a的运算,先将a转换成整数97,运算结果为107。2. 进行i*f的运算,先将i和f都转换成双精度型,运算结果为双精度型。3. 整数107和i*f的积相加,先将整数107转换成双精度型(107.000000),运算结果 为双精度型。4. 进行 d/e 的运算,先将 e 转换成双精度型,运算结果为双精度型。5. 将10+ a +i*f的结果与d/e的商相减,结果为双精度型。上述的类型转换是由系统自动进行的。2. 强制转

12、换强制类型转换是通过类型转换运算来实现的。其一般形式为:( 类型说明符) ( 表达式 )其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(float) a把a 转换为实型,(int)(x+y)把x+y的结果转换为整型。在使用强制转换时应注意以下问题:(1) 类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成 (int)x+y则成了把x转换成int型之后再与y相加了。(2) 无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进 行的临时性转换,而不改变数据说明时对该变量定义的类型。【例 2-9】main( )float f=

13、5.75;printf(int)f=%d,f=%fn,(int)f,f);运行结果:(int)f=5,f=5.75本例表明,f虽强制转为int型,但只在运算中起作用,是临时的,而f本身的类型并 不改变。因此,(int)f的值为5(删去了小数),而f的值仍为5.75。二、运算符、表达式1、算术运算符算术运算符+、-、*、/、%(求余数)例如: 3+2 1.2*3.25%31/2A 运算规则1) 如果运算数类型一致,则结果为运算数的类型。2) 如果运算数类型不一致,则系统自动转换,使运算符 两边类型一致后再进行运算。例 1 1.0/2.0 结果为 0.5例 2 1/2 结果为 0例 3 15/3.

14、0 结果为 5.0B 运算符优先级从高到低依次是( )、*、/、%、+、-括号级别最高, *、/、%三个同级别, +、-同级别。例 1 5+2*(-2)+15%15/3 结果为 1例 2 3+sqrt(225)-5*(-3)结果为 33赋值表达式格式: 变量名=表达式例如: a=10 a=a+1 a=b=7+1 为合法表达式a+b=8 a=7+1=b 为非法表达式 整个表达式的值等于最左边变量的值。例如: a=b=c=8*8 整个表达式最后的值为 64 复合赋值表达式复合运算符: +=、-=、*=、/=、%=例如: n=n+1 表达式可写成 n+=1n=n%3 表达式可写成 n%=3n*=m+

15、3 表达式可写成 n=n*(m+3)例1假设变量a初值为9,计算下列表达式。a+=a-=a+a解答:1) 计算a+a,结果为18,a值未变。2) 计算a-=18,即a=a-18,结果为-9, a值变为-9。3)计算a+=-9,即a=a+(-9),结果为-18, a值变为-18。整个表达式最后结果为-18, a最后值为-18。 注意: a=a+1 为赋值表达式,而 a=a+1; 为赋值语句。 自加和自减运算符例如:a+和+a等价于a=a+1b-和-b 等价于 b=b-1a+和+a的区别:假设a的初值为5表达式a+值为5,最后a值为6。表达式+a值为6,最后a值为6。逗号表达式格式: 表达式1,表

16、达式2,,表达式n从左至右依次计算每个表达式,最后一个表达式的值即为 整个逗号表达式的值。例如: 表达式 i=3,+i,i+5 最后结果为 9, i 最后值为 4。2、关系运算符关系运算符小于大于=大于或等于= =等于!=等于关系运算的结果只有两种: 真或假C 语言中用 1 表示真,用 0 表示假。例1 6=6 a,A, 5,结果均为真,值为1例2 6!=6 D,=,d, 9,F,结果均为假,值为0注意几点:由两个符号组成的关系运算符不能分开前四个运算符优先级相同且高于后两个 关系符低于算术运算符,但高于赋值运算符(=)女口: a+b=c 相当于(a+b)=c 关系表达式的值:一个是真(用1

17、来表示);另一个是假(用0来表示) 注意“=“和”=“的区别4、逻辑运算符&|与运算 或运算 非运算运算规则: A&B若 A 、B 均为真,则 A&B 的值为真,否则为假 A|B若 A 、 B 均为假,则 A|B 的值为假,否则为真 !A 若 A 为真,则 !A 的值为假,否则为真 逻辑运算真值表ab!A!BA&BAIIB真真假假真真真假假真假真假真真假假真假假真真假假练习题一、 单项选择题1下列数据中属于“字符串常量”的是( )。A.”a”B.ABCC.,abc0,2下列数据中属于“字符串常量”的是( )。A.ABCB.“ABC”C.abc3. 在PC机中,n在内存占用的字节数是()。A.1

18、B.2C.34. 在PC机中,”axff”在内存占用的字节数是()。A. 5B. 6C. 35. 字符串”ABC”在内存占用的字节数是()。A. 3B. 4C. 66. 字符串”ABCD”在内存占用的字节数是()。A. 4B. 6C.77. 在 C 语言中,合法的长整型常数是()。A. 0LB. 4962710C.0.0548387438.在 C 语言中,合法的短整型常数是()。A. OLB. 0821C.400009. 下列数据中不属于“字符常量”的是()。A. aB. 160C.07010. char型常量在内存中存放的是()。A. ASCII代码值 B. BCD代码值 C.内码值D. a

19、D. aD. 4D. 4D. 8D. 8D. 2.1869e10D. 0x2aD. 070D. 十进制代码值A. 0, 0B. 0, 1C. 1, 0D. 1, 111. 设整型变量 m,n,a,b,c,d 均为 0,执行(m=a=b) |(n=c=d)后,m,n 的值是()。12. 设整型变量 m,n,a,b,c,d 均为 1,执行“(m二ab)&(n=ab) ”后,m,n 的值是()。A. 0,0B. 0,1C. 1,0D. 1,113. 设a为2,执行下列语句后,b的值不为0.5的是()。A. b=1.0/aB. b=(float)(1/a) C. b=1/(float)aD. b=1/

20、(a*1.0)D. b=a3?2:2D. 2, 3, 214. 设 a 为 5,执行下列语句后, b 的值不为 2 的是( )。A.b=a/2B.b=6-(-a)C. b=a%215. 执行语句“x=(a=3,b=a) ”后,x,a,b的值依次为()。A.3, 3,2B.3, 2, 2C. 3, 2,316. int b=0,x=1;执行语句 “if(x+) b=x+1;” 后,x,b 的值依次为()。A. 2,3B. 2,0C. 3,0D. 3,217设有语句int a=3;,则执行了语句a+=a-=a*a;后,变量a的值是()。A.3B.0C.9D.1218设有语句int a=3;,则执行

21、了语句a+=a-=a*=a;后,变量a的值是()。A.3B.0C.9D.1219. int a=4,b=3,c=-2,d=2;逻辑表达式 a0&b&c0&d0 的值是()。A.1B.0C.-1D.出错20. 在以下一组运算符中,优先级最高的运算符是()。A. =B. =C. %D. & 21设整型变量i的值为3,则计算表达式i-i后表达式的值为()。对A. 0B. 1C. 2D.表达式出错22. 设整型变量i,j=3;则计算表达式i=j+j后i,j的值为()。A. 4,4B. 6,6C. 4,6D. 6,423. 设整型变量a,b,c均为2,表达式a+b+c+的结果是()。A.6B.9C.8D

22、.表达式出错24. 设整型变量i值为2,表达式(+i) + (+i) + (+i)的结果是()。A.6B.12C.15D. 表达式出错25设整型变量i,j值均为3,执行了 “j=i+,j+,+i”后,i,j的值是()。A. 3,3B.5,4C.4,5D. 6,626. 若已定义x和y为double类型,则表达式;x=1,y=x+3/2的值是()。A. 1B.2C.2.0D. 2.527. sizeof(double)的结果值是()。A8B.4C.2D.出错28. 表达式“1?(0?3:2):(10?1:0)” 的值是( )。A. 3B.2C.1D.029. 设 a=1,b=2,c=3,d=4,

23、则表达式:ab?a:cd?a:d 的结果为()。A. 4B. 3C. 2D. 130. 设a为整型变量,不能正确表达数学关系:10a15的C语言表达式是()。A. 10a15B. a=11|a=12|a=13|a=14C. a10&a15D. !(a=10)&!(a=15)31.int a=0; if(a=1) a+=10; 结果的值是( )。A. 0B. 11C. 10D. 出错D. a=7+b,c=a+7D. f=(3.2,1.0)D. i+32. 下列表达式中符合C语言语法的赋值表达式是()。A. a=7+b+c=a+7B. a=7+b+=a+7C. a=(7+b,b+,a+7)33.

24、设 f 是实型变量,下列表达式中不是逗号表达式的是( )。A. f=3.2,1.0B. f0,f10C. f=2.0,f034. 下列表达式中,不正确的表达式是( )。A. a=1,b=1B. y=int(x)C. a=b=535. 若有以下定义: chara、intb、floatc、doubled, 则表达式 a*b+d-c 值的类型是( )。A.floatB.intC.charD.double36.int n; float f=13.8;执行“n=(int)f)%3”后,n 的值是()。A.1B.4C.4.333333D.4.637. 用十进制数表示表达式“12|012”的运算结果是( )

25、。A.1B.0C.14D.1238设有整型变量a=35,表达式“(x&15)&(x|15)”的值是()。A. 0B. 1C. 15D. 3539. 设字符型变量a=3,b=6,计算表达式c=(ab)2后c的二进制值是()。A. 00011100B. 00000111C. 00000001D. 0001010040. 设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中值为0的是()。A.a&bB.a=bC.a|b+c&b-cD.!(ab)&!c|1)41设a是char型变量,其值字符为1,则把其值变成整数1的表达式是()。A.(int)aB.int(a)C.a=a-48D.

26、a/(int)a42.设a是int型变量,其值为3,则把其值变成字符3的表达式是()。A.(char)aB.a=3C.a=a-48D.a=a+4843设ch是char型变量,其值为A,则下面表达式的值是()。ch=(ch=A&ch=Z)?(ch+32):chA. AB. aC. ZD. z44. 设有整型变量i、j、k,i值为3,j值为6。计算表达式“k=ij3; ”后,k的值是()。A. 56B. 51C. 40D. 2745. 设有无符号短整型变量i、j、k,i值为013,j值为0x13。计算表达式“k=i|j3; ”后, k 的值是( )。A. 06B. 0177776C. 066D.

27、017776646. 设有无符号短整型变量a值为331,计算表达式“a=(a4)&(04)”后,a的值是()。A. 0B. 15C. 015D. 017二、填充题1. 在内存中存储“A”要占用个字节,存储A要占用个字节。2. C语言中的逻辑值“真”是用表示的,逻辑值“假”是用表示。逻辑表达式值为“真”是用表示的,逻辑表达式值为“假”是用表示的。3. 符号常量的定义方法是。4. 说明变量时,若省略存储类型符,系统默认其为 存储类别,该存储类别的类型符为:。5. 无符号基本整型的数据类型符为,双精度实型数据类型符为,字符型数据类型符为。6. 定义变量的完整语句格式是。7. 设下列运算符:、+、+、&、b 的值为 ,abc 的值为 。10. 若已知a=10,b=20,则表达式!ab的是值为。12.设整型变量x,y,z均为5: 执行“x-二y-z” 后x= , 执行“x%=y+z ”后x=, 执行“x=(yz)?x+2:x-2,3,2” 后 x= 。13 .能表述“20vXv30或Xv-100”的C语言表达式是 。a14.请写出数学式bXc的C语言表达式 。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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