1、C+程序设计练习试卷 1及答案与解析 0 阅读下列说明和 C+代码,回答问题。 说明 已知下列程序运行时的输出应为: 1:1 1:1 1:1 C+程序 01 #include iostream 02 using namespace std; 03 class stick 04 protect; 05 _ ; 06 Stock(int n, int pr=1) 07 shares=n; share_val=pr; 08 ; 09 void stock( ) ; 10 public: 11 /成员函数 12 void output( ) 13 _ shares “:“ share val endl
2、; 14 15 private: 16 /成员变量 17 int shares; 18 int share_val; 19 ; 20 21 void main( ) 22 Stock a(1); a. output( ); 23 Stock b; b. output( ); 24 Stock C=Stock( ); c.output( ); 25 请补齐上述代码中的空缺 (1)和 (2)。 1 _ _ 2 类 Stock的定义中有两处错误,请指出错误所在行号并给出该行修改后的完整结果。 3 指出 该代码是否存在内存泄漏。 4 阅读以下说明和 C+代码,填补空缺。 说明 C+标准模板库中提供了
3、vector模板类,可作为动态数组使用,并可容纳任意数据类型,其所属的命名空问为 std。vector模板类的部分方法说明如表 12-3所示。 表 12-3 vector模板类的部分方法C+代码 #include iostream #include vector using namespace _ ; typedef vector _ INTZECTOR; const int ARRAY_SIZE=6; void ShowVector(INTVECTOR int main( ) INTVECTOR theVector; /初始化 theVector,将 theVector的元素依次设置为 0至
4、 5 for (int cEachItem=0; cEachItem ARRAY_SIZE; cEachItem+) theVector. push_back( _ ); ShowVector(theVector); /依次输出 theVector中的 元素 theVector. erase(theVector. begin( )+3); ShowVector(theVector); void ShowVector(INTVECTOR return; INTVECTOR: iterator _ ; for(theIterator = theVector.begin( ); theIterato
5、r != theVector.end( ); theIterator+) cout *theIterator; if(theIterator ! =thevector. end( )-1)cout “,“; cout endl; 该程序运行后的输出结果为: 0, 1 , 2, 3, 4, 5 _ 5 阅读下列说明、图和 C+代码,填补空缺。 说明 已知对某载客车辆 (Car)进行类建模,如图 12-2所示,其中类 Engine表示发动机引擎,类 Wheel表示车轮,类Body表示车身,类 Driver表示司机,类 Passenger表示乘客。const int _ =7; /定义最多载客数 c
6、onst int MAX_WHEELS=5; /定义最多轮胎数 class Body /此处代码省略 ); /车身类 class Passenger /此处代码省略 ; /乘客类 Class Wheel /此处代码省略 ; /车轮类 Class Driver /司机类 public: string name; /表示第几路公交车司机 Driver(string driverName): marne( _ ); /构造函数 ; class Engine /引擎类 public: string engineNo; /引擎编号 Engine(string engineNo) _ - engineNo
7、=engineNo; /构造函数 ; Class Car /汽车类 protected: Engine *engine; Driver *driver; Body body; Wheel *wheelsMAX_WHEELS; Passenger *passengersMAX_PASSENGERS; public: Car(Driver *driver)( /构造函数 this- driver=driver; engine=new Engine(“TX653 6型号引擎 “); for(int index=0; index MAX_WHEELS; index+) wheelsindex=new
8、Wheel( ); for(int index=0; index passengersindex=NULL; virtual -Car( ) /析构函数 for (int index=0; index MAX_WHEELS; index+) delete wheelsindex; delete _ ; int getPassengerNumber( ) /获取车上乘客数量 /此处代码省略 void getonpassenger(Passenger *apassenger ) /乘客上车 /此处代码省略 void run( ) /开车 if(driver=NULL)cout “司机尚未上车 !“
9、; return; /此处代码省略 ; void main( ) Driver driver(“第五路公交车司机 “); Car car( _ ); Passenger passengersMAX_PASSENGERS; for(int index=0; index MAX_PASSENGERS; index+) /乘客上车处理 car. getOnPasSenger( car. run( ); 5 阅读下列说明、图和 C+代码,回答问题。 说明 已知四个类之间的关系如图12-3所示,分别对每个类的方法进行编号,例如, Shape的 perimeter( )方法为 1号,表示为 “1:peri
10、meter( )”, Rectangle类的 perimeter( ) 2号,表示为“2:perimeter( )”,依此类推,其中,每个类的 perimeter方法都为虚函数且方法签名相同。 C+代码 Triangle *tr=new Triangle( ); Square *sq=new Square( ); Shape *sh=tr; 6 关于上述 C+代码中 sh和 tr的以下叙述中,哪两个是正确的 (写出编号 )? sh和 tr分别引用同一个对象; sh和 tr分别引用同一类型的不同的对象; sh和 tr分别引用不同类型的不同对象; sh和 tr分别引用同一个对象的不同复制; sh和
11、 tr所引用的内存空间是相同的。 7 写出下面消息对应的方法编号 (如果该消息错误或者没有对应的方法调用,请填写 “无 ”)。 tr- height( ) 8 sh- perimeter( ) 9 sq- height( ) 10 sq- perimeter( ) 11 sh- height( ) 12 tr- perimeter( ) 13 不考虑内存释放问题,下列赋值语句中哪两个是合法的 (写出合法赋值语句的编号 ) sq=sh; sh=tr; tr=sq; sq=tr; sh=sq。 C+程序设计练习试卷 1答案与解析 【知识模块】 C+程序设计 1 【正确答案】 Stock( ):sh
12、ares(1),share_val(1)或 Stock( ):share_val(1),shares(1)。 Cout 【知识模块】 C+程序设计 2 【正确答案】 第 4行,修改为: public: 第 9行,修改为: Stock( ) 【知识模块】 C+程序设计 3 【正确答案】 不存在内存泄漏 【试题解析】 由题中程序可知类 Stock有默认的构造函数,且该构造函数将初始化类中一些成员变量,所以 (1)处应该为 Stock的构造函数。成员函数 output用于输出成员变量的值,所以 (2)处应为 cout。对于 问题 2由于类至少有一个公共的构造函数,所以第 4行的 protect应该改
13、为 public,而析构函数不能有返回值,所以第 9行应该去掉 void。对于 问题 3main函数中类的使用没有通过 new操作符生成 Stock类的对象,所以不存在内存泄漏 【知识模块】 C+程序设计 4 【正确答案】 std int cEachItem theIterator 0, 1, 2, 4, 5 【试题解析】 本题考查的是 C+语言的基本应用。在使用 C+标准库中的对象时,要引入标准的命名空间,空 (1)处应为 std,空 (2)处是用来指定 vector对象的类型,此处应为 int,空 (3)处是将循环变量的值存入 theVector中,所以应为cEachItem,空 (4)处
14、代码主要是循环输出 theVector对象的内容,因此应为定义迭代器变量 theIterator。程序开始会输出 0, 1, 2, 3, 4, 5,再次输出时则为 0,1, 2, 4, 5。 【知识模块】 C+程序设计 5 【正确答案】 MAX_PASSENGERS driverName this engine &driver 【试题解析】 根据类图 描述,分析可得:一辆汽车可以载 0 7名乘客,一辆汽车可以被一个或者多个司机驾驶,并且一辆汽车有 4 5个轮胎,一个引擎和一个车框架。程序代码中空 (1)处表示一辆汽车最多载客数目,从后面的程序代码分析可得,应该填写 MAX_PASSENGERS
15、。空 (2)处用于构造一个司机对象,需要司机名称 driverName作为参数。空 (3)处主要设置车的假设司机,由于参数的名称与成员变量的名称相同,因此需要加上 this以示区别。空 (4)处所对应代码段是汽车 car的析构函数,与 car的构造函数相对应,需要将构造函数中创建的引擎和 车轮删除,所以空 (4)处应为删除引擎。空 (5)处用于产生一个汽车对象,所以,需要给汽车对象传递合适的参数,构造方法中需要传递一个司机对象,因此应该将 driver对象传递到汽车对象中。 【知识模块】 C+程序设计 【知识模块】 C+程序设计 6 【正确答案】 【知识模块】 C+程序设计 7 【正确答案】 3 【知识模块】 C+程序设计 8 【正确答案】 5 【知识模块】 C+程序设计 9 【正确答案】 无 【知识模块】 C+程序设计 10 【正确答案】 4 【知识模块】 C+程序设计 11 【正确答案】 无 【知识模块】 C+程序设计 12 【正确答案】 5 【知识模块】 C+程序设计 13 【正确答案】 【知识模块】 C+程序设计