因为刷过计算机等级考试题库的同学都知道,考试一点都不简单,那么我们该如何复习冲刺?下面考无忧奉上二级C++试题,希望为你保驾护航!
2019年3月二级C++试题
【1】
1.下列叙述中正确的是( )。
A.栈是“先进先出”的线性表
B.队列是“先进后出”的线性表
C.循环队列是非线性结构
D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
2.支持子程序调用的数据结构是( )。
A.栈
B.树
C.队列
D.二叉树
3.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是( )。
A.10
B.8
C.6
D.4
4.下列排序方法中,最坏情况下比较次数最少的是( )。
A.冒泡排序
B.简单选择排序
C.直接插入排序
D.堆排序
5.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下列属于应用软件的是( )。
A.编译程序
B.操作系统
C.教务管理系统
D.汇编程序
6.下列叙述中错误的是( )。
A.软件测试的目的是发现错误并改正错误
B.对被调试的程序进行“错误定位”是程序调试的必要步骤
C.程序调试通常也称为Debug
D.软件测试应严格执行测试计划。排除测试的随意性
7.耦合性和内聚性是对模块独或性度量的两个标准。下列叙述中正确的是( )。
A.提高耦合性降低内聚性有利于提高模块的独立性
B.降低耦合性提高内聚性有利于提高模块的独立性
C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度
D.内聚性是指模块间互相连接的紧密程度
8.数据库应用系统中的核心问题是( )。
A.数据库设计
B.数据库系统设计
C.数据库维护
D.数据库管理员培训
9.有下列程序:
#include
voidmain( )
{char*s={"ABC");
do
{printf("%d",*s);s++;
}while(*s);
}
注意:字母A的ASCII码值为65。程序运行后的输出结果是( )。
A.5670
B.656667
C.567
D.ABC
10.将E—R图转换为关系模式时,实体和联系都可以表示为( )。
A.属性
B.键
C.关系
D.域
1.D。【解析】本题考查了栈、队列、循环队列的基本概念。栈的特点是先进后出;队列的特点是先进先出。根据数据结构中各数据元素之间的复杂程度,数据结构分线性结构与非线性结构两类。有序线性表即可采用顺序存储结构,也可以采用链式存储结构。
2.A。【解析】根据栈的定义,栈是一种限定在一端进行插入与删除的线性表。在主函数调用子函数时,主函数会保持当前状态,然后转去执行子函数,把子函数的运行结果返回到主函数,主函数继续向下执行,这种过程符合栈的特点。所以一般采用栈式存储方式。
3.C。【解析】根据二叉树的性质判定,在任意二叉树中,度为0的叶子结点总是比度为2的结点多一个。
4.D。【解析】本题考查排序的比较次数,冒泡排序、简单选择排序和直接插入排序在最坏的情况下比较次数为n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为O(nlog2n)。
5.C。【解析】编译程序和汇编程序缡于开发工具;操作系统属于系统软件;而教务管理系统属于应用软件。
6.A。【解析】软件测试的目的是为了发现错误及漏洞而执行程序的过程;软件测试要严格执行测试计划;程序调试通常也称Debug,对被调试的程序进行“错误”定位是程序调试的必要步骤。
7.B。【解析】耦合是指模块间相互连接的紧密程度,内聚性是指在一个模块内部各个元素彼此之间接合的紧密程序。高内聚、低耦合有利于模块的独立性。
8.A。【解析】数据库设计的目的是设计一个能满足用户要求、性能良好的数据库。所以数据库设计是数据库应用的核心。
9.C。【解析】本题考查d0…while语句,至少执行一次循环体,依次输出ABC,这三个字母的ASCII值对10求模的余数,字母A的ASCII值对10求模的余数为5,字母B的ASCII值对10求模的余数为6,字母c的ASCII值对10求模的余数为7。所以正确答案为选项C。
10.C。【解析】在C语言中,将E—R图转换为关系模式时,实体和联系都可以表示为关系。
【2】
1.下列选项合法的标识符是( )。
A.1_1
B.1-j
C._11
D.1__
2.若函数中有定义语句“intk;”.则( )。
A.系统将自动给k赋初值0
B.这时k中的值无定义
C.系统将自动给k赋初值-l
D.这时k中无任何值
3.下列选项中,能用作数据常量的是( )。
A.o115
B.o118
C.1.5e1.5
D.115L
4.设有定义“intx=2;”,下列表达式中,值不为6的是( )。
A.X*=x+1
B.x++,2*x
C.x*=(1+x)
D.2*x,x+=2
5.程序段“intx=12;doubley=3.141593;printf(”%d%8.6’f",X,y);”的输出结果是( )。
A.123.141593
B.123.141593
C.12,3.141593
D.123.1415930
6.若有定义语句“doublex,y,*px,*Py;执行了px=&x;py=&y;”后,正确的输入语句是( )。
A.scanf("%f%f",x,y);
B.scanf("%f%f"&x,&y);
C.scanf("%If%le",px,py);
D.scanf("%lf%If"x,y);
7.下列是if语句的基本形式:
if(表达式)语句
其中“表达式”( )。
A.必须是逻辑表达式
B.必须是关系表达式
C.必须是逻辑表达式或关系表达式
D.可以是任意合法的表达式
8.有下列程序:
#include
voidmain( )
{intx;
scanf(”%d”,&x);
if(x<=3);else
if(x!=10)printf("%d\n",x);
}
程序运行时,输入的值在哪个范围才会有输出结果( )。
A.不等于10的整数
B.大于3且不等10的整数
C.大于3或等于10的整数
D.小于3的整数
9.有下列程序:
#include
voidmain( )
{inta=1,b=2,c=3,d=0;
if(a==1&&b++==2)
if(b!=2‖c--!=3)
printf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d,%d\n",a,b,c);
}
程序运行后的输出结果是( )。
A.1,2,3
B.1,3,2
C.1,3,3
D.3,2,1
10.下列程序段中的变量已正确定义:
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);printf("*");
程序段的输出结果是( )。
A.********
B.****
C.**
D.*
1.C。【解析】C语言中标识符命中的规则是:标识符只能由字母、数字和下画线组成,第一个字符必须为字母或下画线。所以选项C正确。
2.B。【解析】根据题目,若以这种方式定义变量k时,编译程序仅为k开辟存储单元,并未在存储单元中存放任何初始值,所以变量中的值无意义,称变量值“无定义”。所以正确答案为选项B。
3.D。【解析】选项A的第一个字母是O而不是数字0,所以不构成数值常量;选项B中,8不是八进制数字,八进制数为0到7;选项C中字母“e”后面的指数是小数而非整数,不合法,不是一个合法的指数形式的数值常量;在选项D中,可以在整型常量的后面加一个字母L,表示这个常量在内存中占4字节。
4.D。【解析】本题考查了复合运算符“=”和逗号表达式如何正确求值。逗号表达式的作用是用逗号将表达武连起来,其有效值为最后一个表达式的值,其运算的结合性从左到右进行运算。选项D是一个逗号表达式,其值为4。
5.A。【解析】根据输出函数printf中对输出数值格式的要求,第一个数和第二数之间没有空格或分隔号,因而此题答案为选项A。
6.C。【解析】此题主要考查输入函数的字符格式,lf和le表示以带小数点的数学形式或指数形式输入浮点数。
7.D。【解析】在C语言中if关键字后的一对圆括号中的表达式可以是c语言中任意合法的表达式。
8.B。【解析】在本题的程序中输入的数值小于等于3时,不进行任何处理。如果输入的数值大于3并且其值不等于10时,则打印输入的数值。所以本题的正确答案为选项B。
9.C。【解析】在程序中,当执行第一条if语句时,进行逻辑语句的判断,因为变量b的初值为2,所以其值加1后为3,与2不相等,所以if语句中的逻辑表达式的值为假,则程序执行最后一条else printf语句。输出变量为a,b,c,当前数值为1,3,3。所以正确答案为选项C。
10.D。【解析】本题中第二个for循环语句的后面有一个分号,所以两个for循环语句的执行语句为空。当两个for循环语句执行完后,再执行printf语句输出一个星号。所以正确答案为选项D。
【3】
1.数据的存储结构是指( )。
A.数据所占的存储空间
B.数据的逻辑结构在计算机中的存放形式
C.数据在计算机中的顺序存储方式
D.存储在计算机外存中的数据
2.将E-R图转换到关系模式时,实体与实体间的联系可以表示成( )。
A.属性
B.关系
C.键
D.域
3.对长度为n的线性表进行顺序查找,在最坏情况下需要比较的次数为( )。
A.125
B.n/Z
C.n
D.n+1
4.树是结点的集合,它的根结点的数目是( )。
A.有且只有1个
B.1或多于1
C.0或1
D.至少有2个
5.设R是一个二元关系,S是一个三元关系,则下列运算中正确的是( )。
A.R-S
B.R×S
C.R∩S
D.R∪S
6.关于结构化程序设计原则和方法的描述错误的是( )。
A.选用的结构只允许有一个入口和一个出口
B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现
C.不允许使用GOTO语句
D.语言中所没有的控制结构,应该采用前后一致的方法来模拟
7.对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所有元组,这样的集合运算称为( )。
A.并运算
B.交运算
C.差运算
D.积运算
8.下列叙述中正确的是( )。
A.在面向对象的程序设计中,各个对象之间具有密切的关系
B.在面向对象的程序设计中,各个对象都是公用的
C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小
D.上述三种说法都不对
9.结构化程序设计的三种基本结构是( )。
A.过程、子程序和分程序
B.顺序、选择和重复
C.递归、堆栈和队列
D.调用、返回和转移
10.在数据库设计中,将E-R图转换为关系模式的过程属于( )。
A.需求分析阶段
B.逻辑设计阶段
C.概念设计阶段
D.物理设计阶段
1.B。【解析】数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式。数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。
2.B。【解析】将E-R图转换成指定RDBMS中的关系模式是数据库逻辑设计的主要工作。从E—R图到关系模式的转换是比较直接的,实体和联系都可以表示成关系。
3.C。【解析】对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查找到所要找的元素为止。在最坏情况下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为n。
4.C。【解析】树具有明显的层次关系,即树是一种层次结构。在树结构中,根结点在第一层上。当树为非空时,树中有且只有一个根结点,当树为空时,树中根结点的数目为0。
5.B。【解析】关系的交(∩)、并(∪)和差(-)运算要求两个关系是同元的,显然作为二元的R和三元的S只能做笛卡儿积运算。
6.C。【解析】限制使用GOTO语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用GOTO语句。其他三项为结构化程序设计的原则。
7.A。【解析】关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。
8.C。【解析】面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。
9.B。【解析】程序的三种基本控制结构包括顺序、选择和重复(循环),这三种结构足以表达出各种其他形式的结构。
10.B。【解析】数据库设计阶段主要包括需求分析、概念设计、逻辑设计和物理设计。其中逻辑设计的主要工作是将E-R图转换为关系模式。
【4】
1.在C++语言中函数返回值的类型是由( )决定的。
A.调用该函数时系统临时
B.return语句中的表达式类型
C.定义该函数时所指定的函数类型
D.调用该函数时的主调函数类型
2.下列描述正确的是( )。
A.表示m>n为true或mn&&m
B.switch语句结构中必须有default语句
C.if语句结构中必须有else语句
D.如果至少有一个操作数为true,则包含‖运算符的表达式为true
3.使用ifstream流类定义流对象并打开磁盘文件时,文件的隐含打开方式为( )。
A.ios::in
B.ios::out
C.ios::inlios::out
D.没有默认
4.下列各类函数中,不是类的成员函数的是( )。
A.构造函数
B.抽象类
C.派生类
D.以上都不对
5.下面关于数组的初始化正确的是( )。
A.charstr[]={’a’,’b’,’e’}
B.charstr[2]={’a’,’b’,’e’)
C.charstr[2][3]={{’a’,’b’},{’C’,’d’},{’e’,’f’}}
D.charstr()={’a’,’b’,’C’}
6.类模板templateclassX{…},其中友元函数f对特定类型T(如int),使函数f(x)成为x模板类的友元,则其说明为( )。
A.friendvoidf();
B.friendvoidf(x);
C.friendvoidA::f();
D.friendvoidC::f(x);
7.类MyClass的定义如下:
classMyClass
{
public:
MyClass(){value=0;}
SetVariable(inti){valtic=i;}
private:
intvalue;
};
MyClass*P,my;p=&my;
则对下列语句序列正确的描述是( )。
A.语句p=&my;是把对象my赋值给指针变量P
B.语句MyClass*P,my;会调用两次类MyClass的构造函数
C.对语句*P.SetVariable(5)的调用是正确的
D.语句P->SetVariable(5)与语句my.SetVariable(5)等价
8.下面关于break语句的描述中,不正确的是( )。
A.break可以用于循环体内
B.break语句可以在for循环语句中出现多次
C.break语句可以在switch语句中出现多次
D.break语句可用于if条件判断语句内
9.如果表达式-x/y中的“--”和“/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为( )。
A.operator/(x.operator--(),y);
B.operator/(operator--(x),y);
C.X.operator--().operator/(y);
D.y.operator/(operator--(x));
10.已知类A有公用数据成员a,并重载了=运算符,且有Aobj2;constA*ptr=newA;,则下列语句错误的是( )。
A.ptr->a=100;
B.ptr=&obj2;
C.ptr++;
D.obj2=*ptr;
1.C。【解析】函数类型决定了函数返回值的类型。函数值返回类型可以由编译器自动完成类型转换。在函数有返回值的调用中,编译器将return后面的表达式的类型强制转换为该函数定义时指定的返回值类型。
2.D。【解析】本题主要考查C++语言的基本语法,选项A中应该为m>n‖m 3.D。【解析】使用ifstream流类定义流对象并打开磁盘文件时,文件没有默认的打开方式。其中ios::in是为输入而打开;iso::out是为输出而打开。
4.C。【解析】构造函数包括默认构造函数和拷贝构造函数等,析构函数和构造函数一样属于类的特殊的成员函数。而友元函数则是为了增加类的访问灵活性而允许其他类的成员函数或全局函数访问类的内部变量或成员函数的一种机制,其缺点是破坏了类的封装性。
5.A。【解析】本题考查的是字符数组的初始化。选项B中用三个元素初始化大小为2的数组,越界了;选项C中应该是2行3列的数组,题中使用3行2列初始化;选项D中数组应用方括号。
6.B。【解析】声明一个函数模板的格式template<模板形参表声明>函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。
7.D。【解析】语句p=&my;是把对象my的地址值赋给指针变量P。语句MyClass*P,my;,由于P只是一个指向对象的指针,因此定义指针P不调用构造函数,所以此语句只调用一次构造函数。对成员函数的引用可以通过两种形式:指针->成员函数(形参表)或者对象名.成员函数名(形参表)。
8.D。【解析】本题考查break语句的使用。break可以结束switch语句和for循环语旬,但是不能使用在条件判断语句内。
9.B。【解析】本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则c1.operator+(c2)与c1+c2含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2含义相同。同理,运算符“/”作为友元函数重载,则(--x)/y与表达式operator/((…x),y)相同。前缀运算符“--”作为友元函数重载,则--x与operator--(x)相同,所以组合起来是operator/(operator--(x),y);,即B选项。
10.A。【解析】本题考查const修饰符的作用。注意,const位置不同,其修饰的部分也是不同的。本题中const修饰的是ptr所指的对象本身,所以,ptr可以重新指向新的对象,而ptr→a则无法被更新。
【5】
1.可以用P.a的形式访问派生类对象P的基类成员a,其中a是( )。
A.私有继承的公有成员
B.公有继承的私有成员
C.公有继承的保护成员
D.公有继承的公有成员
2.下面程序的运行结果为( )。
#include
classA
{
intnum;
public:
A(inti){num=i;)
A(A&a){num=a.num++;}
voidprint(){cout< };
voidmain()
{
Aa(1),b(a);
a.print();
b.print();
}
A.11
B.12
C.21
D.22
3.设有定义charstr[80];以下不能将输入数据first\nsecond\n读取到数组str中的语句是( )。
A.cin.get(str,strlen(str));
B.cin.getline(str,strlen(str));
C.cin>>str;
D.cin.read(str,strlen(str));
4.下列程序的输出结果为( )。
#include
classTestClass
{
public:
TestClass(){val++;}
static,intval;
};
intTestClass::val=0;
voidmain()
{
TestClasscsl;
cout< TestClasscs2;
TestClasscs3,cs4;
cout< }
A.O3
B.13
C.14
D.24
5.有以下类定义:
classMyClass
{
private:
intid;
chargender;
char*phone;
public:
MyClass():id(0),gender(’#’),phone(NULl){}
MyClass(intn0,charge=’#’,char*ph=NULL)
{id=no;gender=ge;phone=ph;}
};
下列类对象定义语句中错误的是( )。
A.MyClassmyObj;
B.MyClassmyObj(11,"13301111155");
C.MyClassmyObj(12,’m’);
D.MyClassmyObj(12);
6.下列是关于派生类声明的开始部分,其中正确的是( )。
A.classvirtualB:publicA
B.virtualclassB:publicA
C.classB:publicAvirtual
D.classB:virtualpublicA
7.如果类A被说明成类B的友元,则( )。
A.类A的成员即类B的成员
B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员
D.类B不一定是类A的友元
8.下列关于虚基类的描述,错误的是( )。
A.设置虚基类的目的是为了消除二义性
B.虚基类的构造函数在非虚基类之后调用
C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用
D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
9.下列关于多态性的描述,错误的是( )。
A.C++语言中的多态性分为编译时的多态性和运行时的多态性
B.编译时的多态性可通过函数重载实现
C.运行时的多态性可通过模板和虚函数实现
D.实现运行时多态性的机制称为动态绑定
10.若有如下程序:
#include
usingnamespacestd;
classTestClassl
{
private:
inta;
public:
TestClassl(inti)
{
a=i:
}
voiddisp( )
{
cout< }
};
classTestClass2
{
private:
intb:
public:
TestClass2(intj)
{
b=j;
}
voiddisp()
{
cout< }
};
classTestClass3:publicTestClass2,publicTestClassl
{
private:
intc;
public:
TestClass3(intk):TestClass1(k-2),TestClass2(k+2)
{
c=k:
}
voiddisp()
{
TestClasssl::disp();
TestClasss2::disp();
cout< }
};
intmain()
{
TestClass30bj(10);
obj.disp();
return0;
}
程序执行后的输出结果是( )。
A.10,10,10
B.10,12,14
C.8,10,12
D.8,12,10
1.D。【解析】只有公有继承的公有成员才能被派生类的对象直接访问,其他的情况都会因为访问权限问题产生错误。
2.C。【解析】本题考查考生对拷贝构造函数的掌握。因为++运算是右结合的,所以在使用a对b赋值时,b的hum变为1,而a的num变为2(先赋值再自加)。
3.D。【解析】本题考查cin流对象的几种成员函数get,getline,read及流提取符>>的使用规则。
4.C。【解析】由主函数main入手,定义TestClass类的对象cs1,执行cs1.va1,其中va1为静态变量,根据intTestClass::val=0;初始化,TestClass中的TestClass(){val++;}构造函数执行后,val值为1。主函数中接着定义对象cs2,cs3,cs4。执行cout<
5.B。【解析】本题考查构造函数的应用。对象建立用初始化列表对数据成员进行时。列表中的参数类型要与构造函数中形参类型一致。B选项中第二个参数为13301111155,是字符串,而构造函数中第二个形参为char型,两者不一致造成错误。
6.D。【解析】声明派生类的一般形成为class派生类名:[继承方式]基类名。其中继承方式包括public、private和protected。而virtual为C++中的关键字,所以选项C错。虚函数的使用方法是在基类用virtual声明成员函数为虚函数。
7.D。【解析】本题考查的是友元类的定义:类A为类B的友元类,则类A的所有成员函数都是类B的友元函数,但反之则不一定成立。
8.B。【解析】虚基类的引入就是为了消除二义性,其构造函数的调用仍然是按照继承的顺序进行的,对于多个虚基类则按它们说明的次序调用,虚基类的构造函数先于非虚基类的构造函数执行。
9.C。【解析】编译时的多态性是通过函数重载和模板体现的,运行时的多态性是通过虚函数体现的。
10.D。【解析】首先定义TestClass3的对象obj,参数为10。其中TestClass3为TestClass1和TestClass2的派生类。然后调用disp成员函数。disp中首先执行TestClassl::disp();,然后执行TestClass2::disp();,最后执行输出语句cout<
仰望天空时,什么都比你高,你会自卑;俯视大地时,什么都比你低,你会自负;只有放宽视野,把天空和大地尽收眼底,才能在苍穹泛土之间找到你真正的位置。无须自卑,不要自负,坚持自信,坚持复习计算机等级考试题库-二级C++试题。
文章推荐:
2019年全国计算机等级考试题库“二级MS Office 高级应用考试大纲”
全国计算机等级考试报考成功后可以退费吗?(内附计算机等级考试题库)
温馨提示:
考试想拿高分吗?更多计算机等级考试题库二级ms office试题请点击查看>>>二级ms office
想要了解更多的计算机等级考试题库请点击下载>>>计算机等级考试题库
想知道更多关于计算机等级考试题库的最新资讯吗?点击进入>>>计算机等级考试题库资讯