最新全国计算机等级考试二级c++题库1共17套.docx
《最新全国计算机等级考试二级c++题库1共17套.docx》由会员分享,可在线阅读,更多相关《最新全国计算机等级考试二级c++题库1共17套.docx(28页珍藏版)》请在冰豆网上搜索。
最新全国计算机等级考试二级c++题库1共17套
第一套
1、下面叙述正确的是______。
A、算法的执行效率与数据的存储结构无关
B、算法的空间复杂度是指算法程序中指令(或语句)的条数
C、算法的有穷性是指算法必须能在执行有限个步骤之后终止
D、以上三种描述都不对
算法的设计可以避开具体的计算机程序设计语言,但算法的实现必须借助程序设计语言中提供的数据类型及其算法。
数据结构和算法是计算机科学的两个重要支柱。
它们是一个不可分割的整体。
算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。
算法的有穷性是指一个算法必须在执行有限的步骤以后结束。
本题答案为C。
2、数据库系统的核心是______。
A、数据模型
B、数据库管理系统
C、软件工具
D、数据库
数据库管理系统DBMS是数据库系统的核心。
DBMS是负责数据库的建立、使用和维护的软件。
DBMS建立在操作系统之上,实施对数据库的统一管理和控制。
用户使用的各种数据库命令以及应用程序的执行,最终都必须通过DBMS。
另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要求,保证数据库的完整性和安全性。
本题答案为B。
3、在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是______。
A、可行性分析
B、需求分析
C、详细设计
D、程序编码
软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。
其中需求分析阶段常用的工具是数据流图和数据字典。
本题答案为B。
4、在软件开发中,下面任务不属于设计阶段的是______。
A、数据结构设计
B、给出系统模块结构
C、定义模块算法
D、定义需求并建立系统模型
软件设计一般分为总体设计和详细设计两个阶段,总体设计的任务是确定软件的总体结构,子系统和模块的划分,并确定模块间的接口和评价模块划分质量,以及进行数据分析。
详细设计的任务是确定每一模块实现的定义,包括数据结构、算法和接口。
本题答案为D。
5、下列叙述中正确的是______。
A、数据库是一个独立的系统,不需要操作系统的支持
B、数据库设计是指设计数据库管理系统
C、数据库技术的根本目标是要解决数据共享的问题
D、数据库系统中,数据的物理结构必须与逻辑结构一致
数据库是存储在计算机存储设备中的、结构化的相关数据的集合。
数据库中的数据不只是面向某一项特定的应用,而是面向多种应用,可以被多个用户、多个应用程序共享,不具有独立的系统。
设计数据库的目的实质上是设计出满足实际应用需求的实际关系模型。
数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:
提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。
本题答案为C。
6、下面描述中,符合结构化程序设计风格的是______。
A、使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑
B、模块只有一个入口,可以有多个出口
C、注重提高程序的执行效率
D、不使用goto语句
基于对结构化程序设计原则、方法以及结构化程序基本构成结构的掌握和了解,在结构化程序设计的具体实施中,要注意把握如下要素:
1、使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑;
2、选用的控制结构只准许有一个入口和一个出口;
3、程序语句组成容易识别的块,每块只有一个入口和一个出口;
4、复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现;
5、语言中所没有的控制结构,应该采用前后一致的方法来模拟;
6、严格控制GOTO语句的使用。
其意思是指:
(1)用一个非结构化的程序设计语言去实现一个结构化的构造;
(2)若不使用GOTO语句会使功能模糊;
(3)在某种可以改善而不是损害程序可读性的情况下。
本题答案为A。
7、下列模式中,能够给出数据库物理存储结构与物理存取方法的是______。
A、内模式
B、外模式
C、概念模式
D、逻辑模式
数据库管理系统的三级模式结构由外模式、模式和内模式组成。
外模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。
模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。
外模式是模式的一部分。
内模式,或存储模式,或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式的描述。
本题答案为A。
8、下面概念中,不属于面向对象方法的是______。
A、对象
B、继承
C、类
D、过程调用
面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。
面向对象方法从对象出发,发展出对象,类,消息,继承等概念。
本题答案为D。
9、在一棵二叉树上第5层的结点数最多是______。
A、8
B、16
C、32
D、15
根据二叉树的性质:
二叉树第i(i≥1)层上至多有2i-1个结点。
得到第5层的结点数最多是16。
本题答案为B。
10、以下数据结构中不属于线性数据结构的是______。
A、队列
B、线性表
C、二叉树
D、栈
线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。
栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端称为栈顶,另一端称为栈底。
一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。
所以栈又称后进先出表(LastInFirstOut);队列可看作是插入在一端进行,删除在另一端进行的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。
在队列中,只能删除队头元素,队列的最后一个元素一定是最新入队的元素。
因此队列又称先进先出表(FirstInFirstOut)。
本题答案为C。
11、下列程序的输出结果是______。
#include
usingnamespacestd;
intmain()
{
chara[]="Hello,World";
char*ptr=a;
while(*ptr)
{
if(*ptr>='a'&&*ptr<='z')
cout<elsecout<<*ptr;
ptr++;
}
return0;
}
A、HELLO,WORLD
B、Hello,World
C、hELLO,wORLD
D、hello,world
此程序段的功能是将字符串中的小写字母转换为大写字母并将其输出。
本题答案为A。
12、关于动态存储分配,下列说法正确的是______。
A、new和delete是C++语言中专门用于动态内存分配和释放的函数
B、动态分配的内存空间也可以被初始化
C、当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存空间
D、当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new
new和deleted在C++中用来申请与释放内存的运算,不是函数,故选项A错。
动态内存分配时是可以对其进行初始化的,如对类的初始化。
在C++中,没有垃圾回收装置,系统本身不会自动回收内存,选项C也错。
由于采用了new操作分配内存,在内存分配失败时,产生一个NULL指针,不会导致系统的崩溃,因此建议使用new操作,故选项D错。
本题答案为B。
13、执行语句序列
intn;
cin>>n;
switch(n)
{case1:
case2:
cout<<'1';
case3:
case4:
cout<<'2';break;
default:
cout<<'3';
}
时,若键盘输入1,则屏幕显示______。
A、1
B、2
C、3
D、12
switch语句又称为开关语句,它也是一种选择语句。
switch语句的功能是根据给定表达式的不同取值来决定从多个语句序列中的哪一个开始执行。
break语句又称为跳出语句。
break语句只能用在switch语句和循环语句中。
在switch语句中,break用来使执行流程跳出switch语句,而继续执行switch后面的语句。
在循环语句中,break用来使执行流程无条件地跳出本层循环。
本题答案为D。
14、有以下类定义
classPoint{
public:
Point(intx=0,inty=0){_x=x;_y=y;}
voidMove(intxOff,intyOff)
{_x+=xOff;_y+=yOff;}
voidPrint()const
{cout<<'('<<_x<<','<<_y<<')'<private:
int_x,_y;
};
下列语句中会发生编译错误的是______。
A、Pointpt;pt.Print();
B、constPointpt;pt.Print()
C、Pointpt;pt.Move(1,2);
D、constPointpt;pt.Move(1,2);
本题主要考查了const关键字的使用。
可以在类型或类名前加上const来声明一个在运行时不可改变的对象或变量。
如果声明了一个常量对象,则其内部成员均不可改变,在编译时会检查其对应类的成员变量是否为左值,如果是,则会出现错误。
对于B而言,由于在对象pt中的print方法中没有发现存在左值成员变量,故在编译时不会出错。
本题答案为D。
15、有以下类定义
classMyClass
{
private:
intid;
chargender;
char*phone;
public:
MyClass():
id(0),gender('#'),phone(NULL){}
MyClass(intno,charge='#',char*ph=NULL)
{id=no;gender=ge;phone=ph;}
};
下列类对象定义语句中错误的是______。
A、MyClassmyObj;
B、
C、MyClassmyObj(12,'m');
D、MyClassmyObj(12);
对于A,由于在创建MyClass的实例myObj时,没有参数,所以其调用了第一个构造函数。
对于B,由于有两个参数,故其调用了第二个构造函数,第二个构造函数有两个缺省参数,在调用时,实参会按从左到右的顺序依次传给形参,所以第二个参数”会传递给形参ge,而在原型中ge为字符型,实参为指向字符的指针,故在编译时会出现错误。
C与D都能够正确的实现参数的传递。
本题答案为B。
16、下列函数原型声明中错误的是______。
A、voidFun(intx=0,inty=0);
B、voidFun(intx,inty);
C、voidFun(intx,inty=0);
D、voidFun(intx=0,inty);
在C++中,可以为参数指定默认值,在函数调用时没有指定与形参相对应的实参时就自动使用默认值。
默认参数可以简化复杂函数的调用。
默认参数通常在函数名第一次出现在程序中的时候,如在函数原型中,指定默认参数值。
指定默认参数的方式从语法上看与变量初始化相似。
例如:
voidmyfunc(intx=0,inty=1);
如果一个函数中有多个参数,则默认参数应从右至左逐个定义。
本题答案为D。
17、关于面向对象的程序设计方法,下列说法正确的是______。
A、"封装性"指的是将不同类型的相关数据组合在一起,作为一个整体进行处理
B、"多态性"指的是对象的状态会根据运行时要求自动变化
C、基类的私有成员在派生类的对象中不可访问,也不占内存空间
D、在面向对象的程序设计中,结构化程序设计方法仍有着重要作用
封装性是指将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在其内部;多态性是指当多种事物继承自一种事物时,同一种操作在它们之间表现出不同的行为;基类的私有成员对派生类来说是不可访问的,因此在派生类中直接引用基类的私有变量成员是不允许的,可以通过基类的公用成员函数来引用基类的私有变量成员;C++是一种优秀的高级程序设计语言,它是以C语言为基础而逐渐发展起来的。
C++语言既保留了传统的结构化程序设计方法,又对流行的面向对象程序设计方法提供了完整的支持。
本题答案为D。
18、下列是模板声明的开始部分,其中正确的是______。
A、template
B、template
C、template
D、template
本题主要考查了模板的定义,在C++中可以在定义类时不指定具体的数据类型,而在编译时进行前期绑定,对于多参数的模板,在参数间用“,”隔开,如果模板参数为一个类,在模板参数前面必须加上class关键字。
本题答案为C。
19、有以下程序
#include
inti=0;
voidfun()
{{
staticinti=1;
std:
:
cout<
}
std:
:
cout<
}
intmain()
{
fun();fun();
return0;
}
程序执行后的输出结果是______。
A、1,2,1,2,
B、1,2,2,3,
C、2,0,3,0,
D、1,0,2,0,
本题主要考查了static型的变量,在C++中可以为函数或类指定static型的变量,如果将一个变量指定为static型,则该变量在内存中仅有一个副本,同时在函数或类执行完成后空间不会被释放,以前的值将会被保留。
同时还考查了C++中变量作用域的问题,在C++中如果要将一个变量限定在指定的范围内,可以将该作用域用{}包含起来,同时可在函数的外部指定全局变量,该变量的作用范围是从当前位置开始到程序结束。
对于"staticinti=1;"中的i,初始值为1,在调用std:
:
cout<
:
cout<
在第二次执行fun()时,由于第一i为static型变量,其值是保留的,故输出"2,",对于第二个i则输出"0,"。
本题答案为D。
20、有以下程序
#include
usingnamespacestd;
classMyClass
{
public:
MyClass(intn){number=n;}
//拷贝构造函数
MyClass(MyClass&other){number=other.number;}
~MyClass(){}
private:
intnumber;
};
MyClassfun(MyClassp)
{
MyClasstemp(p);
returntemp;
}
intmain()
{
MyClassobj1(10),obj2(0);
MyClassobj3(obj1);
obj2=fun(obj3);
return0;
}
程序执行时,MyClass类的拷贝构造函数被调用的次数是______。
A、5
B、4
C、3
D、2
obj1(10)将执行一次构造函数,obj2(0)也将执行一次构造函数;
obj3(obj1)将以obj1作为参数执行一次构造函数;
fun(obj3)中的temp(p)也将执行一次构造函数,而fun本身是按值传递参数的,形参在fun函数内也要分配独立的空间,故也要执行一次构造函数,对于其返回结果也是MyClass类型的,同样需要执行一次构造函数,故一共要执行4次。
本题答案为B。
21、已知:
intm=10;在下列定义引用的语句中,正确的是______。
A、int&x=m;
B、inty=&m;
C、int&z;
D、int&t=&m;
本题主要考查了对引用及地址(&)的理解,引用实际上就是别名,它与被引用变量拥有同一个地址空间,对于选项A而言,其操作实际上就是为m赋于一个别名x,因此选项A是对的。
对于选项B,&m表示m的地址,而y是一个整型变量,在C++中不能从地址值隐式转换为整型值,故选项B是错的。
对于选项C,引用必须要用被引用的对象,即引用必须要初始化;选项D中t是一个整型引用,而其被引用的对象却是m的地址,存在着与选项B类似的错误,因此选项D也是错的。
本题答案为A。
22、在下面的运算符重载函数的原型中,错误的是______。
A、Volumeoperator-(double,double);
B、doubleVolume:
:
operator-(double);
C、VolumeVolume:
:
operator-(Volume);
D、Volumeoperator-(Volume,Volume);
本题主要考查了运算符的重载。
对于运算符的重载,通常有两种形式。
1、操作结果operator运算符(操作数1,[操作数2])
2、操作结果类:
:
operator运算符(操作数)
对于上述选项中,B、C为第二种类型,A、D为第一种类型,在第一种类型中,两个操作数必须至少有一个自定义类,对选项A而言,其两个操作数均为double型数据,因此选项A是错误的运算符重载。
本题答案为A。
23、执行语句序列
ofstreamoutfile("DATA.DAT");
if(…)cout<<"OK";elsecout<<"FAIL";
后,如果文件打开成功显示"OK",否则就显示"FAIL"。
由此可知,上面if语句的…处的表达式应是______。
A、outfile.fail()或outfile
B、outfile.good()或!
outfile
C、outfile.good()或outfile
D、outfile.fail()或!
outfile
在采用ofstream类打开文件时,在创建其实例时,可在构造函数中输入要打开的文件名,如果打开成功,则返回一个ofstream类的实例,否则创建实例失败,返回0,同时可通过good()或fail()方法来判断文件是否已打开,如果正常打开则fail()方法返回0,good()方法返回非零,否则fail()返回非零,good()返回0。
本题答案为C。
24、在一个类体的下列声明中,正确的纯虚函数声明是______。
A、virtualvoidvf()=0;
B、voidvf(int)=0;
C、virtualintvf(int);
D、virtualvoidvf(int){}
本题考查了纯虚函数的定义,在C++中要定义一个函数为虚函数,可在函数定义前加上virtual关键字,如果要定义一个函数为纯虚函数,只要在函数原型后加上“=0”就可以了。
对于纯虚函数,必须要在其派生类中实现,因此对于一个拥有纯虚函数的类,实质上就是一个抽象类。
对于这种类,不能为其创建实例。
本题答案为A。
25、有以下类定义
classMyClass
{
public:
MyClass(){cout<<1;}
};
则执行语句MyClassa,b[2],*p[2];后,程序的输出结果是______。
A、11
B、111
C、1111
D、11111
classMyClass定义了一个类,其中MyClass(){cout<<1;}为其的构造函数,当程序创建类MyClass的实例时,该函数将会被调用,在执行“MyClassa,b[2],*p[2];”时,一共创建了3个这样的实例,故一共执行构造函数3次,对于变量p,则是声明了一个指针数组,该数组中的元素是指向类MyClass实例的指针,本身并没有创建类的实例。
本题答案为B。
26、有以下程序
#include
usingnamespacestd;
classComplex
{
public:
Complex(doubler=0,doublei=0):
re(r),im(i){}
doublereal()const{returnre;}
doubleimag()const{returnim;}
Complexoperator+(Complexc)const
{returnComplex(re+c.re,im+c.im);}
private:
doublere,im;
};
intmain()
{
Complexa=Complex(1,1)+Complex(5);
cout<return0;
}
程序执行后的输出结果是______。
A、6+6i
B、6+1i
C、1+6i
D、1+1i
本题定义了一个复数类,并在该类上重载了+运算符。
在main函数中,定义了一个复数类a,其值为两个复数1+i与5的和。
在复数类中,定义了real与imag方法,分别用来取出复数的实部与虚部。
本题答案为B。
27、已知程序中已经定义了函数test,其原型是inttest(int,int,int);,则下列重载形式中正确的是______。
A、chartest(int,int,int);
B、doubletest(int,int,double);
C、inttest(int,int,int=0);
D、floattest(int,int,float=3.5F);
在对函数进行重载时,不允许为其指定缺省参数,故C、D是错的,同时,对于重载的函数原型间不允许有类型完全相同的参数列表,故A是错的,对于返回类型,在重载时没有特别的要求。
本题答案为B。
28、C++流中重载的运算符>>是一个______。
A、用于输出操作的非成员函数
B、用于输入操作的非成员函数
C、用于输出操作的成员函数
D、用于输入操作的成员函数
C++流的输入运算符>>和输出运算符<<只能作为非类成员函数重载。
在一个类中,如有必要,可将>>或<<声明为友元函数。
本题答案为B。
29、已知函数f的原型是:
voidf(int*a,long&b);,变量v1、v2的定义是:
intv1;longv2;,正确的调用语句是______。
A、f(v1,&v2);
B、f(v1,v2);
C、f(&v1,v2);
D、f(&v1,&v2);
对于函数f而言,其第一个参数为整型指针,第二个参数为一引用(实际上就是按地址传递参数),该引用是一长整型的引用。
对于选项A、B,实参变量v1为整型,而所要传递的对应的形参变量a是指针型,它接受的是地址,若将实参变量v1改为&v1,那么这一传递就是正确的;对于选项A、D,&v2为一地址,传递给整型引用,也将导致出错。
本题答案为C。
30、在公有派生的情况下,派生类中定义的成员函数只能访问原基类的______。
A、公有成员和私有成员
B、私有成员和保护成员
C、公有成员和保护成员
D、