二级C++分类模拟275.docx
- 文档编号:30261345
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:19
- 大小:24KB
二级C++分类模拟275.docx
《二级C++分类模拟275.docx》由会员分享,可在线阅读,更多相关《二级C++分类模拟275.docx(19页珍藏版)》请在冰豆网上搜索。
二级C++分类模拟275
二级C++分类模拟275
(总分:
73.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
73.00)
1.有如下程序:
#include<iostream>
usingnamespacestd;
classPoint{
public:
staticintnumber;
public:
Point(){number++;}
~Point(){number--;}
};
intPoint:
:
number=0;
intmain(){
Point*ptr;
PointA,B;
{
Point*ptr_point=newPoint[3];
ptr=ptr_point;
}
PointC;
cout<<Point:
:
number<<endl;
delete[]ptr;
return0;
}
执行这个程序的输出结果是______。
(分数:
1.00)
A.3
B.4
C.6 √
D.7
解析:
[解析]本题考查默认构造函数,题目中定义一个对象A、B以及对象数组Point[3],又定义了对象C,共执行6次构造函数,number变为了6,所以本题答案为C。
2.有如下输出语句:
cout<<setw(5)<<fixed<<setprecision(3)<<3.1415926;
此语句的输出结果是
(分数:
2.50)
A.3.141
B.3.142 √
C.3.1415
D.3.1416
解析:
3.下列关于函数模板的说法,正确的是______。
(分数:
2.50)
A.在定义模板参数时关键字typename和class可以互换 √
B.函数模板的形参表中只能有虚拟类型参数
C.调用函数模板时,模板实参永远不能省略
D.在函数模板的声明中,只能使用1个虚拟类型参数
解析:
[解析]本题考查的是函数模板的相关知识。
在声明模板参数时,关键字typename与class可以互换,是等价的,故选项A正确。
在函数模板形参表中也可以有其他类型参数,不仅仅是虚拟类型参数,也可以有实际类型参数,故选项B错误。
在对模板函数的调用可以只使用函数实参,而省略了模板实参,但模板实参的省略并不是必然的,而是有条件的,故选项C错误。
函数模板的模板形参表中可以有多个参数,故选项D错误。
综上所述,选择A。
4.有如下程序:
#include<iostream.h>
longfib(intn)
{if(n>2)return(fib(n-1)+fib(n-2));
elsereturn
(2);}
voidmain()
{cout<<fib(3);}
该程序的输出结果是
(分数:
1.00)
A.2
B.4 √
C.6
D.8
解析:
[解析]fib(3)=fib
(2)+fib
(1),而fib
(2)的返回值为2,fib
(1)的返回值也为2,故输出的fib(3)的值为4。
5.有两个关系R和S如下:
则由关系R得到关系S的操作是______。
(分数:
2.50)
A.选择 √
B.投影
C.自然连接
D..并
解析:
[解析]由关系R得到关系S是一个一元运算,而自然连接和并都是多元运算可以排除选项C和选项D。
关系S是由关系R的第3个元组组成,很显然这是对关系R进行选择运算的结果。
投影运算则是要从关系R中选择某些列。
可以简单地理解,选择运算是对行的操作,投影运算是对列的操作。
6.下列关于运算符重载的描述中,错误的是______。
(分数:
1.00)
A.可以通过运算符重载在C++中创建新的运算符 √
B.赋值运算符只能重载为成员函数
C.运算符函数重载为类的成员函数时,第一操作参数就是该类对象
D.重载类型转换运算符时不需要声明返回类型
解析:
[解析]运算符的重载是针对C++中原有运算符进行的,不能通过重载创造新的运算符。
7.数据库设计中反映用户对数据要求的模式是______。
(分数:
1.00)
A.内模式
B.概念模式
C.外模式 √
D.设计模式
解析:
[解析]数据库系统的三级模式是概念模式、外模式和内模式。
概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。
外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择C。
内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。
8.关于下列程序段的描述中,正确的是____。
#include<iostream.h>
intfun(int,int);
voidmain()
{
cout<<fun(1,2)<<endl;
}
intfun(intx,inty)
{
returnX+y;
}
(分数:
2.00)
A.该函数定义正确,但函数调用方式错误
B.该函数调用方式正确,但函数定义错误
C.该函数定义和调用方式都正确 √
D.该函数定义和调用方式都错误
解析:
[解析]函数定义的一般形式:
类型标识符函数名(形式参数列表){声明部分;语句}。
函数调用的一般格式:
函数名(实参列表)。
而“intfun(int,int)”为函数声明,可以不写形参名,只写形参的类型。
所以,可以看出函数fun的定义和调用都是正确的。
9.已知函数foo定义如下:
voidfoo(inta,int&b,int*c){
a++;b++;(*c)++;
}
且有如下程序段:
inta=1,b=2,c=3;
foo(a,b,&c);
cout<<a<<b<<c;
运行这个程序段的输出是
(分数:
2.50)
A.134 √
B.123
C.234
D.编译错误
解析:
10.有如下类模板定义:
template<typenameT>
classBigNumber{
longn;
public;
BigNumber(Ti):
n(i){)
BigNumberoperator+(BigNumberb){
returnBigNumber(n+b.n);
}
};
已知b1、b2是BigNumber的两个对象,则下列表达式中错误的是______。
(分数:
2.50)
A.b1+b2
B.b1+3
C.3+b1 √
D.3+3
解析:
[解析]该题考查了C++模板类和十运算符重载的知识,3+b1时,程序不能将b1转化为整型,所以编译会出错。
11.有如下程序:
#include<iostream>
usingnamespacestd;
classBase
{
public:
voidfun1(){cout<<"Baseha/n";}
virtualvoidfun2(){cout<<"Base/n";}
};
classDerived:
publicBase
{
public:
voidfun1(){cout<<"Derived/n";}
voidfun2(){cout<<"Derived/n";}
};
voidf(Base&b){b.fun1();b.fun2();}
intmain()
{
Derivedobj;
f(obj);
return0;
}
执行这个程序的输出结果是______。
(分数:
2.00)
A.BaseBase
B.BaseDerived √
C.DerivedBase
D.DerivedDerived
解析:
[解析]此题考查的是虚函数的概念。
在C++语言中,一个派生类的对象可以被它的任何一个基类的指针所指向,若基类和派生类中存在一模一样的成员函数。
那么通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。
本题中,在f()函数中,形参b是一个基类的引用,它引用的是主函数中定义的派生类对象obj,所以在调用fun1()时,运行的是基类的版本,而fun2()运行的是派生类的版本。
12.下列关于虚函数的描述中正确的是______。
(分数:
2.50)
A.如果在重定义函数时使用了保留字virtual,则该重定义函数仍然是虚函数
B.虚函数不得声明为静态成员函数 √
C.虚函数不得声明为另一个类的友元函数
D.派生类必须重新定义基类的虚函数
解析:
[解析]虚函数可以是另一个类的友元函数,但不能是静态成员函数,也不能是内联函数和构造函数。
在派生类中可以重新定义从基类继承下来的虚函数,也可能不需要。
虚函数在派生类中重定义后,重定义的函数仍然是一个虚函数,而且无论是否用virtual修饰。
13.关于在调用模板函数时模板实参的使用,下列表述中正确的是______。
(分数:
1.00)
A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D.对于常规参数所对应的模板实参,任何情况下都不能省略 √
解析:
[解析]在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:
从模板实参表(用“<>”括起来的参数表)或从模板函数实参表(用“()”括起来的参数表)。
如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。
如果模板实参表中的实参都被省略了,则空表“<>”也可以不要,因此选项D错误。
反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。
14.下列关于运算符重载的描述中,错误的是______。
(分数:
2.50)
A.可以通过运算符重载在C++中创建新的运算符 √
B.赋值运算符只能重载为成员函数
C.运算符函数重载为类的成员函数时,第一操作参数就是该类对象
D.重载类型转换运算符时不需要声明返回类型
解析:
[解析]运算符的重载是针对C++中原有运算符进行的,不能通过重载创造新的运算符。
15.类模板的使用实际上是将类模板实例化为一个具体的______。
(分数:
2.00)
A..类
B.对象 √
C.函数
D.模板类
解析:
16.有如下程序:
#include<iostream.h>
#include<iomanip.h>
usingnamespacestd;
classCSum
{
intx,y;
public:
CSum(intx0,inty0):
x(x0),y(y0){}
friendostream&operator<<(ostream&os,constCSum&xa)
{
os<<setw(5)<<xa.x+xa.y;
returnos;
}
};
intmain()
{
CSumy(3,5);
cout<<setfill("*")<<8;
cout<<y;
return0;
}
执行上面程序的输出是
(分数:
2.00)
A.88
B.****88
C.****8****8
D.8****8 √
解析:
[解析]本题考核知识点包括:
类与对象、运算重载、I/O的格式化输出。
语句"cout<<setfill("*")<<8;"输出8。
语句"cout<<y;"将调用运算符重载输出****8,因为前面语句中设置的填充符号现在还有效,而数据"8"的宽度不够5,所以剩下4个字符的宽度用填充符号"*"填充。
17.在类中重载赋值运算符时,应将其声明为类的______。
(分数:
2.00)
A.静态函数
B.友元函数
C.成员函数 √
D.构造函数
解析:
18.已知类X成功地重载了--、+、=、[]这几个运算符。
则其中肯定属于成员函数的运算符是______。
(分数:
2.50)
A.前置--和口
B.=和[] √
C.[]和后置--
D.+和=
解析:
[解析]赋值运算符一和运算符[]只能作为成员函数重载,而--,+则没有限止。
19.有如下语句序列:
charstr[10];cin>>str;
当从键盘输入“Ilovethisgame”时,str中的字符串是______。
(分数:
1.00)
A."Ilovethisgame"
B."Ilovethi"
C."Ilove"
D."I" √
解析:
[解析]cin是C++预定义的标准输入流对象,cin用来接收字符串时,遇“空格”、“TAB”、“回车”时都会结束。
所以本题答案为D。
20.C++中设置虚基类的目的是______。
(分数:
1.00)
A.简化程序
B.消除二义性 √
C.提高运行效率
D.实现数据的隐藏性
解析:
[解析]多重继承的派生类有可能从两个或多个基类中继承同名成员,对该成员不加限定的访问就会造成二义性,虚基类就是为了解决这个二义性问题,无论该类在派生层次中作为虚基类出现多少次,都只继承一个共享的基类子对象,从而消除二义性。
答案选B选项。
21.若MyClass是一个类名,且有如下语句序列
MyClassc1,*c2;
MyClass*c3=newMyClass;
MyClass&c4=c1;
上面的语句序列所定义的类对象的个数是______。
(分数:
2.00)
A.1
B.2
C.3 √
D.4
解析:
[解析]C1、*C2、C3是3个MyClass对象,C4是MyClass对象的引用,它是对象C1的别名。
22.关于在调用模板函数时模板实参的使用,下列表述中正确的是______。
(分数:
2.50)
A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D.对于常规参数所对应的模板实参,任何情况下都不能省略 √
解析:
23.有关构造函数的说法不正确的是____。
(分数:
1.00)
A.构造函数名字和类的名字一样
B.构造函数在说明类变量时自动执行
C.构造函数无任何函数类型
D.构造函数有且只有一个 √
解析:
24.下列关于类成员对象构造函数调用顺序的叙述中,正确的是______。
(分数:
2.00)
A.与它们在初始化列表中的顺序相同
B.与它们在类中声明的顺序相同 √
C.与析构函数的调用顺序相同
D.顺序不确定
解析:
[解析]类成员对象构造函数的调用是按照在类中定义的顺序进行的,而不是按照构造函数说明后的冒号顺序进行构造的。
25.C源程序中不能表示的数制是______。
(分数:
2.50)
A.二进制 √
B.八进制
C.十进制
D.十六进制
解析:
[解析]C语言源程序不能表示二进制,在C语言中,所有的数值型常量都带有符号,所以整型数量只区别整型和长整型两种形式,整型常量和长整型常量均可用十进制、八进制、十六进制3种形式表示,故选项A不正确。
26.有如下程序:
#include<iostream>
usingnamespacestd;
classPoint{
public:
staticintnumber;
public:
Pointo{number++;}
~Point(){number--;)
};
intPoint:
:
number--0;
voidmainO{
Point*ptr;
PointA,B;
{
Point*ptr_point=newPoint[3];
ptx=ptr_point;
}
PointC;
Gout+Point:
:
number+endl;
delete[]ptr;
}
运行时输出的结果是______。
(分数:
2.00)
A.3
B.4
C.6 √
D.7
解析:
[解析]此题是静态成员、对象的构造和对象的生存期等知识点的综合考查。
此题定义了一个静态成员变量number,初始值为0。
主函数中第2行定义了2个Point对象,此时number变为2;随后new运算符又定义了一个包含3个Point对象元素的数组,其通过delete结束后number的值变为5;然后又定义了一个Point对象C,number变为6;最后输出number的内容。
27.下列叙述中正确的是
(分数:
2.00)
A.实体集之间一对一的联系实际上就是一一对应的关系
B.关系模型只能处理实体集之间一对一的联系
C.关系模型属于格式化模型
D.以上三种说法都不对 √
解析:
[解析]实体集之间一对一的联系不一定是一一对应的关系。
例如,在一个教室中,实体集“学生”与实体集“座位”之间是一对一的联系。
因为实体集“学生”中的每一个学生最多与实体集“座位”中的一个座位有联系(学生坐在该座位上);并且,实体集“座位”中中的每一个座位也最多与实体集“学生”中的一个学生有联系(座位上坐着该学生)。
但该教室中的学生与座位之间不一定是一一对应的关系,因为有可能某些座位是空的,没有学生去坐。
因此,选项A)中的说法是错误的。
在关系模型中,由于使用表格数据来表示实体之间的联系,因此,可以直接描述多对多的实体联系。
因此,选项B)中的说法也是错误的。
关系模型是与格式化模型完全不同的数据模型,它与层次模型、网状模型相比有着本质的区别。
关系模型是用表格数据来表示实体本身及其相互之间的联系,它是建立在数学理论基础上的。
因此,选项C)中的说法也是错误的。
28.下列叙述中正确的是
(分数:
1.00)
A.接口复杂的模块,其耦合程度一定低
B.耦合程度弱的模块,其内聚程度一定低
C.耦合程度弱的模块,其内聚程度一定高 √
D.上述三种说法都不对
解析:
[解析]影响模块之间耦合的主要因素有两个:
模块之间的连接形式,模块接口的复杂性。
一般来说,接口复杂的模块,其耦合程度要比接口简单的的模块强,所以
选项A的说法错误;
耦合程度弱的模块,其内聚程度一定高,选项B错误;选项C正确。
29.已知在一个类体中包含如下函数原型:
VOLUMEOPERATOR-(VOLUME)const;,下列关于这个函数的叙述中,错误的是______。
(分数:
1.00)
A.这是运算符一的重载运算符函数
B.这个函数所重载的运算符是一个一元运算符 √
C.这是一个成员函数
D.这个函数不改变类的任何数据成员的值
解析:
[解析]本题考核运算符的重载。
题中语句为运算符一这是一个二元运算符,且是作为常成员函数来重载的,所以它不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。
30.最简单的交换排序方法是
(分数:
1.00)
A.快速排序
B.选择排序
C.堆排序
D.冒泡排序 √
解析:
[解析]让考生加深对各种排序方法特点的了解。
[解题要点]冒泡排序是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。
[错解分析]交换排序方法有冒泡排序和快速排序,显然选项B和选项C错误,冒泡排序比较简单,其算法也容易理解,但快速排序本身较为复杂,且采用了递归调用,其算法理解也稍难。
[考点链接]插入排序、选择排序、归并排序、基数排序等排序方法的特点。
31.有如下程序:
#include<iostream>
usingnamespacestd;
intmain(){
inti,s=0;
for(i=1;s<20;i+=2)s+=i*i;
cout<<i<<endl;
return0;
}
运行这个程序的输出结果是______。
(分数:
2.00)
A.3
B.5
C.7 √
D.9
解析:
[解析]在这段程序中for循环共执行3次,每次循环变量i的值增2,在执行第三次循环语句时,变量s的值等于25,大于20而退出循环,此时再执行循环变量i加2运算,所以最后变量i的值等于7。
32.关于抽象类下面说法正确的是
(分数:
1.00)
A.抽象类就是其中有函数定义但没有实现的类
B.抽象类是可以被实例化的
C.派生类不能成为抽象类
D.抽象类的子类必须实现父类中的纯虚函数 √
解析:
[解析]C++语言中的抽象类就是类中至少有一个纯虚函数的类,抽象类不能被实例化,继承抽象类的类必须实现抽象类中的纯虚函数。
33.单个用户使用的数据视图的描述称为
(分数:
1.00)
A.外模式 √
B.概念模式
C.内模式
D.存储模式
解析:
[解析]选项A)正确,外模式是用户的数据视图,也就是用户所见到的数据模式;选项B)不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项C)不正确,物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;选项D)不正确,存储模式即为内模式。
34.有如下程序段:
inti=5;
while(inti=0){cout<<"*";i--;}
运行时输出“*”的个数是______。
(分数:
3.00)
A.0 √
B.1
C.5
D.无穷
解析:
[解析]因为while循环中,因为i的值等于0,所以while循环体一次也不执行。
因而运行时输出“*”的个数是0。
35.数据库设计的根本目标是要解决______。
(分数:
2.50)
A.数据共享问题 √
B.数据安全问题
C.大量数据存储问题
D.简化数据维护
解析:
[解析]从数据库的概念中可以看到,所谓数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。
因此进行数据库设计的根本目标还是为了解决数据共享问题。
36.已知类Time的定义如下:
classTime{//时间类
private:
inthour,minute,second;//时、分、秒
public:
Time(inth,intm,ints):
hour(h),minute(m),second(s){}
______{
switch(index){
case0:
returnhour;
case1:
returnminute;
default:
returnsecond;
}
}
};
其中横线处应为下标访问运算符[]的重载函数的函数头,横线处应填入的代码是______。
(分数:
2.50)
A.int&operator[](T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 C+ 分类 模拟 275