全国计算机等级《二级C++ 》押题卷.docx
《全国计算机等级《二级C++ 》押题卷.docx》由会员分享,可在线阅读,更多相关《全国计算机等级《二级C++ 》押题卷.docx(29页珍藏版)》请在冰豆网上搜索。
全国计算机等级《二级C++》押题卷
全国计算机等级《二级C++》预测试卷
(一)
一、单项选择题(共40题,合计40分)
1有下列程序:
#include
intb=2:
intfun(int*k)
{b=*k+b;return(b);}
voidmain()
{inta[1O]={1,2,3,4,5,6,7,8},i;
for(i=2;i<4;i++){b=fun(&a[i])+b;printf
("%d",b);}
printf("\n");
}
程序运行后的输出结果是( )。
A. 1012
B. 810
C. 1028
D. 1016
[正确答案]C
试题解析:
在程序中子函数fun(int*k)的作用是给静态全局变量加上形参*k的值。
在主函数中进行第一次for循环执行时,fun(&a[2])的返回值为5,所以5+5=10,因而输出结果为10,第二次for循环执行时。
fun(&a[3])的返回值为14,所以14+14=28。
2下列关于栈叙述正确的是( )。
A.栈顶元素最先能被删除
B.栈顶元素最后才能被删除
C.栈底元素永远不能被删除
D.以上三种说法都不对
[正确答案]A
试题解析:
栈是限定在一端进行插入删除的先入后出的线性表数据结构,栈顶元素最后被插入到栈中,但是最先被删除;而栈底元素最先被插入,最后被删除。
3若变量已正确定义,有下列程序段
inta=3,b=5,c=7;
if(a>b)a=b;c=a;
if(C!
=a)C=b;
printf(”%d,%d,%d\n”,a,b,c);
其输出的结果是( )。
A. 程序段有语法错
B. 3,5,3
C. 3,5,5
D. 3,5,7
[正确答案]B
试题解析:
如果if判断条件成立时就执行其后的相关语句,否则不执行,第一个if条件a>b不成立,故不执行“a=b”,接着执行“c=a”,把a的值赋给c后,此时第二个if条件不成立,故不执行其后语句,最终点c的值为3。
4若已定义
inta[]={1,2,3,4,5,6,7,8,9,10},p=a,i=5;
则对数组元素不正确的引用是( )。
A. a[p-a]
B. *(&a[i])
C. p[i]
D. *(*(a+i))
[正确答案]D
试题解析:
数组和指针的关系非常密切,因为数组名称单独使用是表示数组的首地址。
故可用的表示可能是a[i],p[i],*(P+i),同样&(a[i])表示地址,因此*(&a[i])等同于a[i]。
本题答案为D。
5数据的存储结构是指( )。
A. 数据所占的存储空间
B. 数据的逻辑结构在计算机中的存放形式
C. 数据在计算机中的顺序存储方式
D. 存储在计算机外存中的数据
[正确答案]B
试题解析:
数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式。
数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。
6设有表示学生选课的3张表,学生S(学号、姓名、性别、年龄、身份证号)、课程C(课号、课名)、选课SC(学号、课号、成绩),则表SC的关键字(键或码)为( )。
A. 课号、成绩
B. 学号、成绩
C. 学号、课号
D. 学号、姓名、成绩
[正确答案]C
试题解析:
关键字是指属性或属性的组合,其功能是唯一地标识一个元组或数据,而SC中学号和课号的组合可以对元组进行唯一的标识。
7结构化程序所要求的基本结构不包括( )。
A. 顺序结构
B. GOT0跳转
C. 选择(分支)结构
D. 重复(循环)结构
[正确答案]B
试题解析:
结构化程序设计的3种结构是,顺序、分支和循环,不包括goto跳转,它只是分支结构的一种,也是一个关键字
8以下选项中合法的实型常数是( )。
A.5E2.0
B.E—3
C.2EO
D.1.3E
[正确答案]C
试题解析:
本题考查实型常数的指数表示法,可以肯定的是指数不能为小数即必须为整数。
由于符号E前面必须有数字。
D在指数符号后面没有数字,是错误的。
9下列叙述中,不属于软件需求规格说明书的作用的是( )。
A. 便于用户、开发人员进行理解和交流
B. 反映出用户问题的结构,可以作为软件开发工作的基础和依据
C. 作为确认测试和验收的依据
D. 便于开发人员进行需求分析
[正确答案]D
试题解析:
使用软件需求规格说明书的目的是便于用户、开发人员进行理解和交流,它能够反映出用户问题的结构,可以作为软件开发工作的基础和依据,而且可以作为确认测试和验收的依据。
它是需求分析的结果,而不是为了便于开发人员进行需求分析。
因此答案是选项D。
10若有定义语句“intm[]={5,4,3,2,1),i=4;”则下列对m数组元素的引用中错误的是( )。
A.m[--i]
B.m[2*2]
C.m[m[o]]
D.m[m[i]]
[正确答案]D
试题解析:
数组的下标是从零开始的。
一维数组的一般定义方式为数型说明符数组名[常置表达式]
其中“[]”中的内容可以是整型数量,也可以是整型表达式。
选项C中,m[0]=5,m[m[o]]=m[5],数组下标越界。
11结构化程序所要求的基本结构不包括( )。
A.顺序结构
B.GOT0跳转
C.选择(分支)结构
D.重复(循环)结构
[正确答案]B
试题解析:
结构化程序设计的3种结构是,顺序、分支和循环,不包括goto跳转,它只是分支结构的一种,也是一个关键字。
12下列数据模型中,具有坚实理论基础的是( )。
A.层次模型
B.网状模型
C.关系模型
D.以上3个都是
[正确答案]C
试题解析:
关系模型较格式化模型(网状模型和层次模型)有以下几个优点:
数据结构比较简单、具有很高的数据独立性、可以直接处理多对多的联系,以及有坚实的理论基础。
13有如下程序:
#include
usingnamespacestd;
classVAC{
public;
intf()const(return3;}
intf(){return5;}
};
Intmain(){
VACv1:
constVACv2;
cout<return0;
}
运行时的输出结果是()。
A. 53
B. 35
C. 55
D. 33
[正确答案]A
试题解析:
本题考查常成员函数的应用。
VAC类中说明了两个函数,一个是常成员函数,一个是普通函数;在主函数中说明了两个对象,通过普通对象v1调用的是普通函数,输出5;通过常对象v2调用的是常成员函数,输出3。
14下列有关模板的叙述中,正确的是( )。
A. 函数模板不能含有常规形参
B. 函数模板的一个实例就是一个函数定义
C. 类模板的成员函数不能是模板函数
D. 用类模板定义对象时,绝对不能省略模板实参
[正确答案]B
试题解析:
本题考查的是模极的概念。
函数模板可以含有常规形参;函数模板的一个实例就是一个函数定义;类模板中的成员函数都是模板函数;在用类模板定义对象时,由于没有像函数实参表这样的额外信患渠道,因此无法按函数模板的方式省略模板形参,但是可以为类模板的参数设置默认值。
15在函数中,可以用aut0、extern、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是( )。
A. auto
B. extern
C. Register
D. static
[正确答案]A
试题解析:
变量在使用之前其数据类型必须加以说明,而存储类型则可默认说明或显式说明。
显式说明指直接在变量说明前加上存储类型标志,如auto,register,static,extern等。
关键字auto通常省略。
16下列关于函数模板的描述中,正确的是( )。
A. 函数模板是一个实例函数
B. 使用函数模板定义的函数没有返回类型
C. 函数模板的类型参数与函数的参数相同
D. 通过使用不同的类型参数,可以从函数模板得到不同的实例函数
[正确答案]D
试题解析:
函数模板只是声明,一个函数的描述即模板,不是一个可以直接执行的函数,只有根据实际情况用实参的数据类型参数标识符之后,才能产生真正的函数。
17下列关于文件流的描述中,正确的是( )。
A. 文件流只能完成针对磁盘文件的输入、输出
B. 建立一个文件流对象时,必须同时打开一个文件
C. 若输入流要打开的文件不存在,将建立一个新文件
D. 若输出流要打开的文件不存在,将建立一个新文件
[正确答案]C
试题解析:
输入流要打开的文件不存在,则会自动建立该文件,而输出流要打开的文件不存在,则会报错,而不会新建一个文件。
18下列说法正确的是( )。
A. 内联函数在运行时将该函数的目标代码插入每个调用该函数的地方
B. 内联函数在编译时将该函数的目标代码插入每个调用该函数的地方
C. 类的内联函数必须在类体内定义
D. 类的内联函数必须在类体外通过加关键字inline定义
[正确答案]B
试题解析:
本题考查的是内联函数的定义,引入内联函数是为了解决程序中函数调用的效率问题,是以目标代码的增加为代价换取时间的节省;一般函数在运行时被调用,而调用的内联函数在编译时就被替代了,如果不加in-line关键字,则编译器会将在类说明部分定义的任何函数都被认定为内联函数。
19有下列程序:
#include
voidmain( )
{FILE*pf;
char*s1="China",*s2="Beijing";
pf=fopen("abc.dat","wb+");
fwrite(s2,7,1,pf);
rewind(pf);/*文件位置指针回到文件开头*/
fwrite(s1,5,1,pf);
fclose(pf);
}
以上程序执行后abc.dat文件的内容是( )。
A. China
B. Chinang
C. ChinaBeijing
D. BeijingChina
[正确答案]B
试题解析:
本题考查fwrite的调用形式。
其格式为“fwrite(buffer,size,count,fp);”。
fwritie函数的功能是对fp所指向的文件存入count次,每次存入一个大小为size的数据块。
将存入的数据块存到buffer指向的内存区,如果buffer内存区有数据则将其覆盖。
本题中第一次调用fwrite函数,向文件中写入s2的值“Beijing”,第二次调用fwrite函数,向文件中写入S1的值“China”,并将之前“Beijing”的前几个字符覆盖,得到Chi-nang。
20下列叙述中正确的是( )。
A. 在面向对象的程序设计中,各个对象之间具有密切的关系
B. 在面向对象的程序设计中,各个对象都是公用的
C. 在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小
D. 上述三种说法都不对
[正确答案]C
试题解析:
面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系
21设有定义语句int(*f)(int);,则下列叙述正确的是( )。
A. f是基类型为int的指针变量
B. f是指向函数的指针变量,该函数具有一个int类型的形态
C. f是指向int类型一维数组的指针变量
D. f是函数名,该函数的返回值是其类型为int类型的地址
[正确答案]B
试题解析:
定义语句int(*f)(int)中f是指向函数的指针变量,该函数中也只有一个int型的形参。
22为类Matrix重载下列运算符号时,只能作为Matrix类成员函数重载的运算符是( )。
A. +
B. =
C. <<
D. ++
[正确答案]B
试题解析:
赋值运算符只能作为重载函数的成员函数,其他运算符都可以作为友元函数重载。
23为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。
A.内联函数
B.重载函数
C.递归函数
D.函数模板
[正确答案]A
试题解析:
内联函数一般是程序代码少于10行的函数,在编译过程中,直接在调用点处被展开,不会因函数调用带来巨大的系统开销,因此能提高实际运行速度。
24下列叙述中错误的是( )。
A. gets函数用于从终端读入字符串
B. getchar函数用于从磁盘文件读入字符
C. fputs函数用于把字符串输出到文件
D. fwrite函数用于以二进制形式输出数据到文件
[正确答案]B
试题解析:
本题考查的是c语言中输入、输出函数的使用,gets和getchar函数用于从标准输入设备键盘读入字符串和字符;fputs用于把字符串输出到文件;fwrite用于以二进制形式输出数据到文件。
25下列程序的执行结果是( )。
#include
classSample
{
intx,y;
public:
Sample(){x=y=0;}
Sample(inta,intb){x=a;y=b;}
~Sample()
{
if(x==y)
cout<<"x=y"<else
cout<<"x!
=y"<}
voiddisp()
{
cout<<"x="<};
voidmain()
{
Samples1(2,3);
s1.disp();
}
A. x=2,y=2
B. x=3,y=3
C. x=2,y=3
D. x=3,y=2
[正确答案]C
试题解析:
本题考查类的构造函数和析构函数。
首先,Samplesl(2,3);会调用含有两个参数的构造函数Sam-ple(inta,intb){x=a;y=b;),disp()函数输出成员变量x和y的值x=2,y=3;然后结束时调用析构函数。
因为x和y值不等,故输出X!
=Y。
26有如下程序:
#included
usingnamespqcestd;
classTestClass
{
private;
charC;
public;
TestClass(charn):
c(n){}
~TestClass()
{
cout<}
};
classTestClassl:
publicTestClass
{
private:
charC;
public:
TestClassl(charn):
TestClass(n+1),c(n){}~TestClassl()
{
cout<}
};
intmain()
{
TestClasslobj('X');
return0;
}
执行上面的程序将输出( )。
A. xy
B. yx
C. X
D. y
[正确答案]A
试题解析:
本题中FestClass为基类,TestClass1为派生类。
在主函数中定义TestClassl对象obj('x'),“TestClassl(charn):
TestClass(n+1),c(n){}”,所以输出x,然后调用基类构造函数,'x'+1='y',所以输出y,即答案为xy。
27已知类MyClass的定义如下:
ClassMyClass{
public:
MyClass(intd){data=d;}
~MyClass(){}
private:
intdata;
};
下列对MyClass类对象数组的定义和初始化语句中,正确的是( )。
A. MyClassarray[2];
B. MyClassarray[2]={MyClass(5)};
C. MyClassarray[2]={MyClass(5),Myclass(6)};
D. MyClass*array=newMyClass[2];
[正确答案]C
试题解析:
A只是声明,没有初始化;B的初始化错误,另一个数组对象没有指明地址;D同样做的不是初始化的事情。
28下列关于二叉树的叙述中,正确的是( )。
A. 叶子结点总是比度为2的结点少一个
B. 叶子结点总是比度为2的结点多一个
C. 叶子结点数是度为2的结点数的两倍
D. 度为2的结点数是度为1的结点数的两倍
[正确答案]B
试题解析:
叶子结点个数一度为2的结点个数+1。
29下列是关于派生类声明的开始部分,其中正确的是( )。
A. classvirtualB:
publicA
B. virtualclassB:
publicA
C. classB:
publicAvirtual
D. classB:
virtualpublicA
[正确答案]D
试题解析:
声明派生类的一般形成为class派生类名:
[继承方式]基类名。
其中继承方式包括public、private和protected。
而virtual为C++中的关键字,所以选项C错。
虚函数的使用方法是在基类用virtual声明成员函数为虚函数
30针对数组定义intdata[10];,下列表述中错误的是( )。
A. 用*data可访问到数组的首元素
B. 用data[9]可访问到数组的末元素
C. 用data[10]访问数组元素会超出数组边界
D. data共有10个元素,其首元素是data[1]
[正确答案]D
试题解析:
数组元素的下标是从0到<数组长度>-1,所以数组data的首元素是data[0],尾元素是data[9]。
其他选项的描述都是正确的。
31下列关于纯虚函数与抽象类的描述中,错误的是( )。
A. 纯虚函数是一种特殊的虚函数,它没有具体的实现
B. 抽象类是指具有纯虚函数的类
C. 一个基类声明了纯虚函数,该基类的派生类一定不是抽象类
D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
[正确答案]C
试题解析:
纯虚函数是在声明虚函数时被“初始化”为0的虚函数。
不定义对象而只作为一种基本类型作为继承的类,称为抽象类。
凡是包含纯虚函数的类都是抽象类。
抽象类的作用是作为一个类族的共同基类。
32若要对Date类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。
A. Data+{Data};
B. Dataoperator+{Data};
C. Data+operator{Data};
D. operator+{Data.Data};
[正确答案]B
试题解析:
重载运算符的函数一般格式如为:
函数类型0perator运算符名称(形参列表),因此选8。
33下列关于构造函数和析构函数的描述,错误的是( )。
A. 析构函数中调用虚函数采用静态联编
B. 对虚析构函数的调用可以采用动态联编
C. 当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数
D. 构造函数可以声明为虚函数
[正确答案]D
试题解析:
构造函数的主要作用是对数据成员初始化。
构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联
34若是对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。
A.operatorlong( )const;
B.operatorlong(BigNumber);
C.longoperatorlong( )const;
D.longoperatorlong(BigNumber);
[正确答案]A
试题解析:
C++不仅可以对运算符进行重载,还可以重载类型转换符,函数声明的形式为:
0perator类型符()const。
35下列关于构造函数的描述中,错误的是( )。
A.构造函数名与类名相同
B.构造函数可以有返回值
C.构造函数可以重载
D.每个类都有构造函数
[正确答案]B
试题解析:
构造函数没有返回值,虽然叫函数,但是它没有任何返回值,包括void型都不是,官方叫法应该叫“构造器”。
36有如下程序:
#included
usingnamespacestd;
classTestClass{
protected:
TestClass( ){cout<<'X';}
TestClass(charc){cout<classTestClassl:
publicTestClass{
public:
TestClassl(charc){cout<intmain( ){
TestClassld1('y');
return0;}
执行这个程序,屏幕上将显示输出( )。
A. y
B. yx
C. xy
D. yy
[正确答案]A
试题解析:
本题中类TestClass为基类,TestClassl为TestClass的派生类。
由main主函数入手,定义TestClassl类型的对象dl,参数值为y。
TestClassl类继承TestClass,所以主函数中“TestClassldl('y');”语句首先调用“TestClassl(charc){colll<37下面程序的运行结果是( )。
#include
classbase{
protected:
inta;
public:
base(){cout<<"0";}
};
classbasel:
virtualbase{
public:
basel(){cout<<"1";}
};
classbase2:
virtualbase{
public:
base2(){cout<<"2";}
};
classderived:
publicbasel,publicbase2{
public:
derived(){cout<<"3";}
};
voidmain()
{
derivedobj;
eout<}
A. 0123
B. 3120
C. O312
D. 3012
[正确答案]A
试题解析:
本题考查的是含有虚基类的继承中构造函数的调用顺序,应该先调用基类的构造函数,接着是按照派生类继承列表的顺序依次调用虚基类的构造函数,最后调用派生类自己的构造函数。
38下列叙述中正确的是( )。
A. C程序的基本组成单位是语句
B. C程序中的每一行只能写一条语句
C. 简单C语句必须以分号结束
D. C语句必须在一行内写完
[正确答案]C
试题解析: