1、程序员-C+程序设计及答案解析(总分:22.01,做题时间:90 分钟)一、B试题一/B(总题数:2,分数:4.00)阅读下列说明和 C+代码,回答问题。说明已知下列程序运行时的输出应为:1:11:11:1C+程序01 #include iostream02 using namespace std; 03 class stick04 protect; 05 U (1) /U; 06 Stock(int n, int pr=1) 07 shares=n; share_val=pr; 08 ; 09 voidstock( ) ; 10 public: 11 /成员函数12 void output(
2、 )13 U (2) /Ushares“:“share valendl; 14 15 private:16 /成员变量17 int shares; 18 int share_val; 19 ; 2021 void main( )22 Stock a(1); a. output( ); 23 Stock b; b. output( ); 24 Stock C=Stock( ); c.output( ); 25 请补齐上述代码中的空缺(1)和(2)。(分数:2.00)(1).(分数:1.00)填空项 1:_填空项 1:_类 Stock 的定义中有两处错误,请指出错误所在行号并给出该行修改后的完整结
3、果。(分数:2.01)(1).(分数:0.67)填空项 1:_填空项 1:_二、B试题二/B(总题数:1,分数:5.00)阅读以下说明和 C+代码,填补空缺。说明C+标准模板库中提供了 vector 模板类,可作为动态数组使用,并可容纳任意数据类型,其所属的命名空问为 std。vector 模板类的部分方法说明如表 12-3 所示。 表 12-3 vector 模板类的部分方法方法 含义push_back(k) 向 vector 对象的尾部添加一个元素 kbegin() 返回一个迭代器对象,该对象指向 vector 中的第一个元素end() 返回一个迭代器对象,该对象指向 vector 中的最
4、后一个元素empty() 测试 vector 对象是否为空erase(ptr) 删除 vector 中 ptr 指向的元素C+代码#includeiostream#includevectorusing namespace U(1) /U; typedef vectorU (2) /UINTZECTOR; const int ARRAY_SIZE=6; void ShowVector(INTVECTOR int main( ) INTVECTOR theVector; /初始化 theVector,将 theVector 的元素依次设置为 0 至 5for (int cEachItem=0; c
5、EachItemARRAY_SIZE; cEachItem+)theVector. push_back(U (3) /U); ShowVector(theVector); /依次输出 theVector 中的元素theVector. erase(theVector. begin( )+3); ShowVector(theVector); void ShowVector(INTVECTOR return; INTVECTOR:iterator U(4) /U; for(theIterator = theVector.begin( ); theIterator != theVector.end(
6、); theIterator+)cout *theIterator; if(theIterator ! =thevector. end( )-1)cout“,“; coutendl; 该程序运行后的输出结果为:0, 1 , 2, 3, 4, 5U (5) /U(分数:5.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_三、B试题三/B(总题数:1,分数:5.00)阅读下列说明、图和 C+代码,填补空缺。说明已知对某载客车辆(Car)进行类建模,如图 12-2 所示,其中类 Engine 表示发动机引擎,类 Wheel 表示车轮,类 Body
7、 表示车身,类 Driver 表示司机,类 Passenger 表示乘客。(分数:5.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_四、B试题四/B(总题数:3,分数:8.00)1.关于上述 C+代码中 sh 和 tr 的以下叙述中,哪两个是正确的(写出编号)? sh 和 tr 分别引用同一个对象; sh 和 tr 分别引用同一类型的不同的对象; sh 和 tr 分别引用不同类型的不同对象; sh和 tr 分别引用同一个对象的不同复制; sh 和 tr 所引用的内存空间是相同的。(分数:1.00)填空项 1:_写出下面消息对应的方法编号(
8、如果该消息错误或者没有对应的方法调用,请填写“无”)。(分数:6.00)(1).tr-height( )(分数:1.00)填空项 1:_(2).sh-perimeter( )(分数:1.00)填空项 1:_(3).sq-height( )(分数:1.00)填空项 1:_(4).sq-perimeter( )(分数:1.00)填空项 1:_(5).sh-height( )(分数:1.00)填空项 1:_(6).tr-perimeter( )(分数:1.00)填空项 1:_2.不考虑内存释放问题,下列赋值语句中哪两个是合法的(写出合法赋值语句的编号) sq=sh;sh=tr;tr=sq;sq=tr
9、;sh=sq。(分数:1.00)填空项 1:_程序员-C+程序设计答案解析(总分:22.01,做题时间:90 分钟)一、B试题一/B(总题数:2,分数:4.00)阅读下列说明和 C+代码,回答问题。说明已知下列程序运行时的输出应为:1:11:11:1C+程序01 #include iostream02 using namespace std; 03 class stick04 protect; 05 U (1) /U; 06 Stock(int n, int pr=1) 07 shares=n; share_val=pr; 08 ; 09 voidstock( ) ; 10 public: 1
10、1 /成员函数12 void output( )13 U (2) /Ushares“:“share valendl; 14 15 private:16 /成员变量17 int shares; 18 int share_val; 19 ; 2021 void main( )22 Stock a(1); a. output( ); 23 Stock b; b. output( ); 24 Stock C=Stock( ); c.output( ); 25 请补齐上述代码中的空缺(1)和(2)。(分数:2.00)(1).(分数:1.00)填空项 1:_ (正确答案:Stock( ):shares(1
11、),share_val(1)或 Stock( ):share_val(1),shares(1)。)解析:填空项 1:_ (正确答案:cout)解析:类 Stock 的定义中有两处错误,请指出错误所在行号并给出该行修改后的完整结果。(分数:2.01)(1).(分数:0.67)填空项 1:_ (正确答案:第 4 行,修改为:public:)解析:填空项 1:_ (正确答案:第 9 行,修改为:Stock( ))解析:_解析:二、B试题二/B(总题数:1,分数:5.00)阅读以下说明和 C+代码,填补空缺。说明C+标准模板库中提供了 vector 模板类,可作为动态数组使用,并可容纳任意数据类型,其
12、所属的命名空问为 std。vector 模板类的部分方法说明如表 12-3 所示。 表 12-3 vector 模板类的部分方法方法 含义push_back(k) 向 vector 对象的尾部添加一个元素 kbegin() 返回一个迭代器对象,该对象指向 vector 中的第一个元素end() 返回一个迭代器对象,该对象指向 vector 中的最后一个元素empty() 测试 vector 对象是否为空erase(ptr) 删除 vector 中 ptr 指向的元素C+代码#includeiostream#includevectorusing namespace U(1) /U; typede
13、f vectorU (2) /UINTZECTOR; const int ARRAY_SIZE=6; void ShowVector(INTVECTOR int main( ) INTVECTOR theVector; /初始化 theVector,将 theVector 的元素依次设置为 0 至 5for (int cEachItem=0; cEachItemARRAY_SIZE; cEachItem+)theVector. push_back(U (3) /U); ShowVector(theVector); /依次输出 theVector 中的元素theVector. erase(the
14、Vector. begin( )+3); ShowVector(theVector); void ShowVector(INTVECTOR return; INTVECTOR:iterator U(4) /U; for(theIterator = theVector.begin( ); theIterator != theVector.end( ); theIterator+)cout *theIterator; if(theIterator ! =thevector. end( )-1)cout“,“; coutendl; 该程序运行后的输出结果为:0, 1 , 2, 3, 4, 5U (5
15、) /U(分数:5.00)(1).(分数:1.00)填空项 1:_ (正确答案:std)解析:填空项 1:_ (正确答案:int)解析:填空项 1:_ (正确答案:cEachItem)解析:填空项 1:_ (正确答案:theIterator)解析:填空项 1:_ (正确答案:0,1,2,4,5)解析:解析 本题考查的是 C+语言的基本应用。在使用 C+标准库中的对象时,要引入标准的命名空间,空(1)处应为 std,空(2)处是用来指定 vector 对象的类型,此处应为 int,空(3)处是将循环变量的值存入 theVector 中,所以应为 cEachItem,空(4)处代码主要是循环输出
16、theVector 对象的内容,因此应为定义迭代器变量 theIterator。程序开始会输出 0,1,2,3,4,5,再次输出时则为 0,1,2,4,5。三、B试题三/B(总题数:1,分数:5.00)阅读下列说明、图和 C+代码,填补空缺。说明已知对某载客车辆(Car)进行类建模,如图 12-2 所示,其中类 Engine 表示发动机引擎,类 Wheel 表示车轮,类 Body 表示车身,类 Driver 表示司机,类 Passenger 表示乘客。(分数:5.00)(1).(分数:1.00)填空项 1:_ (正确答案:MAX_PASSENGERS)解析:填空项 1:_ (正确答案:driv
17、erName)解析:填空项 1:_ (正确答案:this)解析:填空项 1:_ (正确答案:engine)解析:填空项 1:_ (正确答案:&driver)解析:解析 根据类图描述,分析可得:一辆汽车可以载 07 名乘客,一辆汽车可以被一个或者多个司机驾驶,并且一辆汽车有 45 个轮胎,一个引擎和一个车框架。程序代码中空(1)处表示一辆汽车最多载客数目,从后面的程序代码分析可得,应该填写 MAX_PASSENGERS。空(2)处用于构造一个司机对象,需要司机名称 driverName 作为参数。空(3)处主要设置车的假设司机,由于参数的名称与成员变量的名称相同,因此需要加上 this 以示区别
18、。空(4)处所对应代码段是汽车 car 的析构函数,与 car 的构造函数相对应,需要将构造函数中创建的引擎和车轮删除,所以空(4)处应为删除引擎。空(5)处用于产生一个汽车对象,所以,需要给汽车对象传递合适的参数,构造方法中需要传递一个司机对象,因此应该将 driver 对象传递到汽车对象中。四、B试题四/B(总题数:3,分数:8.00)1.关于上述 C+代码中 sh 和 tr 的以下叙述中,哪两个是正确的(写出编号)? sh 和 tr 分别引用同一个对象; sh 和 tr 分别引用同一类型的不同的对象; sh 和 tr 分别引用不同类型的不同对象; sh和 tr 分别引用同一个对象的不同复
19、制; sh 和 tr 所引用的内存空间是相同的。(分数:1.00)填空项 1:_ (正确答案:)解析:写出下面消息对应的方法编号(如果该消息错误或者没有对应的方法调用,请填写“无”)。(分数:6.00)(1).tr-height( )(分数:1.00)填空项 1:_ (正确答案:3)解析:(2).sh-perimeter( )(分数:1.00)填空项 1:_ (正确答案:5)解析:(3).sq-height( )(分数:1.00)填空项 1:_ (正确答案:无)解析:(4).sq-perimeter( )(分数:1.00)填空项 1:_ (正确答案:4)解析:(5).sh-height( )(
20、分数:1.00)填空项 1:_ (正确答案:无)解析:(6).tr-perimeter( )(分数:1.00)填空项 1:_ (正确答案:5)解析:2.不考虑内存释放问题,下列赋值语句中哪两个是合法的(写出合法赋值语句的编号) sq=sh;sh=tr;tr=sq;sq=tr;sh=sq。(分数:1.00)填空项 1:_ (正确答案:)解析:解析 根据题中代码可知,仃指向一个 Triangle 对象,sq 指向一个 Square 对象,sh 和 tr 指向同一个 Triangle 对象。所以问题 1 中正确,由于 sh 和 tr 指向同一个对象,其引用的内存空间也必然相同,错误。对于问题 2 中的消息,tr 指向 Triangle 对象,所以 tr-heighl:( )调用Triangle 类的 height 方法;sq 指向 Sqtlare 对象,但 Square 没有 height 方法,所以 sq-height( )没有对应任何方法调用,但 Square 类有 perimeter 方法,所以 sq-perimeter( )调用 Sqtlare 类的perimeter 方法,其他几项同上。问题 3 中,赋值运算的左边应该是右边的父类或同一类型才可以正确赋值。所以正确的是。