二级C++分类模拟264.docx
《二级C++分类模拟264.docx》由会员分享,可在线阅读,更多相关《二级C++分类模拟264.docx(17页珍藏版)》请在冰豆网上搜索。
二级C++分类模拟264
二级C++分类模拟264
(总分:
65.00,做题时间:
90分钟)
一、选择题(总题数:
35,分数:
65.00)
1.要定义一个引用变量p,使之引用类MyClass的一个对象,正确的定义语句是______。
(分数:
2.50)
A.MyClassp=MyClass;
B.MyClassp=newMyClass;
C.MyClass&p=newMyClass;
D.MyClassa,&p=a; √
解析:
[解析]选项A错误不存在这样的定义方式;选项B定义了一个MyClass类的对象p;选项C是Java里的定义方式。
2.将:
x+y*z中的“+”用成员函数重载,“*”用友元函数重载应写为____。
(分数:
2.00)
A.operator+(operator*(y,z))
B.operator+(operator*(y,z)) √
C.operator+(x*(y,z))
D.x+(operator*(y,z))
解析:
[解析]在定义了重载运算符后的函数后,函数operator+重载了运算符“+”。
如果在类以外的其他地方定义了一个函数,在类体中用friend对该函数进行声明,此函数就称为本类的友员函数。
“*”用友元函数重载就是运算符函数不作为成员函数,而把它放在类外,“*”被改写为“operator*”。
“+”为成员函数重载,x.operator+。
所以x+y*z被改写为“x.operator+(operator*(y,z))”。
3.有如下程序:
#include<iostream>
usingnamespacestd;
classBasel{
public:
Basel(intd){cout<<d;}
~Base1(){}
};
classBase2{
public:
Base2(intd){cout<<d;}
~Base2(){}
};
classDerived:
publicBase1,Base2{
public:
Derived(inta,intb,intc,intd);
Base1(b),Base2(a),b1(d),b2(c){}
Private:
intb1;
intb2;
};
intmain(){
Derivedd(1,2,3,4);
return0;
}
运行时的输出结果是______。
(分数:
2.00)
A.1234
B.2134
C.12
D.21 √
解析:
[解析]程序在创建派生类对象d时,分别调用基类Base1和Base1的构造函数。
4.假定其中的x的单位是角度且不考虑丌的值的精度,则与数学公式
等价的C++语言表达式是______。
(分数:
2.50)
A.sqrt(cos(x))
B.sqrt(abs(cos(x*3.14/180)))
C.sqrt(abs(cos(x*(/180)))
D.sqrt(fabs(cos(x*3.14/180))) √
解析:
[解析]本题考查数学表达式的掌握,首先应转换为弧度,然后作为cos函数的参数求绝对值,最后是开方函数。
考生需要掌握的是常用的数学函数。
5.通过派生类的对象可直接访问的是______。
(分数:
1.00)
A.公有继承基类中的公有成员 √
B.私有继承基类中的公有成员
C.公有继承基类中的保护成员
D.私有继承基类中的保护成员
解析:
[解析]类的对象可直接访问的只能是该类的公有成员,采用公有继承方式时,基类的公有成员在派生类中仍然是公有成员,可以直接访问,而基类的保护成员在派生类中仍然是保护成员,不可以直接访问,选项A正确,选项C错误;采用私有继承方式时,基类中的公有成员和保护成员在派生类中都是私有成员,派生类对象无法直接访问,选项B、D错误。
答案为A选项。
6.下列关于构造函数的描述中,错误的是______。
(分数:
1.00)
A.构造函数名与类名相同
B.构造函数可以有返回值 √
C.构造函数可以重载
D.每个类都有构造函数
解析:
[解析]构造函数没有返回值,虽然叫函数但是它没有任何返回值,包括void型都不是,官方叫法为“构造器”。
7.有如下程序:
#include<iostream>
usingnamespacestd;
classCD{
public:
~CD(){cout<<"C";}
private:
charname[80];
};
intmain(){CDa,*b,d[2];return0;}
运行时的输出结果是
(分数:
2.00)
A.CCCC
B.CCC √
C.CC
D..C
解析:
8.下列符号中能够作为C++标识符的是______。
(分数:
1.00)
A.const
B.2a
C._shape √
D.-count
解析:
[解析]本题考查C++标识符的命名规则,其规则有如下几点:
①所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所有标识符不能使用C++已有的关键字;③大、小写字母表示不同意义,即代表不同的标识符。
选项A是关键字,选项B不能以数字开头,选项D包含了字符“-”,且不能以此字符开头。
故答案为C。
9.若PAT是一个类,则程序运行时,语句“pAT(*ad){3};”调用PAT的构造函数的次数是______。
(分数:
2.50)
A.0 √
B.1
C.2
D.3
解析:
[解析]PAT(*ad){3}该表达式表示一个指向类PAT的数组的指针,只是声明了该指针,而并没有进行实例化对象,因此该语句运行时并不会调用构造函数。
10.有如下类声明:
classSAMPLE
{
intn;
public:
SAMPLE(inti=0):
n(i){}
voidsetValue(intn0);
};
下列关于getValue成员函数的定义中,正确的是______。
(分数:
1.00)
A.SAMPLE:
:
setValue(intn0){n=n0;}
B.voidSAMPLE:
:
setValue(intn0){n=n0;} √
C.voidsetValue(intn0){n=n0;}
D.setValue(intn0){n=n0;}
解析:
[解析]本题考查在类外定义类的成员函数,需要使用作用域限定符“:
:
”,属于基础知识,本题答案为B。
11.有如下程序:
#include<iostream>
usmgnamespacestd;
classA{
public:
A(inti):
r1(i){)
voidprint()(cout<<"E"<<r1<<"-";}
voidprint()const{cout<<"C"<<r1*r1<<"一";}
private:
intr1;
};
intmain(){
Aa1
(2);constAa2(4);
a1.print();a2.print();
return0;
}
运行时的输出结果是______。
(分数:
2.50)
A.运行时出错
B.E2-Cl6- √
C.C4-C16-
D.E2-E4-
解析:
[解析]const关键字可以用于参与对重载函数的区分。
重载的原则是常对象调用常成员函数,一般对象调用一般成员函数。
12.有如下程序:
#include<iostream>
#include<iomanip>
usingnamespacestd;_
intmain(){
cout<<setw(10)<<serfill("x")<<setprecision(8)<<left;
cout<<12.3456793<<______<<98765;
return0;
}
若程序的输出是12.345679x98765xxxxx,则划线处缺失的部分是______。
(分数:
2.50)
A.setw(10) √
B.setfill("x")
C.setprecision(8)
D.right
解析:
13.计算斐波那契数列第n项的函数定义如下:
intfib(intn){
if(n==0)return1;
elseif(n==1)return2;
elsereturnfib(n-1)+fib(n-2);
}
若执行函数调用表达式fib
(2),函数fib被调用的次数是
(分数:
2.00)
A.1
B.2
C.3 √
D.4
解析:
[解析]针对递归调用的含义,当n为2时有fib(0),fib
(1),fib
(2)被调用,且fib(0),fib
(1)时调用结束,即共3次。
14.C++中的模板包括______。
(分数:
2.50)
A.对象模板和函数模板
B.对象模板和类模板
C.函数模板和类模板 √
D.变量模板和对象模板
解析:
[解析]模板是一种对类型进行参数化的工具,通常有两种形式:
函数模板和类模板。
函数模板针对仅参数类型不同的函数;类模板针对仅数据成员和成员函数类型不同的类。
15.若有定义语句“inti=2,j=3;”,则表达式i/j的结果是______。
(分数:
2.00)
A.0 √
B.0.7
C.0.66667
D.0.66666667
解析:
16.若一个函数的原型为“int*Xfun1(intx.int&y,charz);”,则该函数的返回值类型为______。
(分数:
2.50)
A.int* √
B.int
C.int&
D.char
解析:
[解析]函数的结果被称为返回值,返回值的类型被称为函数返回类型。
函数返回类型可以是预定义类型(如int或double)、复合类型(如int&或double*)、用户定义类型(如枚举类或void后者意指函数不返回值)。
17.下列描述正确的是______。
(分数:
1.00)
A.表示m>n为true或m<n为true的表达式为m>n&&m<n
B.switch语句结构中必须有default语句
C.if语句结构中必须有else语句
D.如果至少有一个操作数为true,则包含||运算符的表达式为true √
解析:
[解析]本题主要考查C++语言的基本语法,选项A中应该为m>n||m<n;选项B中default语句可有可无;选项C中if可以单独作为一条语句,不必须和else搭配。
18.有如下类定义:
classA{
char*a;
public:
A():
a(0){}
A(char*aa){//把aa所指字符串复制到a所指向的存储空间
a=______;
strcpy(a,aa);
strcpy(a,aa);
}
~A(){delete[]a;}
};
横线处应填写的表达式是______。
(分数:
2.50)
A.newchar[strlen(aa)+1] √
B.char[strlen(aa)+1]
C.char[strlen(aa)]
D.newchar[sizeof(aa)-1]
解析:
[解析]用new来动态创建空间,数组长度应该为将要复制的字符串长度+1。
19.软件详细设计产生的图如下:
该图是______。
(分数:
2.50)
A.N-S图
B.PAD图
C.程序流程图 √
D.E-R图
解析:
[解析]程序流程图基本图符有:
控制流(用箭头表示)、加工步骤(用方框表示)、逻辑条件(用菱形表示)。
有5种控制结构:
顺序、选择、多分支选择、后判断重复型和先判断重复型。
题目中为选择结构的程序流程图。
20.下列关于运算符重载的描述中,错误的是______。
(分数:
1.00)
A.可以通过运算符重载在C++中创建新的运算符 √
B.赋值运算符只能重载为成员函数
C.运算符函数重载为类的成员函数时,第一操作参数就是该类对象
D.重载类型转换运算符时不需要声明返回类型
解析:
[解析]运算符的重载是针对C++中原有运算符进行的,不能通过重载创造新的运算符。
21.同一概念在一处为实体而在另一处为属性或联系的冲突在视图集成中称为______。
(分数:
2.50)
A.命名冲突
B.概念冲突 √
C.域冲突
D.约束冲突
解析:
[解析]同一概念在一处为实体,而在另一处为属性或联系的冲突称为概念冲突。
22.打开文件时可单独或组合使用下列文件打开模式:
①ios_base:
:
app②ios_base:
:
binary
③ios_base:
:
in④los_base:
:
out
若要以二进制读方式打开一个文件,需使用的文件打开模式为______。
(分数:
2.50)
A.①③
B.①④
C.②③ √
D.②④
解析:
[解析]ios_base:
:
binary是作为二进制文件打开,ios_base:
:
app是为添加数据而打开,ios_base:
:
in是为输入而打开,ios_base:
:
out是为输出而打开。
故答案应选C。
23.下列控制格式输入/输出的操作符中,能够设置浮点数精度的是______。
(分数:
1.00)
A.setprecision √
B.setw
C.setfill
D.showpoint
解析:
[解析]iomanip中定义的操纵符包括:
setfill(ch)用ch填充空白、setprecision(n)将浮点精度置为n、setw(w)、读写w个字符的值showpoint设置小数点。
24.下面程序的输出结果是____。
#include<iostream>
#include<string>
usingnamespacestd;
voidmain(){
charp1[10],p2[10];
strcpy(p1,"abc");
strcpy(p2,"ABC");
charstr[50]="xyz";
strcpy(str+2,strcat(p1,p2));
cout<<str;
}
(分数:
2.00)
A.xyabcABC √
B.yzabcABC
C.xyzabcABC
D.zabcABC
解析:
[解析]本题考查字符串操作函数和指针的使用。
strcat(p1,p2)将字符串p1和p2连接,接着调用strcpy函数,从数组str的第3个位置开始复制连接后的字符串,因此本题答案为xyabcABC。
25.下面程序的运行结果是
#include"iostream.h"
#definesum(a,b)a*b
voidmain()
{intx;
x=sam(1+2,3);
cout<<x;
}
(分数:
1.00)
A.0
B.9
C.7 √
D.5
解析:
26.有如下程序:
#include<iostream>
usingnamespacestd;
classA{
public:
virtualvoidfunc1(){cout<<"A1";}
voidfunc2(){cout<<"A2";}
};
classB:
publicA{
public:
voidfunc1(){cout<<"B1";}
voidfunc2(){cout<<"B2";}
};
intmain(){
A*p=newB;
p->func1();
p->func2();
deletep;
return0;
}
执行这个程序的输出结果是______。
(分数:
2.50)
A.B1B2
B.A1A2
C.B1A2 √
D.A1B2
解析:
[解析]本题考查虚函数的使用。
基类指针p指向派生类空间。
funcl()有虚特性,“p->func1();”访问派生类的函数,输出"B1";func2()没有虚特性,“p->func2();”访问基类的函数,输出"A2"。
最终输出结果为:
B1A2。
27.以下哪个是软件测试的目的?
______
(分数:
2.50)
A.证明程序没有错误
B.演示程序的正确性
C.发现程序中的错误 √
D.改正程序中的错误
解析:
[解析]关于测试目的的基本知识,IEEE的定义是:
使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求,或是弄清预期结果与实际结果之间的差别。
软件测试的目的是发现程序中的错误;而软件调试的目的是改正程序中的错误。
28.下面的描述中,____是正确的。
(分数:
1.00)
A.virtual可以用来声明虚函数 √
B.含有纯虚函数的类是不可以用宋创建对象的,因为它是虚基类
C.即使基类的构造函数没有参数,派生类也必须建立构造函数
D.静态数据成员可以通过成员初始化成员列表来初始化
解析:
[解析]本题考核C++中各知识点的应用。
①virtual关键词既可以用来声明虚基类,也可以用来声明虚函数。
所以选项A的描述是正确的。
②C++规定,含有纯虚函数的类是抽象类,它不能用来定义对象。
选项B的描述中,前半句是正确的,但后半句是错误的。
③在C++中,如果所有的基类和子对象构造函数都不需要参数,派生也不需要参数初始化,则派生类中,可以不定义构造函数。
所以选项C的描述是错误的。
④在C++中,静态数据成员的初始化必须在类体外进行。
所以选项D的描述是错误的。
29.使用ifstream流类定义流对象并打开磁盘文件时,文件的隐含打开方式为______。
(分数:
1.00)
A.ios:
:
in
B.ios:
:
out
C.ios:
:
inlios:
:
out
D.没有默认 √
解析:
[解析]使用ifstream流类定义流对象并打开磁盘文件时,文件没有默认的打开方式。
其中ios:
:
in是为输入而打开;iso:
:
out是为输出而打开。
30.下列关于类定义的说法中,正确的是______。
(分数:
1.00)
A.类定义中包括数据成员和函数成员的声明 √
B.类成员的缺省访问权限是保护的
C.数据成员必须被声明为私有的
D.成员函数只能在类体外进行定义
解析:
[解析]类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。
类的成员函数可以在类内定义。
31.定义如下枚举类型;enum{Monday,Tuesday,Wednesday,Thrusday,Friday=2);,则下列语句正确的是____。
(分数:
2.00)
A.表达式Wednesday==Friday的值是true √
B.Dayday;day=3
C.Dayday;day=Monday+3
D.Dayday;day=Tuesday+10
解析:
32.有如下程序:
#include<iostream>
usingnamespqcestd;
classTestClass
{
private;
charc;
public;
TestClass(charn):
c(n){}
~TestClass()
{
cout<<c;
}
};
classTestClass1:
publicTestClass
{
private:
charc;
public:
TestClass1(charn):
TestClass(n+1),c(n){}
~TestClass1()
{
cout<<c;
}
};
intmain()
{
TestClass1obj("x");
return0;
}
执行上面的程序将输出______。
(分数:
1.00)
A.xy √
B.yx
C..x
D..y
解析:
[解析]本题中TestClass为基类.TestClass1为派生类。
在主函数中定义TestClass1对象obj("x"),“TestClass1(charn):
TestClass(n+1),c(n){}”,所以输出x,然后调用基类构造函数,"x"+1="y",所以输出y,即答案为xy。
33.下列语句中,正确的是______。
(分数:
2.00)
A.char*myString="Hello-World!
"; √
B.charmyString="Hello-World!
";
C.charmyString[11]="Hello-World!
";
D.charmyString[12]="Hello-World!
";
解析:
[解析]对于B来说,会造成溢出,对于C和D来说同样如此,因为“Hello-world!
”一个是12个字符组成,加上空字符一共13个,所以都会造成溢出,只有A是将字符串的地址赋给字符型指针。
34.C++中的类有两种用法:
一种是类的实例化,即生成类的对象,并参与系统的运行,另一种是通过____派生出新的类。
(分数:
2.00)
A.复用
B.继承 √
C.封装
D.引用
解析:
[解析]继承的基本概念。
35.一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是______。
(分数:
2.50)
A.123456ABCDE
B.EDCBA54321 √
C.ABCDE12345
D.54321EDCBA
解析:
[解析]栈是按照“先进后出”的原则组织数据,入栈的顺序为12345ABCDE,1为栈底元素,最后出栈,E为栈顶元素最先出栈,因此出栈的顺序为EDCBA54321。