C++吕凤翥第3版课后习题答案.pdf
《C++吕凤翥第3版课后习题答案.pdf》由会员分享,可在线阅读,更多相关《C++吕凤翥第3版课后习题答案.pdf(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+吕凤翥(第三版)课后习题答案第一章C+语言概述一、选择题1.下列各种高级语言中,(C)是面向对象的程序设计语言。A BASIC;B PASCAL;C.C+;D.C2.下列各种高级语言中,(B)最早提出了对象的概念。A.Algol 60;B.Simula 67;C.Smalltalk;D.C+解析:面向对象语言借鉴了 20世纪50年代的人工智能语言LISP,引入了动态绑定的概念和交互式开发环境的思想;始于20世纪6 0年代的离散事件模拟语言SIMULA67,引入了类的要领和继承,成形于20世纪70年代的 Smalltalko3.下述面向对象抽象的原理中,(D)是不对的。A.数据抽象;B.行为
2、共享;C.进化;D.兼容解析:面向对象抽象原理是封装,继承和多态。封装指将数据和方法封装在类中(数据抽象),继承是子类可以继承父类的数据和方法(行为共享),多态是子类可以定义自己的方法,实现父类不能实现的行为(进化)。所以选D。4.(A)不是面向对象系统所包含的要素。A.重载;B.对象;C.类;D继承;解析:面向对象三要素:封装、继承和多态,对象是类的实现,只有面向对象才存在,重载是利用名称之外的标志(比如形参)作为区分以实现名称复用。5.关于C+与 C语言的关系的描述中,(D )是错误的A.C 语言是C+的一个子集;B.C 语言与C+是兼容的;C.C+是 C语言进行了一些改进;D.C+和 C
3、语言都是面向对象的解析:c语言是面向过程的语言。6 .下面关于对象概念的描述,(A)是错误的A.对象就是C 语言中的结构变量;B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(方法)的封装体D.对象之间的信息传递是通过消息进行的解析:对象中不止封装了数据,还封装了方法(操作),C语言中的结构变量只封装了数据。7 .下面关于类概念的描述中,(D )是错误的A.类是抽象数据类型的实现B .是具有共同行为的若干对象的统一描述体C.类是创建对象的样板D.类就是C语言中的结构类型解析:类是对一系列具有相同行为对象的抽象,因此类不仅封装了数据,还封装了方法(即使是抽象方法),而 C语言中的
4、结构类型只封装了数据。8 .C+对 C语言作了很多改进,下列描述中(D )使得C语言发生了质变,即从面向过程变成为面向对象A.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C.规定函数说明必须用原型D.引进了类和对象的概念解析:面向对象的一大明显特征就是具有类和对象。9 .按照标识符的要求,(A )符号不能组成标识符A.连接符;B.下划线;C.大小写字母;D.数字字符;解析:按照C+语法规定,标识符只能由数字、字母和下划线组成,并且只能以字母或下划线开头。1 0 .下列符号中,(D)不可作为分隔符(还有一种可能答案为C)A.,;B.:;C.?;D.;解析:逗号运算符可以将多个表达式组
5、合成一个表达式,整个表达式的值由最后一个表达式决定,示例:d l,d 2,d 3o冒 号(:)和 问 号(?)是三目运算符,在三目运算符中分隔表达式,示例:d l?a l:a 20分号(;)作为语句的结束标志,只能在语句末尾使用,用在语句中间会把一个语句分为两个语句,所以分号(;)不能作为分隔符使用。二、判断题1 .C+引进了引用的概念,对编程带来了很多方便。(V )2 .C+允许使用友元,但是友元会破坏封装性。(V )3.c+中使用了新的注释符(),c语言中注释符(/*.*/)不能在c+中使用(X)4.C+中为了减轻使用者的负担,与c语言相比较C+中减少了一些运算符。(X)解析:增加了一些运
6、算符,比如强制类型转换运算符,示 例 in t(a),将a 强制转换为整形。5.C+程序中,每条语句结束时都加一个分号(力。(J)6.C+中标识符内的大小写字母是没有区别的。(X)7.C+中不允许使用宏定义的方法定义符号常量,只能用关键字const来定义符号常量。(X)解析:推 荐 使 用 c o n s t关键字,因 为 const关键字定义的常量受到编译器的保护和检查,不允许修改,安全性更高,使用宏定义定义时,因为宏定义只做简单的替换,不检查语法和进行保护,安全性不好。8.在编写C+程序时,一定要注意采用人们习惯使用的书写格式,否则将会降低其可读性。(V)9.C+是一种以编译方式实现的高级
7、语言。(V)10.在C+编译过程中,包含预处理过程、编译过程和连接过程,并且这三个过程的顺序是不能改变的。(V)解析:因为宏定义的量编译器是无法直接识别的,必须由预处理程序进行替换,在宏定义中还引入了一些头文件,需要在预处理时引入,所以预处理必须在编译之前进行。预处理结束之后,需要对源程序进行词法和语义分析,检查是否存在语法错误。连接过程是不能直接使用源码文件的,必须使用编译过程产生的对象文件。对象文件还缺少必要的C+库,或者这些文件分散在不同的地方,因此还需要把它们连接起来并生成可执行文件才能运行程序。1 1 .预处理过程是一般编译过程之后连接过程之前进行的。(X )解析:编译顺序是预处理过
8、程f编译过程f连接过程,不可改变。1 2 .源程序在编译过程中可能会出现一些错误信息,但在连接过程中将不会出现错误信息。(X )解析:连接过程需要把一个程序的多个源文件或者把对象文件和库文件连接在一起,在这个过程中可能会出现文件路径出错,库文件缺失等错误。第二章数据类型和表达式一、选 择 题1.在1 6位 机 中,int型 字 宽 为(A )字 节。A.2;B.4;C.6;D.8解析:A N S I 标准中int类型长度为4个字节,是在3 2 位机上定义的,对于1 6 位机,int类型与3 2 位机的s hor t int类型相对应,长度为2个字节。2.类 型 修 饰 符u ns ig ned
9、修 饰(D )类 型 是 错 误 的A.C har;B.int;C.long int;D.f loat解析:四种基本数据类型修饰符s ig ned、u ns ig ned、long、s hor t都适用于整型和字符型,long 还适用于d ou b le型,但是都不适用于f loat型。3 .下列十六进制的整型数常数表示中,(C )是错误的A.Oxaf;B.OXlb:;C.2fx;D.OxAE解析:16进制数都以Ox或 OX开头。4 .下 列 d ou b le型常量表示中,(A )是错误的A.E15;B.35;C.3E5;D.3E-5解析:使用E 是 doube类型的科学计数法表示形式,E
10、之前因数为1 时也不可省略,否则会被编译器当作变量名而引发语法错误。5 .下列字符常量表示中,(C)是错误的A.105;B*;C.4f;D.a解析:使用 和十六进制数表示转义字符时,必须在十六进制数前面加x:、x4f6 .下列字符串常量表示中,(无)是错误的(都没错)A yes or No ;B.0K!;C.abcdn;D.ABCO解析:C+,字符串的结束符会被自动添加,不用手动添加,浪费一个字节。7 .下列变量名中,(A )是合法的A CHINA;B.byte-size;C.double;D.A+a解析:变量名只能由字母、数字和下划线组成,且必须以字母开头,并且不能使用C+的关键字。8 .在
11、 int a 5 =l,3,5,数组元素 a l 的 值 是(C )A.1;B.0;C.3;D.29.在 intb3=1,3,2,4,5,6,0中,b2 2的值是(C)A.0;B.5;C.6;D.2解析:b 2 2 表示第三行第三列的元素,所以为6。10.下列给字符数组进行初始化中,(A)是正确的A.char si =abed;B.char s23=xyzC.char s3 3=x,y,z D.char s42 3=xyz,mnp 解析:因为每个字符串后还有一个结束符 0 ,所以实际使用空间比字符串长度多一个字节。B 选项没有预留、0空间,数组溢出。C选项声明的是多维字符数组,应该为 x ,y
12、 ),z 。D选项声明的也是多维字符数组,并且没有预留 0 空间,数组会溢出,应为c har s 4 2 4 =“x y z”,“mnp”。11.在 int a=3,*p=&a;中,*P 的 值 是(D)A.变量a 的地址值;B 无意义;C.变量P 的地址值;D.3解析:*P中存放了 a的地址值,而 a中存储的值为3,所以*p值为3。12.对于int*pa5的描述,(D)是正确的A.pa是一个指向数组的指针,所指向的数组是5 个 int型元素B.pa是一个指向某个数组中第5 个元素的指针,该元素是int型变C.pa5表示某个数组的第5 个元素的值D.pa是一个具有5 个元素的指针数组,每个元素
13、是一个int型指针解析:指针数组声明为类型 名称 长度,示例:i n t *p 4 ;数组指针声明为 类型(名称)指向数组的长度,示例:i n t (*p)3 K13.下列关于指针的运算中,(D)是非法的。A.两个指针在一定条件下,可以进行相等或不等的运算B.可以用一个空指针赋值给某个指针C.一个指针可以加上两个整数之差D.两个指针在一定条件下,可以相加解析:指针的值对应着内存地址,将指针相加得到的数值可能不是内存地址,会引发错误。指针允许的操作有赋值;与整数相加减(指针偏移);一定条件下,两个指针可以相减,得到指针之间的偏移量;两个指针之间还可以比较。14.指针可以用来表示数组元素,下列表示
14、中(A)是错误的。已知:int a37;A.*(a+l)5;B,*(*a+3);C*(*(a+l);D.*(&a00+2)解析:使用指针表示数组元素时,不能同时使用指针偏移和索引来取出数组元素。15.下列表示引用的方法中,(A)是正确的。已知:int m=10;A.int&x=m;B.int&y=10;C.int&z;D.float&t=&m解析:引用是某个已知变量或对象的别名,引用不是变量,本身没有值,也没有地址(因此不能对它赋值),它不占内存空间。引用声明格式:(被引用对象类型)&引 用 名=被引用变量名。16.下列各运算符中,(A)可以作用于浮点数。A+;B.%;C.;D.&解析:+用于
15、浮点数和用于整型的效果是一样的,其他的运算符只能用于整数。17.下列各运算符中,(D)不能作用于浮点数A./;B.&;C.!;D.解析:A 选项的除法运算符可以用于浮点数,B 选项是逻辑与,可以用于浮点数判断,C 选项是逻辑求反,可以用于浮点数,D 选项是按位求反,只能用于整型和字符型。1 8 .下列各运算符中,(B )优先级最高。A.+(双目);B.*(单目);C.=;D.*=解析:*的优先级为2 级(取 内 容)或 3 级(乘 法),+的优先级为4 级,b)+(int(b)%2);D.-a+b解析:D 选项不能将自减运算符(-)和负号一起使,会被编译器视为无效表达式。2 2 .下列表达式中
16、,(D )是合法的已知:double m=3.2;int n=3。A.m 2;B.(m+n)|n;C.!m*=n;D.m=5,n=3.1,m+n解析:A 选项,double类型不能进行移位操作:B 选项,m+n为 double类型,不能进行按位或操作;C 选项,因为取反运算符优先级大于*=,所以先取反再赋值,经过取反,左边!m 的结果为0,是一个常数,不能进行赋值。23.下列关于类型转换的描述中,(A)错误的A.在不同类型操作数组成的表达式中,其表达式类型一定是最高类型doube 型B.逗号表达式的类型是最后一个表达式的类型C.赋值表达式的类型是左值的类型D.在由低向高的类型转换中是保值映射解
17、析:A 选项,在不同类型操作数组成的表达式中,所有操作数都会被转换为最高类型进行运算,但不一定是d o u b l e 型。D 选项,由低向高的类型转换不会损失精度,即保值映射。24.下列各表达式中,(D)有二义性。已知:inta(5),b(6)A.a+b3;B.+a+b+;C.b+(a=3);D.(a=3)-a+解析:0 的优先级最高,+优先级为2级,+、-为 4级,为 5级。A 选项,根据优先级先执行+再执行3,结果为1;B选项根据优先级先执行+a,再执行a+b,再执行b加 1,结果为1 2 o C选项先赋值a=3,再执行a+b,结果为9;D选项先执行括号中的内容,再执行-,最后a 加 1
18、,结果为1。可以看到D选项的结果和预期的0一致,所 以 D具有二义性。25.用来表示指向结构变量指针的成员是(B)运算符。A.;B.-;C.;D.解析:A 是成员选择符,C是右移位,D是左移位。26.下列关于结构数组的描述中,有几处错误(A)struct abint a;char c;double a;a,ab;A.l;B.2;C.3;D.4解析:结构成员变量定义不能重名,所以共一处错误。27.下列关于结构数组的描述中,错误的是(A)A.结构数组的元素可以是不同结构类型的结构变量B.结构数组在定义时可以赋初值C.组成结构数组的结构变量的成员可以是数组D.结构数组可定义在函数体内,也可以定义在函
19、数体外解析:结构数组声明形式为stru ct结构名数组名,只能存放同一类型的结构变量。28.联合成员的地址值和所占的字节数(A)A,都相同;B.都不相同;C.前者相同;D.前者不同,后者相同。解析:联合成员是共用一块内存单元,即所有成员是共址的,单元的大小与联合中数据长度最长的相同。二、判断题1.任何字符常量与一个任意大小的整型数进行加减都是有意义的(X)解析:字符编码是有范围的,超出这个范围就失去意义。2.转义序列表示法只能表示字符不能表示数字(7)解析:转义序列表示法表示字符常量。3.在命名标识符中,大小写字母是不加区别的(X)4.C+程序中,对变量一定要先说明再使用,说明只要在使用之前就
20、可以(J)5.C+中数组元素的下标是从0开始,数组元素是连续存储在内存单元中的(V)6.数组赋初值时,初始值表中的数据项的数目可以大于或等于数组元素的个数(X)7枚举变量的取值受到该枚举变量所对应的枚举表中的枚举符的局限(V)8.指针是用来存放某种变量的地址值的变量。这种变量的地址值也可以存放在某个变量中,存放某个指针的地址值的变量称为指向指针的指针,即二级指针(V)9.引用是用来给某个变量以别名的变量。对引用的操作,实质上就是对被引用的变量的操作(J)10.运算符的优先级和结合性可以确定表达式的计算顺序(V)11.在说明语句中,inta(5),&b=a,*p=&a中,b的值和*p的值是相等的
21、(V)解析:b是对 a的引用,*p是a的指针,因此二者的值想等。12.已知:int a,;表达式(a=7)+a具有二义性。(X)13.移位运算符在移位操作中,无论左移还是右移,所移出的空位一律补0。(X)解析:右移时左边移出的空位要么一律补0,要么一律补符号位,这由机器决定。14.某个变量的类型高是指该变量被存放在内存中的高地址处(X)解析:类型高是指数据长度大。15.隐含的类型转换都是保值映射,显式的类型转换都是非保值映射(X)解析:只有由低类型向高类型转换数据精度才不会丢失,才是保值映射,由高类型向低类型转换都是非保值映射,显式的类型转换如果在转换时数据精度不丢失,也是保值映射。16.类型
22、定义可以用来定义一些C+中所没有的新的类型(X)解析:只能定义现有类型的别名。通过typedef实现。17.定义结构变量时必须指出该结构变量是属于某种结构类型的。(J)18.无名结构是不允许定义结构变量的(X)解析:可以,例如:struct int a;char c;double ac;ad,ab;15、同一结构中的不同成员变量占用不同的内存单元(V)16、联合的所有成员变量都是没有内存地址的(X)解析:联合的成员变量共用内存地址,不是没有内存地址。第三章预处理和语句一、选择题L预处理命令在程序中都是以(B)开头的。A.*;B.#;C.:;D/;2.文件包含命令中被包含的文件的扩展名(D)(也
23、可以没有)A必须为h;B.不能用h;C必须是c;D.不一定是h解析:C+中的头文件都是.h扩展名。3.下列条件编译命令中#if(A)语句序列1#elseSendifA整常量表达式;B任何标识符;C任意表达式;D被定义的宏名;4.带参数的宏定义中,程序中引用宏定义的实参(D)A只能是常量;B只能是整型量;C只能是整形表达式;D可以是任意表达式5.下列是(A)语句A.;B.a=17;C.x+y;D.coutwnw解析:语句都是以分号(力结尾的。6.下列for循环的次数为(B)for(int i(0),x=0;!x&i=5;i+)A.5;B.6;C.l;D.无限;7.下列while循环的次数是(A)
24、while(int i=0)i-;A.O:B.l;C.5;D.无限解析:先执行inti=0后再以i作为循环判断条件,因为i始终是0,所以循环条件始终不满足,循环不会运行。8,下列do while循环的循环次数为(D)已知:int i(5);do couti-endl;i-;while(i!=0)A.O;B.l;C.5;D.无限;9.下列for循环的循环体执行次数为(D)for(int i(0),j(10);i=j=10;i+,j-)A.O;B.l;C.10;D.无限10.已知:int a力,下 列switch语句中,(D)是正确的。A.switch(a)case a:a+;break;case
25、 b:b+;break;)B.switch(a+b)case l:a+b;break;case 2:a-b)C.switch(a*a)case l,2:+a;case 3,4:+b;)D.switch(a/10+b)case 5:a/5;break;default:a+b;)解析:选项A、C,case语句只能使用整常形表达式,不能使用变量;选 项 B,表达式末尾没加分号;11.下述关于循环体的描述中,(C)是错误的A.循环体中可以出现break语 句 和 continue语句;B.循环体中还可以出现循环语句;C 循环体中不能出现goto语句D.循环体中可以出现开关语句解析:got。可以出现在程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 吕凤翥第 课后 习题 答案
限制150内