第三章 数据类型及其运算_第1页
第三章 数据类型及其运算_第2页
第三章 数据类型及其运算_第3页
第三章 数据类型及其运算_第4页
第三章 数据类型及其运算_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 数据类型及其运算知识点提示1C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。2C的运算符种类、运算优选级和结合性。3不同类型数据间的转换与运算。4C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则。知识点一C的数据类型1数据类型的概念数据类型在高级语言中的实质是为解决数据在程序中的表示(常量)、内存单元的分配(变量)及其加工的描述(算符和表达式)这三个基本问题。在高级语言中,任何数据都是有类型的,即不同类型的数据有不同的存储属性及操作属性,将数据按其操作属性和存储属性进行分类,就是数据类型的概念。2C的数据类型在C语言中,

2、数据类型分为基本类型、导出类型(构造类型)、空类型、指针类型。基本类型有:整型、实型、字符型、枚举类型。数据有常量与变量之分,它们分别属于这些类型。3常量在程序运行过程中,其值不发生变化的量,也就是在程序中直接给出的数据,在词法记号中属于文字。常量分为字面常量(直接常量)和符号常量。在C语言中,符号常量是用无参数的宏定义实现的,即用标识符代表某一字面常量,其定义形式为:#define 标识符(宏名) 字面常量4变量在程序运行过程中,其值可以改变的量。变量实质在C中是为解决不同类型数据在计算机中存储时内存单元的分配问题。一个变量对应相应的内存单元,且变量有对应的变量名,变量名实际上是内存单元的符

3、号地址。将变量对应内存单元所存放的当前值,称为变量的值,对变量的访问是按地址进行的,即通过变量名找到相应内存单元的地址,对其存储单元进行读、写操作。记住:变量的类型、变量名、变量的值是其三大基本属性。5整型数据·整型常量的表示方法十进制整数:如123,-456等。八进制整数:以0为前导的八进制整数。如0123、-03467,而0879非法。十六进制数:以0x为前导的十六进制整数。如0x12a、-0x78等。·整型变量整型数据在计算机内存中存放是以补码的形式存放的,整型变量有以下几种类型。基本整型: int,存储数据的长度为2字节,范围:。短整型: short int或sho

4、rt,存储数据的长度为2个字节,范围同上。长整型: long int或long,存储数据的长度为4个字节,范围:。无符号基本整型:unsignedint,取值范围:。无符号短整型:unsigned short int,取值范围:同上。无符号长整型:unsigned long int,取值范围:。·整型变量的定义在C中规定,程序中所用到的变量遵守“强制类型定义”的原则,即变量先定义后运用。其定义形式为:类型名 变量名表;。·整型数据的溢出整型数据由于为补码的存储形式,在程序的运行过程中,一旦数据超出其范围,会发生“溢出”,且在运行期间并不报错,其值是确定值,通过补码的知识可推

5、出其溢出后的具体值。·整型常量的类型若整数的值在范围内,则为int型;若其值在范围内,则为long型;一个整常量后面加字母u,则认为是unsigned int常量,若加l或L后缀,则认为是long int常量。考虑:-1u的值是多少?6实型数据·实型常量的表示方法十进制的小数形式:由数字与小数点组成,且必须有小数点,为十进制小数形式。指数形式:小数E整数,字母E之前必须有数字,且为小数。E字母后面的指数必须为整数。若尾数的小数点左边为1位非零数字,称为“规范化的指数形式”。·实型变量单精度:float,长度为4个字节,有效数字67位,范围:。双精度:double,

6、长度为8个字节,有效数字1516位,范围:。长双精度:long double,长度为10字节,有效数字1819位。·实型常量的类型在C的编译系统中将实型常量作为双精度进行处理,可以在实数加f或F后缀,使编译系统将其当作单精度进行处理。7字符数据·字符常量字符常量是用单撇号括起来的单字节字符,或用单撇号括起来的转义字符。字符在计算机内存中以ASCII码的形式存储。C的转义字符形式如下:n:换行符,ASCII码值为10。t:水平制表符(跳到下一个tab位置),ASCII码值为9。b:退格,ASCII码值为8。r:回车,将光标移到本行的开头,ASCII码值为13。f:换页,ASC

7、II码值为12。:反斜杠字符“”,ASCII码值为92。':单撇号字符,ASCII码值为39。":双撇号字符,ASCII码值为34。ddd:1到3位8进制数所代表的字符。xhh:1到2位16进制数所代表的字符。·字符变量类型名为char,用来存放一个字符,长度为1个字节。字符数据在内存中以ASCII码存储,因此,可认为它为整型的子集,与整型数据通用,其对应的整数值为ASCII值。这样,字符可以整型形式输入输出,可参预算术运算。值得注意的是,有些系统(Turbo C)将字符变量中的最高位作为符号位,即将字符处理成signed char,这样其值的范围为:-128127

8、。如果使用ASCII码为128255之间的字符,则以整型输出时,就会得负值。如果将字符不想按有符号数处理,则定义字符变量时可定义为unsigned char类型,这时其值范围为:0255。·字符串常量字符串常量是用一对双撇号括起来的字符序列。字符串它为字符数据的构造类型,即若干个字符按其序列在内存连续存放,并在末尾加上字符串结束标记“0”。在字符串中,有串长的概念。把字符串的起始字符到结束标记之间的字符个数,称为字符串的长度,注意字符个数在计数时,结束标记不在其中。记住:字符串在C中,属于构造类型,实质就是字符数组,而没有字符串变量。8各类数值型数据的混合运算整型、实型、字符型数据在

9、进行混合运算时,要进行数据类型的转换。其转换分为隐式转换与强制转换两类。隐式转换在表达式出现不同的类型的操作数、赋值运算的左值与右值的类型不同时、函数实参与形参的类型不一致时由系统自动完成。强制转换是由用户通过强制类型转换的运算符完成的。表达式中对操作数隐式转换的原则如下:整型提升:若字符型、短整型参预运算时,先将其转换为int型。浮点提升:若单精度型参预运算时,将其转换为double型。低类型向高类型转换:在完成整型、浮点型提升后,若有不同类型数据进行运算时,遵循低类型向高类型的转换原则。数据类型由低到高的顺序为:intunsignedlongunsigned longdouble。二算术运

10、算符和算术表达式在C语言中,除控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。运算符描述数据的运算加工,算符在C语言中占据着非常重要的地位。掌握运算符,要从以下四个方面进行考虑:l 运算符的功能:表示什么加工或运算。l 运算符与加工对象(操作数)之间的关系:所要求操作数的数目及类型。l 运算符的运算优先级别:不同级别算符的运算顺序。l 运算符的结合性:右结合性与左结合性决定了同级算符的运算顺序。表达式是用运算符将其加工对象连接起来,符合C语法规则的式子,主要完成对数据加工描述的过程,运算对象包括常量、变量、函数、表达式。在C中,认为独立的变量、常量、函数是最简单的表达式。1基本的算

11、术运算符+:加法运算符(双目),或正值运算符(单目)。-:减法运算符(双目),或负值运算符(单目)。*:乘法运算符(双目)。/:除法运算符(双目)。%:模运算符,或称求余运算符(双目)。记住:l 两整型数据进行除法运算的结果为整型。l 模运算符的操作数要求为整型对象。l a%b的含义为:a-a/b*b。2算符的优先级和结合性优先级别:(+,-)(单目)(*,/,%)(+,-)(双目)。(高低顺序)结合性:单目算符为右结合性,双目算符为左结合性。3强制类型转换运算强制类型转换运算是将一个表达式转换成所需要的类型,主要用于隐式转换不能实现的目的时。其形式为:(类型名)(表达式)。强制类型转换运算符

12、的优先级别与单目运算符为同级。4自增、自减运算符自增、自减运算符为单目算符,要求运算对象为变量,不能为常量、函数和表达式,其作用是使变量的值增1或减1。设a为一左值对象,则自增、自减运算符的含义可解释如下。前缀形式:x=-a等价于a=a-1;x=a。x=+a等价于a=a+1;x=a。也就是说,-a表达式的值为a自减后的值,与变量的值相同。+a道理相同。后缀形式:x=a等价于x=a;a=a-1。x=a+等价于x=a;a=a+1。也就说,a+表达式的值为变量自增前的值,变量值最终为增1后的值。自增、自减运算符与单目运算符为同级运算,结合方向为右结合性。注意:自增、自减运算符主要用于循环控制与指针变

13、量中,不要滥用。5赋值运算符和赋值表达式·赋值运算符赋值运算是C程序中最基本、最频繁的操作,通过赋值算符“=”实现。其格式为:变量=表达式。将赋值算符左边的对象称为左值,它代表是内存单元,而将其右边的对象称为右值,它为表达式。整个赋值表达式是有值的,其值与类型就是其右值。记住:赋值运算结合性为右结合性,优先级仅高于逗号运算符。·赋值时的类型转换当右值类型与左值类型不一致时,要进行类型转换,其转换的原则是将右值类型转换为左值类型。(1)左值为整型,右值为实型时,将舍弃右值的小数部分。记住:不进行四舍五入。(2)左值为实型,右值为整型,数值不变,以浮点数形式存储到左值中。(3)

14、左值为单精度,右值为双精度时,将截取右值前面7位有效数字。(4)左值为整型,右值为字符型时,取决于系统对字符型类型的处理。若将字符型处理为unsigned char,则在赋值时,不进行符号位的扩展,而是对高端补零。若将字符处理为(如Turbo C)signed char,则在赋值时要进行符号位的扩展。(5)左值为char型,右值为int、short、long型时,将截取右值的低8位传送给左值。(6)左值为long型,右值为int型时,赋值时要进行符号位的扩展。(7)左值为int型,右值为long型,将截取右值的低16位传送给左值。(8)左值为long int型,右值为unsigned int型

15、时,将右值的高端补零,传送给左值。(9)左值为带符号整型,右值为长度相同无符号整型,也将进行原始传送。(10)左值为无符号整型,右值为长度相同的有符号整型,则也进行原始传送。记住:不同类型整型数据之间的赋值,其实质是按存储单元的存储形式直接传送,而且左值的结果要以补码进行处理。6复合的赋值运算符赋值算符与双目算符的组合,可构成复合的赋值运算,其目的是为简约程序的书写。但并非所有的双目算符都能与赋值算符构成复合运算,约定算术算符、位运算符可与赋值算符组成复合赋值运算。复合赋值运算符组成的表达式:左值=表达式。可解释为:左值=左值(表达式)。其中可为:+、-、*、/、%、<<、>

16、>、&、|、。记住:复合的赋值算符最终完成的是赋值运算,因此它与赋值算符的优先级与结合性相同。7逗号运算符与逗号表达式用逗号将若干个表达式连接起来可构成逗号表达式,它可完成表达式的顺序求值。所以逗号表达式的形式为:表达式1,表达式2,表达式n。该表达式可完成n个表达式的顺序求值,其求解顺序,按逗号连接的顺序从左到右顺序求解,最终逗号表达式的值和类型与表达式n的类型及值相同。记住:逗号算符在C语言算符的优先级最低,结合性为左结合性。8求字节运算符关键字sizeof可作为算符,其形式为:sizeof(表达式)、sizeof(类型名)或sizeof 表达式。它可得到表达式类型所对应的字

17、节数目。例如:sizeof(5*6.)的值为8,sizeof('A'+'b')的值为2,sizeof(2+4l)的值为4,sizeof('A')的值为1。记住:当sizeof算符作用在数组名上,将得到的是该数组所分配内存单元的总字节数。9条件运算符条件运算符是C语言中惟一的三目算符,其构成条件表达式的形式为:表达式1?表达式2:表达式3。含义是:先对表达式1进行求解,若表达式1的值为非零值,则求解表达式2,并将表达式2的值作为整个条件表达式的值;若表达式1的值为零值,则求解表达3,并将表达式3的值作为整个条件表达式的值。条件运算符可完成简单的分支

18、程序设计,其算符的优先级仅仅高于赋值运算,算符的结合方向为右结合性。三关系运算符和关系表达式关系运算可认为是简单的逻辑运算,实际上是“比较运算”。关系算符将两个值进行比较,判断其比较结果是否符合给定的条件。如果符合,则运算结果为1(成立),否则为0(不成立)。值得注意的是,在C语言中无逻辑数据类型,因此,关系成立与否,是用整数值来表示的,这样关系表达式也可作为操作数出现在其它表达式中。1关系运算符及其优先级C语言提供6种关系运算:<、<=、>、>=(这四个为相同优先级);=、!=(相同优先级)。前四个优先级大于后两个的优先级。记住:关系运算的优先级低于算术运算,高于赋值

19、运算。2关系表达式用关系算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,便构成关系表达式,它的值为整型的0或1,通常用来描述简单的条件。四逻辑运算符和逻辑表达式在C语言中,涉及到逻辑运算时,首先要确立的概念是,C语言的数据类型并没有逻辑型数据。但有逻辑数据(量)的概念,在C语言中,认为所有的非零值为逻辑真值,零值为逻辑假。也就是说,数值性数据可参预逻辑运算,在进行逻辑运算时,非零值转换为逻辑真,零值转换为逻辑假。1逻辑运算符及其优先级别C语言提供三种逻辑运算符:(1)&&:逻辑与(逻辑乘),双目运算符。(2)|:逻辑或(逻辑加

20、),双目运算符。(3)!:逻辑非,单目运算符。假设a、b是两个逻辑量(常量、变量、函数、表达式),则各逻辑算符意义如下:a&&b:当且仅当a、b都为非零值时,a&&b的值为1,否则a&&b的值为0。所以,逻辑与运算可表述若干个条件同时成立的情形。a|b:当且仅当a、b都为零值时,a|b的值为0,否则a|b的值为1。所以,逻辑或运算可表述若干个条件只要求有一个成立的情形。!a:当a的值为非零值时,!a的值为0;当a的值为零值时,!a的值为1。所以,逻辑非运算用来表述反向的条件。上述三个逻辑运算符的优先级由高到低的顺序为:!&&|。算

21、术运算、关系运算、逻辑运算符的优先级由高到低的顺序为:!算术算符关系运算符&&|条件运算符赋值运算符(包括复合赋值运算)逗号运算符。2逻辑表达式用逻辑算符将逻辑量连接起来的式子,便构成逻辑表达式,它通常用来描述一些较为复杂的条件。由于逻辑表达式比较复杂,所以要密切关注逻辑表达求值时各算符的优先级及其结合性。而且,如果逻辑表达式是用逻辑算符将若干个子表达式连接起来,则并非所有的子表达式都进行求值。当根据某一子表达式的值就能确定整个逻辑表达式的值,则其余的子表达式就不求解了,这点要特别注意。例如,x=10,a=3,当执行表达式:+x|+a&&+a后,x的值为11,而

22、a的值不变。若执行表达式:+x&&+a|+a后,则x的值为11,a的值为4(只执行一次+a)。五位运算位运算是指进行二进制位的运算。位运算符要求的运算对象为整型、字符型数据,不能是实型数据。进行位运算时,是按运算对象在内存中的存储形式进行相应的逐位运算。1位运算符和位运算按位与运算符(&):按二进制位进行“与”运算,规则:1&0=0,0&0=0,0&1=0,1&1=1。按位或运算符(|):按二进制位进行“或”运算,规则:1|0=1,0|0=0,0|1=1,1|1=1。异或运算符():按二进制位进行“异或”运算,规则:10=1,00=0,0

23、1=1,11=0。取反运算符():对二进制位按取反,规则:1=0,0=1。左移位运算符(<<):形式:a<<n,用于将一个数a的二进制位全部左移n位。右移位运算符(>>):形式:a>>n,用于将一个数a的二进制位全部右移n位。记住:对一个整数左移n位,相当于乘以,此结论只适应于该数在左移时被溢出舍弃的高位中不包含1的情况。例如,unsigned char c=100,c<<=2,则c的值为零。同理,对一个正整数右移n位,相当于除以。说明:在右移位时,要注意符号位的问题。对无符号数,右移时左边高位移入0。对于有符号数,右移时左边高位移入

24、符号位(算术右移)。(若移入零称逻辑右移)2不同长度数据的位运算如果两个数据长度不同的数进行位运算时,系统会将二者按右端对齐。对数据长度短的数据要进行高位扩展,其原则是:若该数为无符号数,则高位补0;若该数为有符号数,则高位进行符号位的扩展。3位运算的优先级结合性优先级由高到低的顺序:按位取反移位算符按位与按位异或按位或。结合性:单目为右结合性,单目为左结合性。六运算符优先级和结合性小结1算符优先级小结算符优先级由高到低总的顺序如下:成员运算符单目算符双目算符条件算符赋值算符逗号算符。双目算符的优先级由高到低的顺序如下:算术运算移位运算(<<、>>)关系运算(<、

25、<=、>、>=、!=)逻辑位运算(&|)逻辑运算(&&|)。2算符结合性小结成员运算符的结合性为左结合性。单目算符的结合性为右结合性。双目算符的结合性为左结合性。条件算符的结合性为右结合性。赋值算符(复合赋值运算)的结合性为右结合性。逗号算符的结合性为左结合性。同步训练题一选择题1假设有变量a、b和p均已经定义如下,计算结果不精确的是( )。int a=3,b=4; double p;Ap=(double)a/(a+b) B. p=a/(a+b)C. p=(double)(a)/(a+b) D. p=(double)(a)/(double)(a+b)2

26、类型修饰符unsigned修饰类型错误的是( )。Achar B. short C. long int D. double3下列十六进制的整常数表示中,错误的是( )。A0xaf B. 0x1b C. 2fx D. 0xAE4下列double型常量的表示中,错误的是( )。AE15 B. .35 C. 3E5 D. 3E-55下列字符常量表示中,错误的是( )。A'105' B. '*' C. '4f' D. 'a'6下列算术算符中,能作用于实型数据类型的是( )。A+ B. % C. >> D. &7下列各算

27、术运算符是,不能作用于实型数据类型的是( )。A/ B. && C. ! D. 8下列各运算符中,优先级最高的是( )。A+(加运算符) B. *(单目) C. <= D. *=9下列各运算符中,优先级最低的是( )。A? : B. | C. | D. !=10下列各运算符中,结合性从左到右的是( )。A三目算符 B. 赋值算符 C. 比较算符 D. 单目算符11下列表达式中,非法的是( )。 已知:int a=5; float b=5.5;Aa%3+b B. b*b&&+a C. (a>b)+(int) b%2 D. -a+b12下列表达式中,合法

28、的是( )。 已知:double a=3.4; int b=3;Aa<<2 B. (a+b)|b C. !a*=b D. a=5,b=3.1,a+b13下列关于类型转换的描述中,错误的是( )。A在不同类型操作数组成的表达式中,其表达式类型一定是最高类型doubleB逗号表达式的类型是最后一个表达式的类型C赋值表达式的类型是左值的类型D在由低向高的类型转换中是保值映射14假设有0xaf和0xa7两个十六进制数,若用运算符,其运算结果是( )。A0xa7 B. 0xff C. 0x8 D. 0xaf15下列语句中不能完成算术表达式65*4/2操作的是( )。Aint a=64,b=4

29、,c=2; B. int z=64*4/2; int z=a*b/2C. int a=64,b=4,c=2; D. int z=64<<2>>1; int z=a<<b>>c;16假定有以下变量定义:int k=7,x=12;则能使值为3的表达式是( )。Ax%=(k%=5) B. x%=(k-k%5)C. x%=k-k%5 D. (x%=k)-(k%=5)17设有语句char a='72',则变量a( )。A包含1个字符 B包含2个字符C包含3个字符 D说明不合法18在C语言中,合法的字符常量是( )。A084 Bx43 Cab

30、 D”0”19在下列选项中,不正确的赋值表达式是( )。A+t Bn1=(n2=(n3=0) Ck=i=j Da=b+c=120在以下一组运算符中,优先级最高的运算符是( )。A<= B+ C D&&21设a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是( )。Aa&&b Ba<=b Ca|b+c&&b-c D!(a<b)&&!c|1)22有以下语句:char a=3,b=6,c;c=ab<<2;则c的二进制值是( )。A00011011 B00010100 C

31、00011100 D0001100023执行下列的程序段,则b的值为( )。int x=35;char z=A;int b; b=(x&15)&&(z<a);A0 B1 C2 D324设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围为( )。A0255 B065535 C-3276832767 D-25625525若有以下类型说明语句:char w;int x;float y; double z;则表达式w*x+y-z的结果为( )类型。Afloat Bchar Cint Ddouble26设x,y为float变量,则以下( )是合法

32、的赋值表达式。Ax+ By=float(10) Cy=x%2 D*x=1027若x、z均为int型变量,则执行以下语句后,z的值为( )。x=5; z=(-x)*(-x)*(-x);A125 B24 C8 D6028若a、b、c均为int型变量,则执行以下语句后的a、b值分别为( )。a=b=c=1;+a|+b|-c;A1和1 B1和2 C2和1 D2和229下列表达式中能正确判断x落在0,1区间的是( )。Ax>=0|x<=1 B!(x<0|x>1)Cx>=0&x<=1 Dx>=0 AND x<=130下述程序的输出结果是( )。#in

33、clude<stdio.h>void main()int a,b;int x=5,y=10;a=(-y=x+)?-y:+x;b=y+;printf("na=%d,b=%dn",a,b);Aa=6,b=9 Ba=6,b=10 Ca=7,b=10 Da=7,b=931属于合法的C语言长整型常量是( )。A5876 B0L C2E10 D(long)587632有关下述语句输出的判断中,正确的是( )。#include<stdio.h>void main()char x='xe0'printf("%dn",x);A赋值非

34、法 B输出值不确定 C输出值为-32 D输出值为22433在C语言中,要求参加运算必须是整数的运算符是( )。A/ B! C% D=34下列语句中,符合语法的赋值句是( )。Aa=7+b+c=a+7; Ba=7+b+=a+7;Ca=7+b,b+,a+7 Da=7+b,c=a+7;35下述程序的输出结果是( )。#include<stdio.h>void main()int a=2;a%=4-1;printf("%d,",a);a+=a*=a-=a*=3;printf("%dn",a);A2,0 B1,0 C-1,12 D2,1236下列正确的

35、语句是( )。Aint x=y=z=0; Bint z=(x+y)+;Cx=+3=2; Dx%=2.5;37( )是非法的C语言转义字符。Ab B0xf C037 D38语句char s=092;的作用是( )。A使s包含一个字符 B说明不合法,s的值不确定C使s包含四个字符 D使s包含三个字符39在C语言中,整数-8在内存中的存储形式是( )。A1111 1111 1111 1000 B1000 0000 0000 1000C0000 0000 0000 1000 D1111 1111 1111 011140字符串”ABC”的长度是( )。A11 B7 C5 D341为了计算s=10!,则定

36、义变量s时应该使用的数据类型是( )。Aint Bunsigned Clong D以上三种类型均可42执行下述程序片段时输出的结果是( )。unsigned a=65535;printf(“%d”,a);A65535 B-1 C-32767 D143执行下述程序片段时的输出结果是( )。int x=13,y=5; printf(“%d”,x%=(y/=2);A3 B2 C1 D044( )是不正确的C语言赋值语句。Ax=1,y=2; Bx+; Cx=y=5; Dy=int(x);45与数学公式等价的C语言表达式是( )。Asqrt(sin(x) Bsqrt(abs(sin(x*3.14/180

37、)Csqrt(abs(sin(x*(/180) Dsqrt(fabs(sin(x*3.14/180)46下列语句中符合C语言语法的赋值表达式是( )。Ax=(3+b,z)=x+3 Bx=7+y,y+,z+Cx=y+2=x+y+z Dx=3+y+=x+347执行下列的程序段后,a的值是( )。int a=5; printf(“%dn”,(a=3*5,a*4,a+5);A45 B20 C15 D1048下列程序段的输出是( )。int x=023; printf(“%d”,-x);A17 B18 C23 D2449对下列的语句,判断正确的是( )。f=(3.0,4.0,5.0),(2.0,1.0,

38、0.0);A语法错误 B使f的值为5.0C使f的值为0.0 D使f的值为2.050执行下述程序片段时的输出结果是( )。int x=10; x+=3+x%(-3); printf(“%d”,x);A11 B12 C14 D1551执行下述程序片段时的输出结果是( )。int x=5,y=2+(x+=x+,x+8,+x); printf(“%dn”,y);A13 B14 C15 D1652下述正确的C语言常量是( )。AE2 B1.5E2.3 C5.0E D3e-353下述错误的C语言常量是( )。A5. B.25 C090 D0xf54与代数式不等价的C语言表达是( )。Ax*y/u*v Bx

39、*y/u/v Cx*y/(u*v) Dx/(u*v)*y55下列程序段的输出结果是( )。char a=1; a=2,A+1; printf(“%d”,a);A输出一个随机值 B因赋值不合法,不能通过编译C2 D6656下述程序段的输出结果是( )。int x=1; y=+x; z=x+; printf(“%d,%d,%d”,x,y,z);A3,2,2 B3,2,3 C2,2,2 D2,2,157sizeof(double)是一个( )。A函数调用 B整型表达式 C双精度表达式 D浮点型表达式58下列表达式中,( )不满足“当x的值为偶数时值为真,为奇数时值为假”的要求。Ax%2=0 B!x%

40、2!=0 C(x/2*2-x)=0 D!(x%2)59在x的值处于-2到2,4到8时值为“真”,否则为“假”的表达式是( )。A(2>x>-2)|(4>x>8) B!(x<=-2)|(x>=2)|(x<=4)|(x>=8)C(x<2)&&(x>-2)&&(x>4)&&(x<8)D(x>-2)&&(x<2)|(x<8)&&(x>4)60下述程序段的输出结果是( )。int a=-1,b=4,k; k=(a+<=0)&

41、amp;&(!(b-<=0); printf(“%d,%d,%d”,k,a,b);A0,0,3 B0,1,2 C1,0,3 D1,1,261对于条件表达式(M)? a+ : (a-)来说,其中的表达式M等价于( )。AM=0 BM=1 CM!=0 DM!=162下列程序段的输出结果是( )。char x=112,y=211; printf(“n%d”,x<<2|y>>1);A-23 B0 C-32768 D-2263下述程序段中,( )可以实现选项本身的功能要求。A将一个整数x右移m位 B计算一个整数x高字节值 x>>m x=x&0xf

42、f00C将整数x高位移入变量y的低4位 D计算一个整数x低字节的高4位值 int x=0xabcd,y; y=(x>>4)&0x000f y=x>>16-4;64若定义:unsigned a=31003,b=21103;则表达式abb的值为( )。A1 B31003 C21103 D065下述表达式中,( )可以正确表示或的关系。A(x> =1)|(x< =0) Bx>=1|x<=0Cx>=1.or.x<=0 Dx>=1|x<=066下述程序片段中,执行( )后变量i的值为4。Aint i=1,j=0; Bint

43、i=0,j=0; i=j=(i=3)+); (i=2,i+(j=2);Cint i=1,j=1; Dint i=0,j=1; i+=j+=2; (j=1)?i+=3:i=2;67下述程序段的输出结果是( )。int a,b,c; int x=5,y=10;a=(-y=x+)?y:+x; b=y+; c=x;printf(“na=%d,b=%d,c=%d”,a,b,c);Aa=6,b=9,c=7 Ba=6,b=9,c=6Ca=7,b=9,c=6 Da=7,b=9,c=768下述程序段的输出结果是( )。int a,b,c=241; a=c/100%9; b=-1&&-1; pri

44、ntf(“%d,%d”,a,b);A2,0 B2,1 C6,1 D0,-169下述程序段的输出结果是( )。int a=2,b=3,c=4,d=5; int m=2,n=2;a=(m=a>b)&&(n=c>d)+5; printf(“%d”,n);A0 B1 C2 D570以下不正确的叙述是( )。A在C程序中,逗号运算符的优先级最低B在C程序中,APH和aph是两个不同的变量C若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变。D当从键盘上输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。71以下正确的叙述是( )

45、。A在C程序中,一行只能写一条语句B若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数。C在C程序中,无论是整数还是实数,都能被准确无误地表示D在C程序中,%是只能用于整数运算的运算符72设变量a是int型,f是float型,i是long型,则表达式10+a+i*f值的数据类型为( )。Aint Bfloat Clong Ddouble73设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达是( )。An=(n*100+0.5)/100.0 Bm=n*100+0.5,n=m/100.0Cn=n*100+0.5/10

46、0.0 Dn=(n/100+0.5)*100.0二填空题1C程序语言中的基本数据类型所占用内存空间大小的关系是 【1】 。2使用【1】运算符来计算数据类型或变量所占用内存空间的大小。3若有定义:int a10;则sizeof(a)的值为【1】 。4若给x赋值为168和给y赋值为字母A,均定义为只读方式,其语句分别是【1】和【2】 。5C程序语言中的关系运算符满足条件时返回【1】 ,不满足条件时返回【2】 。6表达式!(5<8)|2<6的值是【1】 。7C程序语言中可以参与位运算符操作的数据类型有【1】 。8若有定义:float a=3,b=4; short c=3;则sizeof(

47、A+c)的值为 【1】 ,sizeof(a+3.5)的值为 【2】 ,sizeof(a+b)的值为 【3】 。9C语言中,unsigned char类型数据占【1】个字节存储;float类型数据占用【2】个字节存储;表达式sizeof(3.14)的值是【3】 ;表达式sizeof(long double)的值是【4】 。10char型常量在内存中存放的是【1】码值。1172在内存中占【1】个字节,”72”在内存中占【2】个字节。12表达式5%(-3)的值是【1】 ,表达式-5%(-3)的值是【2】 。13定义:int m=5,n=3;则表达式m/=n+4的值是【1】 ,表达式m=(m=1,n=

48、2,n-m)的值是【2】 ,表达式m+=m-=(m=1)*(n=2)的值是【3】 。14定义:int m=5,n=3;m=1,2,n+;则m的值是【1】 ,n的值是【2】 。15假设m是一个三位数,从左到右用a、b、c表示各位数字,则从左到右各个数字是bac的三位数的表达式是【1】 。16下述程序的输出结果是 【1】 。 void main() printf(“%sn”,”tab%L”060084”); 17数学式子写成C语言的表达式是【1】 。18算术运算符、赋值运算符、逗号运算符、自加(减)运算符,它们参加运算的先后顺序为【1】 。19若a为float型变量,则运算表达式:a=1.5,a+

49、,2+a+后,该表达式的值是【1】 ,变量a的值是【2】 。20若有:int a=1,b=2,c=3。则执行:c=(a+=a+10),a=b+;后,a、b、c的值分别为【1】 。习题解析一. 选择题1.答案B。两整数进行除运算时,结果为整型。在表达式中,若操作数类型不同时,其隐含转换规则为低类型向高类型进行转换,所以A、C、D选项都可得到精确结果。2答案D。类型修饰符singed、unsigned只能修饰整型与字符型。3答案C。十六进制整常数要求以0x为先导,另外要注意其基本数符为:09、AF。4答案A。实常量的指数表示中,E字母左端必有数字,其右边必须有数字,且为十进制整常数。5答案C。转义

50、字符若为十六进制的ASCII字符,要求以“x”为先导,且不能超过两位。6答案A。自增、自减算符,要求为左值对象,并未对其类型作要求。而其余算符要求的操作数均为整型或字符型。7答案D。位运算符要求的操作数为整型、字符型。8答案B。单目运算符的优先级仅低于成员运算。9答案D。赋值运算符的优先级仅仅高于逗号运算符,而复合的赋值算符与赋值算符为同级。10答案C。运算符的结合性为右结合性的有:单目算符、条件运算符、赋值运算符。11答案D。当多运算符“-”进行组合时,总是尽可能地按从左到右的原则进行组合成一个运算符。因此将“-a+b”解释为“-(-a)+b”,而“-”只能用于左值对象,而不能作用于表达式“-a”。12答案D。位运算符的运算对象为整型或字符型,所以A、B选项错。而对于C选项,由于单目算符“!”优先级高于“*=”,表达式“!a*=b”解释为“(!a)*=b”,所以C选项为非法表达式。13答案A。在表达式中,若进行完整型与浮点提升后,操作数类型相同时,不再进行类型转换。如表达式中的操作数由字符型、整型组成,则表达式的最终类型为整型。14答案C。15答案D。表达式“a<

温馨提示

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

评论

0/150

提交评论