1、二级 C+笔试-412 及答案解析(总分:87.00,做题时间:90 分钟)一、选择题(总题数:35,分数:59.00)1.关于 const 修饰符的说法中,错误的是A) const 既可以修饰成员函数,也可以修饰数据成员,还可以修饰对象B) 若 const 修饰了一个对象,则该对象中的所有数据成员都无法被更新C) 常对象无法调用一般成员函数D) 常成员函数只能被常对象调用,不能被一般对象调用(分数:2.00)A.B.C.D.2.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。#includeiostreamusing
2、namespace std;class Baseint a,b;public:Base(int x,int y)a=x;b=y;void show()couta,bendl;class Derived:public Baseint c,d;public:Derived(int x,int y,int z,int m):Base(x,y)c=z;d=w;void show()coutc,dendl;int main()Base B1(50,50),*pb;Derived D1(10,20,30,40);pb=下列对函数模板 Max()的调用中错误的是( )。A) Max(3.5,4.5) B)
3、Max(3.5,4)C) Maxdouble(3.5,4.5) D) Maxdouble(3.5,4)(分数:2.00)A.B.C.D.17.软件工程的出现是由于( )。A) 程序设计方法学的影响 B) 软件产业化的需要C) 软件危机的出现 D) 计算机的发展(分数:2.00)A.B.C.D.18.假定 a 为一个整型数组名,则元素 a4的字节地址为A) a+4 B) a+8 C) a+16 D) a+32(分数:2.00)A.B.C.D.19.下列关于指针的运算中,( )是非法的。A) 两个指针在一定条件下,可以进行相等或不等的运算B) 可以将一个空指针赋值给某个指针C) 一个指针可以加上两
4、个整数之差D) 两个指针在一定条件下可以相加(分数:1.00)A.B.C.D.20.在各种不同的软件需求中,功能需求描述了用户使用产品必须要完成的任务,可以在用例模型或方案脚本中予以说明,而从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的额外要求的是指( )。A) 用户需求 B) 非功能需求 C) 业务需求 D) 功能要求(分数:2.00)A.B.C.D.21.下列描述中错误的是( )。A) 派生类可以使用 private 派生B) 对基类成员访问必须是无二义性的C) 赋值兼容规则也适合于多继承D) 基类和派生类中存在同名函数,将出现二义性(分数:2.00)A.B.C.D.22.
5、以下程序的输出结果是( )。#includeiostream.hvoid main()int i, j,x=0;fof (i=0;i2;i+=x+;for(j=0;j3;j+=if(j%2)continue:x+;x+;cout“x=“x;=A) x=4 B) x=8 C) x6 D) x=12(分数:1.00)A.B.C.D.23.下列有关类成员的叙述中,正确的是A) 友元函数是类的成员函数B) 类成员的默认访问权限是私有的C) 类成员函数必须声明为公有的D) 类的静态数据成员不能是常成员(分数:2.00)A.B.C.D.24.实现输出为八进制的符号是( )。Adec Bhex Coct D
6、setw(8)(分数:1.00)A.B.C.D.25.运算符重载是对已有的运算符赋予多重含义,因此A) 可以对基本类型(如 int 类型)的数据,重新定义“+”运算符的含义B) 可以改变一个已有运算符的优先级和操作数个数C) 只能重载 C+中已经有的运算符,不能定义新运算符D) C+中已经有的所有运算符都可以重载(分数:1.00)A.B.C.D.26.有如下函数模板的定义:templateclass TT func(T x,T y)return x*x+y*y;在下列对 func 的调用中不正确的是A) func(3,5); B) func(3,5);C) func(3,5.5); D) fu
7、ncint(3,55);(分数:1.00)A.B.C.D.27.下面对 C+重载运算符描述正确的是( )。A) 只有类成员运算祠: B) 只有友元运算符C) 只有非成员和非友元运算符 D) 上述三者都有(分数:2.00)A.B.C.D.28.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则( )。A) 完全相同 B) 完全不同C) 部分相同,部分不同 D) 以上都不对(分数:2.00)A.B.C.D.29.下列是 if 语句的基本形式:if(表达式)语句其中“表达式”( )。A) 必须是逻辑表达式 B) 必须是关系表达式C) 必须是逻辑表达式或关系表达式 D) 可以
8、是任意合法的表达式(分数:2.00)A.B.C.D.30.线性表 L=(a1,32,a3,ai,an),下列说法正确的是 A) 每个元素都有一个直接前件和直接后件B) 线性表中至少要有一个元素C) 表中诸元素的排列顺序必须是由小到大或由大到小D) 除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件(分数:1.00)A.B.C.D.31.为用户与数据库系统提供接口的语言是A) 高级语言 B) 数据描述语言(DDL)C) 数据操纵语言(DML) D) 汇编语言(分数:1.00)A.B.C.D.32.在下面的运算符重载函数的原型中,错误的是( )。A) Volume op
9、erator-(double,double);B) double Volume:operator-(double);C) Volume Volume:operator-(Volume);D) Volume operator-(Volume);(分数:2.00)A.B.C.D.33.下列数据模型中,具有坚实理论基础的是A) 层次模型 B) 网状模型 C) 关系模型 D) 以上 3 个都是(分数:2.00)A.B.C.D.34.以下程序的运行结果是_。#includeiostreamusing namespace std;const double PI=3.14:class Pointint x,
10、y;public:Point(int a,int b)x=a;y=b;int getx()return。;int gety()return y;class Circle:public Pointint r,public:Circle(int a,int b,int c):Point(a,b) r= c; int getr( )return r;double area( )return PI*r*r;int main( )Circle c1(5 ,7 ,10);coutc1.area()endl;return 0,A) 25 B) 49 C) 100 D) 314(分数:2.00)A.B.C.D
11、.35.下面叙述正确的是_ .A) 算法的执行效率与数据的存储结构无关B) 算法的空间复杂度是指算法程序中指令(或语句)的条数C) 算法的有穷性是指算法必须能在执行有限个步骤之后终止D) 以上三种描述都不对(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:28.00)36.下列程序的输出结果是_。#includeiostream.h)templateclass TTmax(T x,int n)int i;T maxvx0;for(i1;i(n;i+)if(maxvTmax(T x,int n)int i;T maxvx0;for(i1;i(n;i+)if(maxvxi)maxv
12、xi;return maxv;void main()inta3,2,7,6,8,9;double b1.2,3.4,2.5,7.3,6.8;coutmax(a,4)“,“max(b,3)endl;(分数:2.00)填空项 1:_ (正确答案:7,3.4。)解析:解析 函数的功能是求出数组中指定范围的元素中的最大值。所以在 a 数组中前四个数据中最大值为 7,数组 b 中前 3 个元素中最大值为 3.4。37.非成员函数必须声明为类的 1 才能访问这个类的 private 成员。(分数:2.00)填空项 1:_ (正确答案:友元函数)解析:解析 C+的友元提供了不同类或对象的成员函数之间、类的成
13、员函数与一般函数之间数据共享的机制。一个类可以利用 friend 将一般函数、其他类成员函数或者其他类声明为友元。友元的声明可以放在类的任何一个区域。定义须在类外声明在公有私有部分均可。38.软件结构是以 1 为基础而组成的一种控制层次结构。(分数:1.00)填空项 1:_ (正确答案:模块)解析:39.插入排序算法的主要思想:每次从未排序序列中取出一个数据,插入到已排序序列中的正确位置。Insert 类的成员函数 sort()实现了插入排序算法,请填空。class Insertpublic:Insert(int *b0,int n0):b(b0),n(n0);/参数 b0 是某数组首地址,n
14、 是数组元素个数void sort()/此函数假设已排序序列初始化状态只包含 b0,未排序序列初始为 b1.bn-1for(int i=1;in;+i)int t=bi;int j;for(_;j0;-j)if(t=bj-1)break;bj=bj-1;bj=t;(分数:2.00)填空项 1:_ (正确答案:j=i)解析:解析 在函数 sort()中,外层 for 循环中依次将数组 b 中的值赋值给变量 t,然后在内层循环中依次与已经排序的数组元素进行比较,并在符合条件的位置插入该元素。由“int t=bi;”语句可知,数组中有 i 个元素已经排好了序。因此,根据内层循环中的 j0;-j 语句
15、,知道内层循环是将当前的第i 个元素与 j 个元素进行比较,前面已知数组中有 i 个元素已经排好了序,根据题干中的要求“插入到已排序序列中”,即 j=i。40.没变量 a 和 b 已正确定义并赋初值。请写出 a-=a+b 等价的赋值表达式 1。(分数:2.00)填空项 1:_ (正确答案:a=a-(a+b)或(a=-b))解析:解析 本题考查运算符与赋值表达式。a-=a+b 可表示为 a=a-(a+b),也可化简成 a=-b。41.若有如下程序段:#include iostreamusing namespace std;int main()char *p=“abcdefgh“,*r;long
16、*q;q=(long *)p;q+;r=(char *)q;coutrend1;return 0;该程序的输出结果是_。(分数:1.00)填空项 1:_ (正确答案:efgh)解析:解析 本题定义了一个字符型指针变量 p,并通过赋初值让它指向了一个字符串,还定义了另一个字符型指针变量 r 和一个长整型指针变量 q。首先通过语句“a=(long*)p;”,把 p 的地址值强制转换为长整型地址值并赋值给小然后执行“q+;”,地址值增加了 4,执行语句“r=(char*)q;”,把长整型指针变量 q 的值再强制转换成字符型地址值并赋给 r,r 的值应为字符串中字符“e”的地址。最后输出r 指向的字符
17、串。42.对软件设计的最小单位(模块或程序单元)进行的测试通常称为 1 测试。(分数:2.00)填空项 1:_ (正确答案:单元)解析:解析 对模块或函数进行测试就成为单元测试,对整个系统进行测试就是系统测试。43.下面是一个栈类的模板,其中 push 函数将元素 i 压入栈顶,pop 函数弹出栈顶元素。栈初始为空,top 值为 0,栈顶元素在 stacktop-1)中,在下面横线处填上适当语句,完成栈类模板的定义。template class Tclass Tstackenumsize=1000;T stacksize;int top;public:Tstack():top(0) void
18、push(const TT pop() if(top=0) exit(1); / 栈空时终止运行return_;(分数:2.00)填空项 1:_ (正确答案:stack -top;)解析:解析 返回栈顶元素,并减一。44.有以下程序:#includeiostreamusing namespace std;class MyClasspublic:static int s;MyClass();void SetValue(int val);int MyClass:s=0;MyClass:MyClass()S+;void MyClass:SetValue(int val)s=val;int main(
19、)MyClass my3,*p;p=my;for(int k=0;k3;k+)p-SetValue(k+1);p+;coutMyClass:send1;return 0;运行后的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:3)解析:解析 分析题目,for(int k=0;k3;k+)循环三次,使得函数 SetValue()每次被赋予的参数分别是 1、2、3,最后一次 3 的值会赋给 s,所以最终输出语句 coutMyClass:send1;输出结果为3。45.以下程序的输出结果是 。#includeiostream.hclass objectprivate:int val;pu
20、blic:object( ) ;object(int i) ;object( ) ;object: :object( ) val0;cout “Default constructor for object“ endl;object: :object(int i) vali;cout “Constructor for object“ val endl;object: :object( ) cout “Destructor for object“ val endl;class container private:object one;object two;int data;public:conta
21、iner( ) ;container(int i,int j,int k) ;container( ) ;container: :container( ) data0;cout “Default constructor for container“ endl;container: :container(int i,int j,int k) :two(i) ,one(j) datak;cout “Constructor for container“ endl;container: :container( ) cout “Destructor for container“ endl;void ma
22、in( ) container anObj(5,6,10) ;(分数:2.00)填空项 1:_ (正确答案:Constructor for object6Constructor for object5Constructor for containerDestructor for containerDestructor for object5Destructor for object6)解析:解析 C语言中的构造函数和析构函数分别是在声明对象时和对象调用完毕后调用,本题中的调用就是这样成对出现的。46.执行下面程序输出的是_。#include iostreamusing namespace st
23、d;template typename TT total(T *data)Ts=0;while( *data) s+=*data+;return s;int main()int s=1,3,5,7,0,2,4,6,8;couttotal(s);return 0;(分数:2.00)填空项 1:_ (正确答案:16)解析:解析 本题中函数模板实现的功能是计算所传入数组 data 中元素值为 0 的元素前面所有元素值的和。47.下列程序运行时的输出结果是_。#includeiostreamusing namespace std;int Xfun(int*a, int n);int main()int
24、 b6=-2, 6, 8, -3, 5, 4);coutXfun(b, 6)end1;return 0;int Xfun(int*a, int n)int x=0;for(int*p=a; pa+n; p+)if(*p0)x+=*p;return X;(分数:2.00)填空项 1:_ (正确答案:23)解析:解析 函数 Xfun()的功能是求出数组 a 中所有大于 0 的元素的和。48.C语言提供的基本控制结构可以分为 3 种类型:顺序结构、 和循环结构。(分数:2.00)填空项 1:_ (正确答案:选择结构)解析:解析 顺序结构(也叫连续结构) 和循环结构是经常被使用的,不过选择结构(if 和 switch) 也是一种重要的流程控制结构。49.耦合和内聚是评价模块独立性的两个主要标准,其中反映了模块内各成分之间联系的是 1。(分数:2.00)填空项 1:_ (正确答案:内聚)