1、C+程序设计真题 2016 年 10 月及答案解析(总分:100.00,做题时间:90 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.一个函数的功能不太复杂,但要求被频繁调用,选用最适合的是_(分数:1.00)A.内联函数B.重载函数C.递归函数D.嵌套函数2.假定有类 AB,有相应的构造函数定义,能正确执行“AB a(4),b(5),c3,*p2= “语句,请问执行完此语句后共调用该类析构函数的次数为_(分数:1.00)A.14B.5C.3D.13.在下面有关析构函数特征的描述中,正确的是_(分数:1.00)A.一个类中可以定义多个析构函数B.析构函数名与类名完全相同C.析构
2、函数不能指定返回类型D.析构函数可以有一个或多个参数4.派生类的对象对它的哪一类基类成员是可以访问的_(分数:1.00)A.公有继承的基类的公有成员B.公有继承的基类的保护成员C.公有继承的基类的私有成员D.保护继承的基类的公有成员5.如果 A 是抽象类,则下面正确的是_(分数:1.00)A.A 中没有纯虚函数B.A a;C.A a3;D.A*pa;6.下列关于纯虚函数与抽象类的描述中,错误的是_(分数:1.00)A.纯虚函数是一种特殊的函数,它允许没有具体的实现B.抽象类是指具有纯虚函数的类C.一个基类的说明中有纯虚函数,该基类的派生类一定不再是抽象类D.抽象类只能作为基类来使用,其纯虚函数
3、的实现由派生类给出7.cout 是 C+的_(分数:1.00)A.关键字B.对象C类D.运算符8.下列哪个函数不是类的成员函数_(分数:1.00)A.构造函数B.析构函数C.友元函数D.拷贝构造函数9.下列有关重载函数的说法中错误的是_(分数:1.00)A.重载函数必须具有不同的返回值类型B.重载函数名必须相同C.重载函数参数个数可以不同D.重载函数必须有不同的形参列表10.下面说法正确的是_(分数:1.00)A.生成对象时调用析构函数B.定义类时必须写出该类的构造函数C.调用构造函数时必须在主函数中明确写出调用格式D.析构函数不可以重载11.在编译指令中,宏定义使用指令_(分数:1.00)A
4、.#defineB.#includeC.#typedefD.#friend12.假设声明了以下的函数模板,错误的调用语句是_ templateclass T T max(T x,T y)return(xy)?x:y; 并定义了 int i;char c;(分数:1.00)A.max(i,i)B.max(c,c)C.max(int)c,i)D.max(i,c)13.若有说明:int n=2,*p=,则以下非法的赋值语句是_(分数:1.00)A.n=*qB.p=nC.p=qD.*q=*p14.进行文件操作时需要包含头文件_(分数:1.00)A.iostreamB.fstreamC.stdioD.s
5、tdlib15.类模板 templateclass TclassX.;,其中友元函数 f 对特定类型 T(如 int),使函数f(XintB.friend void f(XTC.friend void A:f();D.friend void C(T);16.动态编联所支持的多态性称为运行时的多态性,支持的函数是_(分数:1.00)A.构造函数B.友元函数C.继承D.虚函数17.用运算符 delete 删除一个动态对象时_(分数:1.00)A.首先为该动态对象调用构造函数,再释放其占用的内存B.首先释放该动态对象占用的内存,再为其调用构造函数C.首先为该动态对象调用析构函数,再释放其占用的内存D
6、.首先释放该动态对象占用的内存,再为其调用析构函数18.下列字符常量的写法中,错误的是_(分数:1.00)A.“/t“B.“b“C.“*“D.“a“19.C+类体系中,不能被派生类继承的有_(分数:1.00)A.静态数据成员B.构造函数C.虚函数D.静态成员函数20.下列对派生类的描述中,错误的是_(分数:1.00)A.派生类至少应有一个基类B.派生类的成员除了自己定义的成员外,还包含了它的基类成员C.基类中成员访问权限继承到派生类中都保持不变D.一个派生类可以作为另一个派生类的基类二、第部分 非选择题(总题数:20,分数:20.00)21.C+注释方式“/”的有效范围从“/”至 1 结束。
7、(分数:1.00)22.C+程序有且只能有一个名为 1 的主函数。 (分数:1.00)23.语句“ 1;”用来向屏幕输出显示信息“Hello!”。 (分数:1.00)24.所谓“ 1”就是将一个新标识符和一块已经存在的存储区域相关联。 (分数:1.00)25.动态分配内存使用关键字 1,释放内存使用关键字 delete。 (分数:1.00)26.表达式“20/3 * sqrt(4.0)/5”值的数据类型是 1。 (分数:1.00)27.面向对象的程序设计方法是以 1 代表求解问题的中心环节。 (分数:1.00)28.对象的 1 只能由这个对象的操作来存取。 (分数:1.00)29.使用关键字
8、inline 说明的函数称为 1 函数。 (分数:1.00)30.类对象一般都包括数据成员和 1。 (分数:1.00)31.将对象作为函数参数,是将实参对象的值传递给 1。 (分数:1.00)32.C+函数的返回值类型可以是除 1 和函数以外的任何类型。 (分数:1.00)33.函数重载可使一个函数名具有多种功能,称这种特性为 1。 (分数:1.00)34. 1 是类的实例。 (分数:1.00)35.关键字 private、public 和 1 以后的成员分别叫做私有成员、公有成员和保护成员。 (分数:1.00)36.使用关键字 const 修饰的数据成员称为 1 数据成员。 (分数:1.00
9、)37.对 MyFirst 类定义析构函数是 1。 (分数:1.00)38.insert(iterator it,const T;”。 (分数:1.00)40.运算符重载需要使用关键字“ 1”。 (分数:1.00)三、改错题(总题数:5,分数:20.00)41.#includeiostream using namespace std; templateT T max(T x,T y) if(x=y)return x; else return y; void main 1 cout fn; 1;/打开指定的文件 if(!ifile) cout num price; void display()
10、cout fn; 1;/打开指定的文件 if(!ifile) cout num price; void display() cout num “ “ price endl; ; void main() book b; 2; b.display(); (分数:4.00)解析:double price,b.set()50.一个通讯录 contacts 有姓名 name 和电话 tel 两个属性,有三个成员函数 searchN、insertN 和deleteN 分别完成查找、插入和删除功能,请完成 contacts 的类图。 (分数:4.00)解析:contacts,insertN -|_|-五、程
11、序分析题(总题数:2,分数:10.00)51.给出下面程序的输出结果 #includeiostream using namespace std; class Clock public: Clock()cout “clock 的构造函数“ endl; Clock()cout “clock 的析构函数“ endl; ; class Date public: Date()cout “Date 的构造函数“ endl; Date()cout “Date 的析构函数“ endl; ; void main() Clock c; Date d; (分数:5.00)_正确答案:()解析:clock 的构造函数
12、 Date 构造函数 Date 析构函数 clock 的析构函数52.给出下面程序的输出结果 #includeiostream using namespace std; void main() void sort(int s); int score5; int i; for(i=0;i5;i+) scorei=i; sort(score); cout “运行结果是:“; for(i=0;i5;i+) cout scorei “ “; void sort(int s) int t; for(int i=0;i4;i+) for(int j=i+1;j5;j+) if(sisj) t=si; si
13、=sj; sj=t; (分数:5.00)_正确答案:()解析:运行结果是:43210六、程序设计题(总题数:1,分数:10.00)53.有一个 Person 类,私有数据成员 name、age 和 sex 分别表示人的姓名、年龄和性别。雇员类Employee 是 Person 的派生类,新增数据成员部门 department 和薪水 salary。请用 C+代码描述这两个类,并用 Employee 类的成员函数 Display 实现雇员的姓名、年龄、性别、部门和薪水的输出。(要求编写派生类的构造函数) (分数:10.00)_正确答案:()解析:#includeiostream using na
14、mespace std; class Person public: Person(char*s1=“ “,int a=0,char*s2=“ “) strcpy(name,s1);age=a;strcpy(sex,s2); protected: char name8; int age; char sex2; ; class Employee:public Person public: Employce(char*s1=“ “,int a=0,char*s2=“ “,char*s3=“ “,double s=0.0):Person(s1,a,s2) strcpy(department,s3); salary=s; void Display() cout name “ “ age “ “ sex “ “ department “ “ salary endl; private: char department20; double salary; ; void main() Employee ee(“张三“,18,“男“,“计算机“,2180.8); ee.Display();