- 相关推荐
2017年计算机二级《C++》预测试题
一、选择题
1关于运算符重载,下列表述中正确的是( )。
A.c++已有的任何运算符都可以重载
B.运算符函数的返回类型不能声明为基本数据类型
C.在类型转换符函数的定义中不需要声明返回类型
D.可以通过运算符重载来创建c++中原来没有的运算符
参考答案:C
参考解析:重载运算符的规则如下:①c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5 个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c++的标准类型。故本题答案为c。
2在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是( )。
A.友元函数B.虚函数C.构造函数D.析构函数
参考答案:C
参考解析:构造函数在创建对象时系统自动调用,其功能是使用给定的值将对象初始化。
3软件设计中模块划分应遵循的准则是( )。
A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合
参考答案:B
参考解析:软件没计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽町能的高。
4如果类A被说明成类B的友元,则( )。
A.类A的成员即类B的成员
B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员
D.类B不一定是类A的友元
参考答案:D
参考解析:本题考查的是友元类的定义:类A为类B的友元类,则类A的所有成员函数都是类8的友元函数,但反之则不一定成立。
5有如下类定义:
class Foo
{
public:
Foo(int v):value(V){}//①
~Foo(){}//②
private:
Foo(){}//③
int value=0://④
};
其中存在语法错误的行是( )。
A.①B.②C.③D.④
参考答案:D
参考解析:本题考查对象的初始化,类的数据成员是不能在声明类时初始化的,所以本题答案为D。
6下面关于数组的描述错误的是( )。
A.在C++语言中数组的名字就是指向该数组第一个元素的指针
B.长度为n的数组,下标的范围是0~n-1
C.数组的大小必须在编译时确定
D.数组只能通过值参数和引用参数两种方式传递给函数
参考答案:D
参考解析:本题考查的是数组的基本使用,数组还可以通过对应的指针调用传递参数,其余选项的说法都是正确的。
7运算符重载是对已有的运算符赋予多重含义,因此( )。
A.可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义
B.可以改变一个已有运算符的优先级和操作数个数
C.只能重载c++中已经有的运算符,不能定义新运算符
D.C++中已经有的所有运算符都可以重载
参考答案:C
参考解析:重载运算符的规则如下:①c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5 个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c++的标准类型。故本题答案为c。
8有如下类和对象的定义:
class Constants{
public:
static double getPI(){return 3.1416;}
};
Constants constants:
下列各组语句中,能输出3.1416的是( )。
A.cout
参考答案:D
参考解析:本题考查静态成员函数。静态成员函数由于没有this指针,所以不能访问本类中的非静态成员。引用静态成员函数有2种方式,一种是直接使用类来引用,即Constants::getpI();另一种是使用对象来引用,即constants.getPI()。所以本题答案为D。
9程序流程图中带有箭头的线段表示的是( )。
A.图元关系B.数据流C.控制流D.调用关系
参考答案:C
参考解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择C。
10下列程序的执行结果为( )。
#include
void main()
{
int a=3,b=0;
int*P =&a;
b=+a++;
cout<<*P<<”,”<
}
A.3,4B.4,3C.3,3D.4,4
参考答案:B
参考解析:*P为所指对象a的值,语句“b=+a++;”等价于“b=b+a;a=a+1;”。
11对长度为n的线性表排序,在最坏情况下,比较次数不是n(rt一1)/2的排序方法是( )。
A.快速排序B.冒泡排序C.直接插入排序D.堆排序
参考答案:D
参考解析:除了堆排序算法的比较次数是0(nlog2n),其他的都是n(n—1)/2。
12字面常量42、4.2、42L的数据类型分别是( )。
A.long,double、intB.lon9、float、intC.int、double、longD.int、float、long
参考答案:C
参考解析:本题考查整型变量的类型和浮点变量的类型,42默认为int型数据,42后面加上L后,表示long型数据,4.2默认为double型数据。
13下列叙述中正确的是( )。
A.栈是“先进先出”的线性表
B.队列是“先进后出”的线性表
C.循环队列是非线性结构
D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
参考答案:D
参考解析:栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。
14不能作为重载函数的调用的依据是( )。
A.参数个数B.参数类型C.函数类型D.函数名称
参考答案:D
参考解析:所谓重载函数是指同一个函数名可以对应多个函数的实现,编译器会根据参数个数、参数类型和函数返回值类型不同而自动调用相应的函数。
15下列语句中,错误的是( )。
A.const int buffer=256;
B.const double*point;
C.int const buffer=256;
D.double*eonst point:
参考答案:D
参考解析:const是一个C++关键字,用于限定不允许改变的变量。选项B是指向常量的指针,定义时可以不初始化;选项D是指针常量,定义时必须初始化。故答案为D。
16下列运算符中,在c++语言中不能重载的是( )。
A.*B.>=C.::D./
参考答案:C
参考解析:不能被重载的运算符还包括:“.”、“.*”、“->*”和“?:”。
17有如下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10},* P=a; 则数值为9的表达式是( )。
A.*P+9B.木(P+8)C.*P+=9D.P+8
参考答案:B
参考解析:本题考查指向数组的指针,本题中指针变量P指向数组a,那么*P的值就是1,即表示数组的第一个元素,那么数值为9的表达式就是将指针向后移动8个地址,即P+8指向的是数组元素值为9,所以数值为9的表达式是*(P+8)。
18执行下列语句段后,输出字符“*”的个数是( )。
for(int i=50;i>1;i-=2)Cout<<'*':
A.24B.25C.26D.50
参考答案:B
参考解析:本题考查for循环语句,题目中每执行完循环体后,i都会减2.那么只有50到2之间的偶数才能输出“*”,所以总共输出25次。
19算法的有穷性是指( )。
A.算法程序的运行时间是有限的
B.算法程序所处理的数据量是有限的
C.算法程序的长度是有限的
D.算法只能被有限的用户使用
参考答案:A
参考解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。
20下面关于break语句的描述中,不正确的是( )。
A.break可以用于循环体内
B.break语句可以在for循环语句中出现多次
C.break语句可以在switch语句中出现多次
D.break语句可用于if条件判断语句内
参考答案:D
参考解析:本题考查的是break语句的使用,break可以结束switch语句和for循环语句,但是不能使用在条件判断语句内。
21有如下类定义:
class Point
{
int xx.yy;
public:
Point():xx(0),yy(0){}
Point(int x,int Y=0):xx(X),YY(Y){}
};
若执行语句
Point a(2),b[3],幸c[4];
则Point类的构造函数被调用的次数是( )。
A.2次B.3次C.4次D.5次
参考答案:C
参考解析:本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a(2)以及对象数组b[3],共执行4次构造函数,对象指针不调用构造函数。所以本题答案为c。
22有如下程序:
#include
using namespace std;
class Basel
{
public:
BaseI(int D.{cout<
一Basel(){}
};
class Base2
{
public:
Base2(int D.{tout<
~Base2(){}
};
class Derived:public Basel,Base2
{
public:
Derived(int a,int b,int c,int D.:Basel(B.,Base2(A.,bl(D.,b2(C.{}
private:
int bl:
int b2:
};
int main()
{
Derived d(1,2,3,4);
return 0;
}
执行这个程序的输出结果是( )。
A.1234B.2134C.12D.21
参考答案:D
参考解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义一个派生类对象时,分别调用基类的构造函数,所以分别输出21。
23以下叙述正确的是( )。
A.函数可以嵌套定义但不能嵌套调用
B.函数既可以嵌套调用也可以嵌套定义
C.函数既不可以嵌套定义也不可以嵌套调用
D.函数可以嵌套调用但不可以嵌套定义
参考答案:D
参考解析:在c++语言中,所有的函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义,但可以互相调用。但是不能调用main()函数。
24必须用一对大括号括起来的程序段是( )。
A.switCh语句中的Case标号语句
B.if语句的分支
C.循环语句的循环体
D.函数的函数体
参考答案:D
参考解析:本题考查c++基本控制结构,A、B、C三个选项中的大括号不是必须的,而D选项中的函数体必须使用大括号。
25软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是( )。
A.学生成绩管理系统
B.C语言编译程序
C.UNIX操作系统
D.数据库管理系统
参考答案:A
参考解析:软件按功能可以分为:应用软件、系统软件、支撑软件。操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件。所以B、C、D都是系统软件,只有A是应用软件。
26下面程序的运行结果为( )。
#include
void main()
{
for(int a=0,x=0;!x&&a<=10;a++)
{
a++:
}
cout<
}
A.10B.1lC.12D.0
参考答案:C
参考解析:在进入最后一次循环时a=10,在循环体内执行“a++;”后a=11,执行完该次循环体计算for循环的增量部分后a=12小于l0,循环结束。
27有如下程序:
#include
using namespace std;
int i=1;
class Fun{
public:
static int i;
int value(){return i—l;}
int value()const{return i+1;}
};
int Fun::i=2;
int main(){
int i=3;
Fun funl;
const Fun fun2:
__________________
return 0;
}
若程序的输出结果是:
123
则程序中下画线处遗漏的语句是( )。
A.cout<
参考答案:A
参考解析:本题考查构造函数、常成员函数和静态数据成员。外部同名的变量赋值,不能改变类的静态变量值,所以Fun对象里的i值为2,所以本题答案为A。
28下列有关模板的叙述中,正确的是( )。
A.函数模板不能含有常规形参
B.函数模板的一个实例就是一个函数定义
C.类模板的成员函数不能是模板函数
D.用类模板定义对象时,绝对不能省略模板实参
参考答案:B
参考解析:本题考查函数模板和类模板的基础知识,所以本题答案为B。
29运算符重载时不需要保持的性质是( )。
A.操作数个数B.操作数类型C.优先级D.结合性
参考答案:B
参考解析:重载运算符的规则如下:①c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重裁;②c++不能重载的运算符只有5 个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c++的标准类型。所以答案为B。
30下列程序的输出结果为( )。
#include
{
if(n<1)return l;
else return n+time(n一1); return 0;
}
void main() {
cout<
}
A.0B.10C.15D.16
参考答案:D
参考解析:本题考查的是递归函数的使用,题中递归函数的结束条件为n
31有如下程序:
#include
using namespace std;
class MyClass{
public:
MyClass(int i=0){cout<<1;}
MyClass(const MyClass&x){cout<<2;}
MyClass&operator=(const MyClass&x){cout<<3;retum$this;}
~MyClass()}cout<<4;}
};
int main()
{
MyClass objl(1),obj2(2),obj3(objl);
retum 0;
{
执行这个程序的输出结果是( )。
A.112444B.11114444C.121444D.11314444
参考答案:A
参考解析:本题:考查构造函数和复制构造函数以及重载运算符。本题中先后定义了两个对象obj1,obj2,依次输出口,然后定义了对象obj3,凋用复制构造函数,输出2,最后执行三次析构函数,输出444。
32在下列模式中,能够给出数据库物理存储结构与物理存取方法的是( )。
A.外模式B.内模式C.概念模式D.逻辑模式
参考答案:B
参考解析:数据库系统的兰级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述、、内模式又称物理模式,它给出r数据库物理存储结构与物理存取方法,所以选择 8。
33有如下程序:
#inClude using namespaCe std; Class Base{
publiC:
void output(){Cout<<1;}
virtual void Print(){Cout<<'B’;} };
Class Derived:publiC Base{ publiC:
void output(){Cout<<2;} void Print(){Cout<<’D ';} };
int main() {
Base * ptr=new Derived; ptr一>output();
ptr一>Print(); ptr;
retum0; }
执行这个程序的输出结果是( )。
A.1BB.lDC.2BD.2D
参考答案:B
参考解析:在某基类中声明为vitua1并在一个或多个派生类中被重新定义的成员函数,本题中定义了一个指向派生类对象的基类指针ptr,执行 ptr一>outpnt后,会执行基类的output函数,输出1,由于Print是虚函数,所以ptr->Print()会执行派生类的 Print,即输出D,所以本题答案为B。
34以下程序中,错误的行为是( )。
①#include
②class A
③{
④public:
⑤ int n=2;
⑥ A(int val){cout<
⑦ -A(){};
⑧};
⑨void main() ⑩{
A a(0);
}
A.⑤B.⑥C.⑦D.
参考答案:A
参考解析:C++语言中规定在类体中不允许对所定义的数据成员进行初始化。
35下列数据结构中,属于非线性结构的是( )。
A.循环队列B.带链队列C.二叉树D.带链栈
参考答案:C
参考解析:树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。
36有如下程序:
#inClude using namespaCe std; Class A{
publiC:
statiC int a;
void init( ){。a=1;}
A(int a=2){init( );a++;} };
int A::a:0: A obj;
int main( ) {
Cout<
}
运行时输出的结果是( )。
A.0B.1C.2D.3
参考答案:B
参考解析:本题考查构造函数,本题中对类中的a数据成员先是赋值为0,当定义了对象obj时,执行构造函数,将a的值变为了1,所以输出1。
37软件详细设计产生的图如下:
该图是( )。
A.N—S图B.PAD图C.程序流程图D.E—R图
参考答案:C
参考解析:N—S图提出了用方框图来代替传统的程序流程图,所以A不对。PAD图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设计的图形表示工具,所以B不对。E—R图是数据库中的用于表示E—R模型的图示工具,所以D不对。根据图中所示表示方法是进行软件详细设计时使用的程序流程图。
38秘序调试的任务是( )。
A.设计测试用例
B.验证程序的正确性
C.发现程序中的错误
D.诊断和改正程序中的错误
参考答案:D
参考解析:程序调试的任务是诊断和改正程序中的错误。
39有如下程序:
#include
using namespace std;
class A{
public:
virtual void fancl(){cout<<”Al”;}
void func2(){cout<<”A2”;}
};
class B:public A{
public:
void funcI(){tout<<”Bl”;}
void func2(){tout<<”B2”;}
};
intmain()}
A*P=new B:
P—>funcl();
P—>func2();
p;
return 0;
}
执行这个程序的输出结果是( )。
A.B182B.A1A2C.B1A2D.AIB2
参考答案:C
参考解析:本题考查虚函数。虚函数指在基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。题中定义了一个派生类对象8,并使用类A的对象指针指向B,由于基类A中的funcl为虚函数,所以会执行派生类的funcl,输出Bl,而基类中的func2不是虚函数,所以 P->func2()会执行基类的func2,输出A2。故答案为c。
40下列字符串中。不可以用做c++标识符的是( )。
A.y_2006B._EST_HC.ReturnD.switch
参考答案:D
参考解析:本题考查C++标识符的命名规则,其规则有如下几点:①所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所有标识符不能使用C++已有的关键字;③大、小写字母表示不同意义,即代表不同的标识符。选项C中虽然retum是关键字,但因首字母大、小写不同,也可用于标识符,但不建议使用。故答案为D。
二、基本操作题
41请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,其中有枚举DOGCOLOR、狗类Dog和主函数main的定义。程序中位于每个“//ERROR ****found****”下的语句行有错误,请加以改正。改正后程序的输出结果应该是:
There is a white dog named Hoh0. There is a blaCk dog named Haha. There is a motley dog named Hihi. 注意:只修改每个//ERROR****found****女料下的那一行,不要改动程序中的其他内容。
#inClude using namespaCe std; //狗的颜色:黑、白、黄、褐、花、其他
enum DOGCOLOR{BLACK,WHITE,YELLOW,BROWN,PIEBALD,OTHER}; Class Dog{//狗类
DOGCOLOR Color; Char name[20]; statiC int Count; publiC:
Dog(Char nalTle[],DOGCOLOR Color){ strCpy(this一>name,name);
//ERROR**********found**********、
strCpy(this一>Color,Color);
} 1 DOGCOLOR getColor()Const{retum Color;}
//ERROR**********found**********
Const Char * 9etName()Const{return*finin9;} Const Char * 9etColorString()Const{
switCh(Color){
Case BLACK:return”blaCk“; Case WHITE:return”white”:
Case YELLOW:return’"yellow”: Case BROWN:return”brown”; ease PIEBALD:return”piebald”:
}
return”motley”;
}
void show()Const{ . Cout<<”There is a”<
} }; int main(){
//ERROR**********found**********
Dog dogl(”Hoh0”,WHITE),dog2(”Haha”,BLACK);d0g3(”Hihi”,0THER); d091.show();
dos2.show(); dos3.show(); return 0;
}
参考解析:
(1)this->color=color:
(2)consL char getName()eonst{return*name;}
(3)Dog dogl(”Hoho”,WHITE)。dog2(”Haha”,
BLACK),dog3(”Hihi”,OTHER);
三、简单应用题
42请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2。此工程中包含一个源程序文件main.cpp,其中有“房间”类Room及其派生出的“办公室”类0ffice的定义,还有主函数main的定义。请在程序中“//****found****”下的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:
办公室房间号:308
办公室长度:5.6
办公室宽度:4.8
办公室面积:26.88
办公室所属部门:会计科
注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“///料料found料”。
#include
using namespaee std;
class Room{ //“房间”类
int room_n0;//房间号
double length;//房间长度(m)
double width;//房间宽度(n1)
public:
Room(int the—room—n0,double the~length,double the—width):loom—no(the—room—no),length(the—
length),width(the—width){}
int theRoomNo()eonst{return iDonl—n0;}
//返回房间号
double theLength()const{return length;}//返回房间长度
double theWidth()const{return width;}//返回房间宽度
//**********found**********
double theArea()const{_______________}//返回房间面积(矩形面积)
};
class Office:public Room{//“办公室”类
char*depart;//所属部门
public:
Office(int the_room_n0,double the_length,double the_width,eonst char木the_depart)
//**********found**********
:_______________{
depart=new char[strlen(the depart)+1];
//**********found**********
strcpy(_______________);
}
~Office(){[]depart;}
const char*theDepartment()const{return depart;}//返回所属部门
};
int main(){
//**********found**********
Office_______________;
cout<<”办公室房间号:”<
<<”办公室长度:”<
<<”办公室宽度:”<
<<”办公室面积:”<
<<”办公室所属部门:”<
return 0;
}
【计算机二级《C++》预测试题】相关文章:
计算机二级考试C++试题03-09
计算机二级考试C++试题及答案03-27
2017计算机二级C++考试试题03-05
2016年计算机二级C++模拟试题及答案03-07
2017全国计算机二级C++考试试题03-04
计算机二级C语言预测试题10-25