全国计算机等级考试《二级C++语言程序设计》试题(网友回忆版)三
二级C++语言程序设计
历年真题
共 43 题
448 次浏览
更新于 2026-09-28
一、选择题
每小题1分,共40分。
1
设数据结构B={D,R},其中D={a,b,c,d,e,f},R={(f,a),(d,b),(e,d),(c,e),(a,c)},该数据结构为( )。
- A.线性结构
- B.循环结构
- C.循环链表
- D.非线性结构
2
下列叙述中错误的是( )。
- A.循环队列的条件是队头指针与队尾指针相同
- B.若二叉树没有叶子节点,则为空二叉树
- C.带链栈的栈底指针是随栈的操作而动态变化的
- D.若带链队列中只有一个元素,则队头指针与队尾指针必定相同
3
某带链栈的初始状态为top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=bottom=20。该栈中的元素个数是( )。
- A.1
- B.0
- C.20
- D.不确定
4
设一棵度为3的树,其中度为2、1、0的结点数分别是3、1、6。该树中度为3的结点数为( )。
- A.1
- B.2
- C.3
- D.不可能有这样的树
5
下面描述错误的是( )。
- A.模块的独立性与模块的信息隐蔽和局部化无关
- B.内聚性与耦合性是模块独立程度的定性度量标准
- C.一个模块的内聚性越高则该模块的独立性越强
- D.一个模块的耦合性越高则该模块的独立性越弱
6
下面属于黑盒测试方法的是( )。
- A.错误推测法
- B.基本路径测试
- C.判定覆盖
- D.条件覆盖
7
下面模型中为概念模型的是( )。
- A.实体-联系模型
- B.层次模型
- C.关系模型
- D.网状模型
8
学生关系模式中有D(D#,Dn,DI,DAddr)(其属性分别为系编号、系名称、系主任和系地址)和S(S#,Sn,SG,Date,Maj,D#)(其属性分别为学号、姓名、性别、入学日期、专业和系编号)两个关系,关系S的主键(码)是S#,关系S的外键(码)是( )。
- A.D#
- B.Maj
- C.DI
- D.Dn
9
关系的实体完整性要求关系中不能为空的属性是( )。
- A.主键属性
- B.外键属性
- C.全部属性
- D.候选键属性
10
学生选修课程的关系模式为SC(S#,Sn,Sd,Sa,C#,G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩);C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是( )。
- A.S#→Sd
- B.(S#,C#)→G
- C.C#→Cn
- D.C#→P#
11
已知类X中一个成员函数的原型声明为“void Copy(X& r);”,则下列选型中,解释正确的是( )。
- A.r为指向类X的指针
- B.r的地址值赋值给了变量Copy
- C.变量X与r按位与的结果作为函数Copy的参数
- D.r是类X的对象引用,用来作为函数Copy的形参
12
下列字符串中不能作为C++标识符的是( )。
- A.IN25
- B.test
- C._1481
- D.123
13
下列语句中能正确定义变量的是( )。
- A.const int *p NULL;
- B.const int y==99;
- C.const int x=0;
- D.const int z:100;
14
有如下程序:
#include
using namespace sdiv;
int main()
{
int sum=0;
for(int i=1;i<4;i++)
{
for(int j=i;j<4;j++)
sum+=j;
}
cout<
return 0;
}
运行时的输出结果是( )。
#include
using namespace sdiv;
int main()
{
int sum=0;
for(int i=1;i<4;i++)
{
for(int j=i;j<4;j++)
sum+=j;
}
cout<
return 0;
}
运行时的输出结果是( )。
- A.15
- B.17
- C.16
- D.14
15
下列语句中,能够进行正确初始化的是( )。
- A.char sdiv="abcde";
- B.char *sdiv="abcde";
- C.char sdiv[4]="abcde";
- D.char sdiv[5]="abcde";
16
有如下程序段:
#include
using namespace sdiv;
int i=1;int j=4;
int main()
{
int i=5;
j+=i;
cout<
return 0;
}
运行时的输出结果是( )。
#include
using namespace sdiv;
int i=1;int j=4;
int main()
{
int i=5;
j+=i;
cout<
return 0;
}
运行时的输出结果是( )。
- A.14
- B.95
- C.59
- D.55
17
下列关于运算符重载的叙述中,错误的是( )。
- A.重载运算符能够改变运算符原有的优先级
- B.有些运算符不能作为普通函数的重载
- C.重载运算符不能改变运算符原有的操作数个数
- D.加法运算符重载为成员函数时形参表只有一个参数
18
下列运算符函数中肯定不属于类Can的成员函数的是( )。
- A.int operator - (Can,Can);
- B.Can operator - (double);
- C.int operator - (Can);
- D.Can operator - (int);
19
下列因素中,对C++编译器区分重载函数无意义的是( )。
- A.常成员函数关键字const
- B.返回值类型
- C.参数类型
- D.参数个数
20
有如下程序:

若运行时的输出结果是“2014.9.9”,横线处的内容应为( )。

若运行时的输出结果是“2014.9.9”,横线处的内容应为( )。
- A.isdiveam&operator<<
- B.osdiveam&operator<<
- C.friend isdiveam&operator<<
- D.friend osdiveam&operator<<
21
已知函数func的原型为
int func(int,int);
则下列选项中,不能作为它的重载函数原型的是( )。
int func(int,int);
则下列选项中,不能作为它的重载函数原型的是( )。
- A.bool func(int,int,bool);
- B.void func(int a,int b);
- C.int func(int,char);
- D.float func(double,int);
22
已知表达式++x中的“++”是作为成员函数重载的运算符,则与++x等效的运算符函数调用形式为( )。
- A.x.operator++(1)
- B.operator++(x)
- C.x.operator++()
- D.x.operator++(x)
23
有如下程序
#include
using namespace sdiv;
void fun(int &x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
int main()
{
int x=4,y=5;
fun(x,y);
cout<
return 0;
}
运行后的输出结果是( )。
#include
using namespace sdiv;
void fun(int &x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
int main()
{
int x=4,y=5;
fun(x,y);
cout<
return 0;
}
运行后的输出结果是( )。
- A.4,5
- B.5,4
- C.4,4
- D.5,5
24
有如下程序:
#include
using namespace sdiv;
int f1(int x,int y=5){return x+y;}
int f1(double x){return x;}
int main()
{
int a=3;
double b=2.5;
cout<
return 0;
}
运行后的输出结果是( )。
#include
using namespace sdiv;
int f1(int x,int y=5){return x+y;}
int f1(double x){return x;}
int main()
{
int a=3;
double b=2.5;
cout<
return 0;
}
运行后的输出结果是( )。
- A.5
- B.6
- C.10
- D.11
25
有如下类定义:

能够正常运行,横线处的声明语句应为( )。

能够正常运行,横线处的声明语句应为( )。
- A.friend MyClass operator+(MyClass,MyClass);
- B.friend MyClass operator+(MyClass&,MyClass&);
- C.friend MyClass operator+(MyClass,MyClass&);
- D.friend MyClass operator+(MyClass&,MyClass);
26
已知函数func的原型为
int func(int,int)
则下列选项中,不能作为它的重载函数的原型是( )。
int func(int,int)
则下列选项中,不能作为它的重载函数的原型是( )。
- A.bool func(int,int,char);
- B.int func(int,char);
- C.float func(int,int);
- D.double func(double,int);
27
已知表达式x++中的“++”是作为成员函数重载的运算符,则与x++等效的运算符函数调用形式为( )。
- A.x.operator++()
- B.operator++(x)
- C.x.operator++(x,1)
- D.x.operator++(0)
28
计算数列第n项的函数定义如下:
int fa(int n)
{
if(n==1) return 1;
else return 3*fa(n-1)+2;
}
若执行函数调用表达式fa(4)时,返回的函数值为( )。
int fa(int n)
{
if(n==1) return 1;
else return 3*fa(n-1)+2;
}
若执行函数调用表达式fa(4)时,返回的函数值为( )。
- A.53
- B.17
- C.23
- D.49
29
计算斐波那契数列第n项的函数定义如下:
int fib(int n)
{
if(n==0)
return 1;
else if(n==1)
return 2;
else
return fib(n-1)+fib(n-2);
}
执行调用表达式fib(2),则函数fib被调用的次数是( )。
int fib(int n)
{
if(n==0)
return 1;
else if(n==1)
return 2;
else
return fib(n-1)+fib(n-2);
}
执行调用表达式fib(2),则函数fib被调用的次数是( )。
- A.1
- B.2
- C.3
- D.4
30
有如下程序

运行后的输出结果是( )。

运行后的输出结果是( )。
- A.3
- B.5
- C.6
- D.编译出错
31
下列关于多个成员对象构造函数调用顺序的叙述中,正确的是( )。
- A.与成员对象在类中声明的顺序相同
- B.与成员对象的析构函数的调用顺序相同
- C.与成员对象在初始化列表中的初始化顺序相同
- D.与成员对象在构造函数体中被调用的顺序相同
32
在如下类定义和对象定义:

下列函数调用中错误的是( )。

下列函数调用中错误的是( )。
- A.a.GetData();
- B.a.SetData(10);
- C.b.GetData();
- D.b.SetData(10)
33
在C++中,编译系统自动为一个类生成默认构造函数的条件是( )。
- A.该类没有定义任何有参构造函数
- B.该类没有定义任何无参构造函数
- C.该类没有定义任何构造函数
- D.该类没有定义任何成员函数
34
下列关于构造函数的叙述中,错误的是( )。
- A.构造函数在创建类对象时自动执行
- B.构造函数要负责对所有数据成员进行初始化
- C.可以为构造函数的参数设置默认值
- D.如果没有声明任何构造函数,则该类的构造函数有2个
35
下列关于构造函数的叙述中,正确的是( )。
- A.每个类中都有一个复制构造函数
- B.类成员的初始化在构造函数体中进行
- C.创建对象时由用户负责调用构造函数
- D.默认构造函数是指参数表为空的构造函数
36
下列关于类成员的叙述中,正确的是( )。
- A.友元函数是类的成员函数
- B.类成员的默认访问权限是私有的
- C.类的成员函数都是内联函数
- D.类成员函数必须声明为公有的
37
下列关于this指针的叙述中,正确的是( )。
- A.类的成员函数都有this指针
- B.类的友元函数都有this指针
- C.类的非静态成员函数具有this指针
- D.任何与类相关的函数都有this指针
38
有如下程序:

运行后的输出结果是( )。

运行后的输出结果是( )。
- A.1 3 2
- B.1 3 3
- C.1 2 3
- D.1 2 2
39
下列关于构造函数的叙述中,错误的是( )。
- A.构造函数名与类名相同
- B.构造函数可以有返回值
- C.构造函数可以重载
- D.每个类都有构造函数
40
下列关于this指针的叙述中,错误的是( )。
- A.this指针只能在类的非静态成员函数中使用
- B.this指针存储着对象的地址
- C.this指针不需要显式定义
- D.在构造函数中不能使用this指针
二、基本操作题
共18分。
41
请打开考生文件夹下的解决方案文件proj1,其中的主程序文件main.cpp中定义有Xabc类和主函数main。在程序文本中位于每行“//ERROR**********found**********”下面的一行有错误,请加以更正。更正后程序的输出为:
2 5 8 7 12
34
注意:只允许修改每个“//ERROR**********found**********”下面的一行语句,不允许改动程序中的其他任何内容。

2 5 8 7 12
34
注意:只允许修改每个“//ERROR**********found**********”下面的一行语句,不允许改动程序中的其他任何内容。

三、简单应用题
共24分。
42
请打开考生文件夹下的解决方案文件proj2,其中的主程序文件main.cpp中定义有类XBase和XDerived,以及主函数main。程序文本中位于每行“//ERROR**********found**********”下面的一行内有一处下划线标记,请在每个下划线标记处填写合适的内容,并删除掉下划线标记。
经修改后运行程序,得到的输出结果为:61 29

经修改后运行程序,得到的输出结果为:61 29

四、综合应用题
共18分。
43
请打开考生文件夹下的解决方案文件proj3,其中包含主程序文件main.cpp和用户定义的头文件Array.h,整个程序包含有XArray类的定义和main主函数的定义。请把主程序文件中的XArray类的成员函数twoMinSum()的定义补充完整,补充的内容填写在“//********333********”与“//********666********”两行之间。
经修改后运行程序,得到的输出为:
3 5 7 9 8 6 4 2
5
注意:只允许在“//********333********”与“//********666********”两行之间填写内容,不允许修改其他任何地方的内容。


经修改后运行程序,得到的输出为:
3 5 7 9 8 6 4 2
5
注意:只允许在“//********333********”与“//********666********”两行之间填写内容,不允许修改其他任何地方的内容。


输入阅读码
查看答案与解析需要输入阅读码