全国计算机等级考试《二级C++语言程序设计》试题(网友回忆版)三

二级C++语言程序设计 历年真题 共 43 题 448 次浏览 更新于 2026-09-28
下载试卷(PDF)

一、选择题

每小题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;
}
运行时的输出结果是(  )。
  • 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;
}
运行时的输出结果是(  )。
  • 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”,横线处的内容应为(  )。
  • A.isdiveam&operator<<
  • B.osdiveam&operator<<
  • C.friend isdiveam&operator<<
  • D.friend osdiveam&operator<<
21
已知函数func的原型为
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;
}
运行后的输出结果是(  )。
  • 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;
}
运行后的输出结果是(  )。
  • 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)
则下列选项中,不能作为它的重载函数的原型是(  )。
  • 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)时,返回的函数值为(  )。
  • 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被调用的次数是(  )。
  • 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**********”下面的一行语句,不允许改动程序中的其他任何内容。
题目图片

三、简单应用题

共24分。

42
请打开考生文件夹下的解决方案文件proj2,其中的主程序文件main.cpp中定义有类XBase和XDerived,以及主函数main。程序文本中位于每行“//ERROR**********found**********”下面的一行内有一处下划线标记,请在每个下划线标记处填写合适的内容,并删除掉下划线标记。
  经修改后运行程序,得到的输出结果为: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********”两行之间填写内容,不允许修改其他任何地方的内容。
题目图片

题目图片