二级C++178.docx
- 文档编号:28433118
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:16
- 大小:23.21KB
二级C++178.docx
《二级C++178.docx》由会员分享,可在线阅读,更多相关《二级C++178.docx(16页珍藏版)》请在冰豆网上搜索。
二级C++178
二级C++-178
(总分:
100.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
100.00)
1.下列叙述中正确的是______。
(分数:
2.50)
A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 √
C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D.上述三种说法都不对
解析:
[解析]线性表的顺序存储结构使用一组地址连续的存储单元,而链式仔储结构除了存放数据之外,还需要存放指向下一个元素的指针,因此选B。
2.下列叙述中正确的是______。
(分数:
2.50)
A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化
B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化
C.在栈中,栈底指针不变,栈中元素随栈底指针的变化而动态变化 √
D.上述三种说法都不对
解析:
[解析]栈中元素是遵循先进后出的原因,入栈和出栈都是对栈顶指针操作,因此随栈顶指针的变化而动态变化。
3.软件测试的目的是______。
(分数:
2.50)
A.评估软件可靠性
B.发现并改正程序中的错误
C.改正程序中的错误
D.发现程序中的错误 √
解析:
[解析]软件测试目的慨念理解题,本题的答案为D。
4.下面描述中,不属于软件危机表现的是______。
(分数:
2.50)
A.软件过程不规范
B.软件开发生产率低 √
C.软件质量难以控制
D.软件成本不断提高
解析:
[解析]软件的危机表现包括:
①用户对已完成的软件系统不满意;②软件产品质量不过关;③软件常常不可维护;④软件通常没有适当的文档;⑤对软件开发的进度和经费估计不准。
5.软件生命周期是指______。
(分数:
2.50)
A.软件产品从提出、实现、使用维护到停止使用退役的过程 √
B.软件从需求分析、设计、实现到测试完成的过程
C.软件的开发过程
D.软件的运行维护过程
解析:
[解析]软件生命周期的定义是通常将软件产品从提出、实现、使用维护到停止使用而退役的过程称。
还可将软件周期分为三阶段:
定义阶段、开发阶段和维护阶段。
6.面向对象方法中,继承是指______。
(分数:
2.50)
A.一组对象所具有的相似性质
B.一个对象具有另一个对象的性质
C.各对象之间的共同性质
D.类之间共享属性和操作的机制 √
解析:
[解析]面向对象方法中,继承是指新类从已有类那里得到已有的特性。
由此定义得到正确答案为D。
7.层次型、网状型和关系型数据库划分原则是______。
(分数:
2.50)
A.记录长度
B.文件的大小
C.联系的复杂程度
D.数据之间的联系方式 √
解析:
[解析]首先我们应该理解数据库的概念,数据库是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成。
可见数据库是数据之间的联系方式,因此也是数据库划分的原则。
8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是______。
(分数:
2.50)
A.一对一
B.一对多
C.多对多 √
D.多对一
解析:
[解析]本题考查的知识点是实体间的联系,其中有一对一、一对多、多埘多这几种联系。
本题中一个工作人员可以使用多台计算机,而一台计算机又可被多个人使用,所以是多对多的关系。
9.数据库设计中反映用户对数据要求的模式是______。
(分数:
2.50)
A.内模式
B.概念模式
C.外模式 √
D.设计模式
解析:
[解析]本题考查的知识点是数据库的三级模式,包括:
慨念模式、外模式和内模式。
其中,概念模式是数据库系统中对全局数据逻辑结构的描述。
外模式是用户的数据视图。
内模式又称物理模式,给出了数据库的物理存储结构和物耻方法,内模式对用户是透明的。
因此本题正确答案为C。
10.有三个关系R、S和T如下:
则由关系R和S得到T的操作是______。
(分数:
2.50)
A.自然连接 √
B..交
C.投影
D..并
解析:
[解析]关系运算中自然连接是使用等于运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
并是指两个结果集合并,交是指两个结果集的公共部分。
投影是从表中选出指定的属性值组成新表,是单目运算,由此可知本题答案为A。
11.下列关于函数参数的叙述中,正确的是______。
(分数:
2.50)
A.在函数原型中不必声明形参类型
B.函数的实参和形参共享内存空间
C.函数形参的生存期与整个程序的运行期形同
D.函数的形参在函数被调用时获得初始值 √
解析:
[解析]该题考查的内容是函数的参数问题,考生必须注意:
①函数说明一般遵循两个原则:
1)若一个函数先定义,后调用,则调用前不用说明。
2)若先调用,后定义,则调用前必须说明。
而且在函数原型中要声明形参的类型。
②函数参数的传递方式包括:
传值、传指针和传引用,当参数的传递方式是第一种时,形参和实参之间没有任何关系,分别属于不同的存储空间。
③函数形参只是在调用时被分配临时的存储空间,其生命周期是从被调用开始到该调用函数结束为止。
12.下列关于对象初始化的叙述中,正确的是______。
(分数:
2.50)
A.定义对象的时候不能对对象进行初始化
B.定义对象之后可以显式地调用构造函数进行初始化
C.定义对象时将自动调用构造函数进行初始化 √
D.在一个类中必须显式地定义构造函数实现初始化
解析:
[解析]该题考查的内容是对象的定义及初始化,考生必须清楚:
定义一个对象就像定义一个变量一样,但是不同的是对象的初始化是系统自动调用构造函数进行初始化,程序中不能直接调用构造函数。
当我们还可以通过类的已知对象定义该类的一个正在被创建的对象,此时我们要调用拷贝构造函数,注意拷贝构造函数也是系统自动调用的。
13.下列关于基类和派生类的叙述中,正确的是______。
(分数:
2.50)
A.每个类最多只能有一个直接基类
B.派生类中的成员可以访问基类中的任何成员
C.基类的构造函数必须在派生类的构造函数中调用
D.派生类除了继承基类的成员,还可以定义新的成员 √
解析:
[解析]该题考查的内容是派生类的定义及访问权限,考生应该掌握:
①派生类具有基类数据成员和成员函数,同时还可增加自己的新成员。
②当派生类私有继承基类时,基类的私有成员派生类是无法访问的。
③如果基类中定义了默认构造函数或者没有定义任何一个构造函数时.在派生类构造函数的定义中可以省略对基类构造函数的调用。
14.下列关于赋值运算符“=”重载的叙述中,正确的是______。
(分数:
2.50)
A.赋值运算符只能作为类的成员函数重载 √
B.默认的赋值运算符实现了“深层复制”功能
C.重载的赋值运算符函数有两个本类对象作为形参
D.如果已经定义了赋值(拷贝)构造函数,就不能重载赋值运算符
解析:
[解析]“=”、“[]”、“()”、“->”以及所有的类型转换运算只能作为成员函数重载。
15.下列关于模板的叙述中,正确的是______。
(分数:
2.50)
A.如果一个类中存在纯虚函数,这个类就是类模板
B.函数模板不能有形式参数表
C.类模板是一种参数化类型的类,是类的生成器 √
D.类模板中不能包含构造函数
解析:
[解析]该题考查的内容是类模板以及函数模板,类模板是一种参数类型的类,是类的生成器其类的成员组成和成员函数的代码都相同,所不同的是针对的类型,它是一系列相关类的模板或样本,因此可以包含构造函数。
对于函数模板,数据类型本身成了它的参数,因而是一种参数化类型的函数。
因此C项是正确的。
16.下列关于C++预定义流对象的叙述中,正确的是______。
(分数:
2.50)
A.cin是C++预定义的标准输入流对象 √
B.cin是C++预定义的标准输入流类
C.cout是C++预定义的标准输入流对象
D.cout是C++预定义的标准输入流类
解析:
[解析]该题考查的是预定义流对象,cin、cout是iostream类的标准输入/输出流对象,而并非输入/输出流类。
因此选项A是正确的。
17.下列选项中,正确的C++标识符是______。
(分数:
2.50)
A.6_group
B.group~6
C.age+3
D._group_6 √
解析:
[解析]该题考查的内容是标识符的命名规则,考生应该注意:
标识符是一个以字母或下画线开头的,由字母、数字、下画线组成的字符串;标识符不能与关键字同名;标识符中的字母不区分大小写。
A、B、C选项均含有非法标识,因此正确的答案是D选项。
18.下列选项中,正确的C++表达式是______。
(分数:
2.50)
A.counter++3
B.element3+
C.a+=b √
D."a"=b
解析:
[解析]“++”是单目运算符,不能有两个操作数,A项是错误的。
“+”是双目运算符,应该有两个操作数,B项也是错误的。
D项中"a"是字符常量,不能被赋值,D项也是错误的。
“+=”是双目运算符,应该有两个操作数,故C项是正确的。
19.下列循环语句中有语法错误的是______。
(分数:
2.50)
A.inti;for(i=1;i<10;i++)cout<<"*";
B.inti,j;for(i=1,j=0;i<10;i++,j++)cout<<"*";
C.inti=0;for(;i<10;i++)cout<<"*";
D.for
(1)cout<<"*"; √
解析:
[解析]该题考查的内容是for循环语句,其中for循环语句的语法格式是:
for(<表达式1>;<表达式2>;<表达式3>)<语句>
其中表达式1和表达式2和表达式3都可以省略,但是分号不能省略,这时for语句是一个死循环。
因此D项是错误的,for语句没有这种语法格式。
20.下列定义语句中,错误的是______。
(分数:
2.50)
A.intpx*; √
B.char*acp[10]
C.char(*pac)[10]
D.int(*p)()
解析:
[解析]A项如果想定义一个整型指针的话,形式应该为int*px;B项定义了一个指向数组的指针,C项定义了一个指针数组,每个数组元素都存放一个字符指针,D项定义了一个函数指针,其返回值为整型。
因此A项是错误的。
21.有如下程序:
#include<iostream>
usingnamespacestd;
intf(intx);
intsum(intn)
{
intx,s=0;
for(x=0;x<=n;x++)
s+=f(x);
returns;
}
intf(intx){return(x*x+1);}
intmain()
{
inta,b;
cout<<"Enteraintegernumber:
";
cin>>a;
b=sum(a);
cout<<"a="<<a<<",b="<<b<<endl;
return0;
}
如果输入数字3,其输出结果是______。
(分数:
2.50)
A.a=3,b=12
B.a=3,b=16
C.a=3,b=18 √
D.a=4,b=20
解析:
[解析]按照sum函数的功能,若输入a的值为3,则for循环,1次,函数f调用4次,b的值为0+(0^2+1)+(1^2+1)+(2^2+1)+(3^2+1)=18。
22.有如下程序:
#include<iostream>
usingnamespacestd;
intmain()
{
inty=18,i=0,j,a[8];
do{
a[i]=y%2;
i++;
y=y/2;
}while(y>=1);
for(j=i-1;j>=0;j--)
cout<<a[j];
cout<<endl;
return0;
}
其运行结果是______。
(分数:
2.50)
A.1000
B.10010 √
C.00110
D.10100
解析:
[解析]y的初始值为18,按照取余算法,数组a的值为{0,1,0,0,1}。
程序要求从最后一个元素开始输出,所以答案为10010。
23.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法并返回相加结果,该成员函数的声明语句为______。
(分数:
2.50)
A.ABoperator+(AB&a,AB&b);
B.ABoperator+(AB&a); √
C.operator+(ABa);
D.AB&operator+();
解析:
[解析]加法运算为双目运算,若作为AB类的成员函数重载,则第一个操作数就是类AB的对象本身,括号中含有一个参数,即另一个操作数。
由于要返回相加结果,必须有返回值类型AB。
24.下列关于派生类的说法,错误的是______。
(分数:
2.50)
A.一个派生类可以作为另一个派生类的基类
B.派生类至少有一个基类
C.派生类的成员除了它自己的成员外,还包含了其基类的成员
D.派生类中继承的基类成员的访问权限在派生类中保持不变 √
解析:
[解析]一个派生类可以从多个基类中继承,称为多继承。
派生类中除了自己定义的成员外,还包含其基类继承的成员。
派生类中基类成员的权限与继承方式息息相关,私有继承改变基类成员权限为私有成员,保护继承改变基类成员为保护成员,而公有继承则不改变基类成员的权限。
25.在C++语言类体系中,不能被派生类继承的有______。
(分数:
2.50)
A.转换函数
B.构造函数 √
C.虚函数
D.静态成员函数
解析:
[解析]派生类对象的数据结构是由基类中说明的数据成员和派生类中说明的数据成员共同构成,所以不能继承基类的构造函数。
26.下列函数原型声明中,错误的是______。
(分数:
2.50)
A.intfunction(intm,intn);
B.intfunction(int,int);
C.intfunction(intm=3,intn); √
D.intfunction(int&m,int&n);
解析:
[解析]该题考查的是函数原型声明问题,函数原型说明的一般格式为:
<类型><函数名>(<形参类型说明表>)
或
<类型><函数名>(<形参说明表>)
类型是该函数返回值的类型,必须与函数定义时指定的类型一致,形参说明表可以仅给出每一个参数的类型,也可以指明每一个形参的类型及其形参名。
函数声明不涉及默认参数问题,因此C项是错误的。
27.若MyClass为一个类,执行“MyClassa[4],*p[5];”语句时会自动调用该类的构造函数的次数是______。
(分数:
2.50)
A.2
B.5
C.4 √
D.9
解析:
[解析]在定义数组对象时,因为数组长度为4,因此要4次调用构造函数。
在定义指向对象的指针时,由于指针没有实例化,故不调用构造函数。
因此C项是正确的。
28.若在表达式“y/x”中,“/”是作为成员函数重载的运算符,则该表达式还可以表示为______。
(分数:
2.50)
A.operator/(x,y)
B.operator/(y)
C.operator/(x) √
D.operator/(y,x)
解析:
[解析]该题考查的内容是运算符的重载,考生首先要清楚,“/”是以成员函数重载的,成员函数有隐含参数的this指针,一般是指第一个操作数,对于双目运算符,有1个参数,一般指第二个操作数;对于单目运算符,参数表为空,“/”是双目运算符,第二个操作数为y,因此正确答案为C。
29.若要重载+、=、<<、==和[]运算符,则必须作为类成员重载的运算符是______。
(分数:
2.50)
A.+和=
B.=和<<
C.==和<<
D.=和[] √
解析:
[解析]C++规定“=”、“[]”、“()”、“->”以及所有的类型转换运算只能作为成员函数重载。
30.有函数模板声明和一些变量定义如下:
template<classT1,classT2,classT3>T1
sum(T2,T3);
doubled1,d2;
则下列调用中,错误的是______。
(分数:
2.50)
A.sum<double,double,double>(d1,d2);
B.sum<double,double>(d1,d2);
C.sum<double>(d1,d2);
D.sum(d1,d2); √
解析:
[解析]该考题考查的内容是函数模板调用时的实参表的省略,考生必须注意可否省略。
下面我们介绍一下模板实参的省略。
模板函数的调用格式为:
<模板函数名><<模板实参表>>(<函数实参表>);
在调用一个模板函数时,编译系统需要足够的信息来判断每个虚拟类型参数所对应的实际类型,我们可以从模板实参表和函数实参表中获得,其中模板实参表由于函数实参表,如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。
但当模板函数需要获得特定类型的返回值时,不能省略模板实参。
故D是错误的。
31.有下列语句序列:
charstr[10];cin>>str;
当从键盘输入“Ilovethisgame”时,str中的字符串是______。
(分数:
2.50)
A.“Ilovethisgame”
B.“Ilovethi”
C.“Ilove”
D.“I” √
解析:
[解析]该题考查的内容是输入字符流对象cin,考生应该注意:
①从键盘上输入多个字符型数据时,每两个数据之间用空格、制表符或换行隔开;②从键盘输入字符型数据时,不要用单引号将字符括起来。
当输入字符串“Ilovethisgame”时,当遇到空格时,系统认为输入结束,故str中的字符串为I,选项D是正确的。
32.有如下程序:
#include<iostream>
#include<cmath>
usingstd:
:
cout;
classPoint{
public:
frienddoubledistance(constPoint&p);
//p距原点的距离
Point(intxx=0,intyy=0):
x(xx),y(yy){}//①
private:
intx,y;
};
doubledistance(constPoint&p){
//②
returnsqrt(p.x*p.x+p.y*p.y);
}
intmain(){
Pointp1(3,4);
cout<<distance(p1);
//③
return0;
}
下列叙述中正确的是______。
(分数:
2.50)
A.程序编译正确 √
B.程序编译时语句①出错
C.程序编译时语句②出错
D.程序编译时语句③出错
解析:
[解析]该题考查的内容是含参构造函数以及友元函数的相关知识,①为含参构造函数,这里涉及默认参数的问题,当未传递参数时用默认参数,当传递参数时就不使用默认参数。
②为友元函数定义形式,定义友元函数不用加关键字friend。
③为友元函数在主函数中的调用,如果一个函数被定义为友元函数就可以访问该类中的所有成员。
故该程序编译成功,正确答案为A。
33.有如下程序:
#include<iostream>
usingnamespacestd;
classCD{
public:
~CD(){cout<<"C";}
private:
charname[80);
};
intmain(){CDa,*b,d[2];return0;}
运行时的输出结果是______。
(分数:
2.50)
A.CCCC
B.CCC √
C.CC
D..C
解析:
[解析]该题考查的内容是程序结束时析构函数的调用情况。
考生应该清楚当对象被创建时系统会自动调用构造函数,当程序结束对象被释放时,系统要调用析构函数。
根据程序的执行顺序定义对象a以及对象数组d,三次调用构造函数,当程序结束时亦三次调用析构函数,对于指针对象b并没有被实例化,因此创建时不调用构造函数,指针对象时没有被删除,所以也不调用析构函数。
故正确答案是B。
34.某类中有一个无参且无返回值的常成员函数Show,则正确的Show函数原型是______。
(分数:
2.50)
A.constvoidShow();
B.voidconstShow();
C.voidShow()const; √
D.voidShow(const);
解析:
[解析]陔题考查的内容是常成员函数的说明形式,其形式为:
<返回类型><成员函数名>(<参数表>)const;
根据题目要求知,正确答案为C。
35.若已定义了类Vehicle,则下列派生类定义中,错误的是______。
(分数:
2.50)
A.classCar:
Vehicle{/*类体略*/};
B.classCar:
publicCar{/*类体略*/}; √
C.classCar:
publicVehicle{/*类体略*/};
D.classCar:
virtualpublicVehicle{/*类体略*/);
解析:
[解析]该题考查的内容是派生类的继承,考生应该掌握:
派生类继承方式有三种,即公有、私有和保护,当不指明继承方式时默认为私有继承,为了解决多继承中的二义性问题,我们可以通过虚类继承的方式继承即D的形式。
所以B项是错误的。
36.有如下程序:
#include<iostream>
usingnamespacestd;
classMusic{
public:
voidsetTitle(char*str){strcpy(title,str);}
protected:
chartype[10];
private:
chartitle[20];
};
classJazz:
publicMusic{
public:
voidset(char*str){
strcpy(type,"Jazz");//①
strcpy(title,str);//②
}
};
下列叙述中正确的是______。
(分数:
2.50)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 C+ 178