二级C++模拟502.docx
《二级C++模拟502.docx》由会员分享,可在线阅读,更多相关《二级C++模拟502.docx(30页珍藏版)》请在冰豆网上搜索。
二级C++模拟502
二级C++模拟502
一、选择题
1、程序流程图中带有箭头的线段表示的是______。
A.图元关系 B.数据流 C.控制流 D.调用关系
2、结构化程序设计的基本原则不包括______。
A.多态性 B.自顶向下 C.模块化 D.逐步求精
3、软件设计中模块划分应遵循的准则是______。
A.低内聚低耦合 B.高内聚低耦合 C.低内聚高耦合 D.高内聚高耦合
4、在软件开发中,需求分析阶段产生的主要文档是______。
A.可行性分析报告 B.软件需求规格说明书
C.概要设计说明书 D.集成测试计划
5、算法的有穷性是指______。
A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的
C.算法程序的长度是有限的 D.算法只能被有限的用户使用
6、对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是______。
A.快速排序 B.冒泡排序 C.直接插入排序 D.堆排序
7、下列关于栈的叙述正确的是______。
A.栈按“先进先出”组织数据 B.栈按“先进后出”组织数据
C.只能在栈底插入数据 D.不能删除数据
8、在数据库设计中,将E-R图转换成关系数据模型的过程属于______。
A.需求分析阶段 B.概念设计阶段 C.逻辑设计阶段 D.物理设计阶段
9、有三个关系R、S和T如下:
由关系R和S通过运算得到关系T,则所使用的运算为______。
A.并 B.自然连接 C.笛卡尔积 D.交
10、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为______。
A.课号,成绩 B.学号,成绩 C.学号,课号 D.学号,姓名,成绩
11、下列语句中,错误的是______。
A.constintbuffer=256; B.constinttemp;
C.constdouble*point; D.constdouble*rt=newdouble(5.5);
12、有如下程序:
intx=3;
do{
x-=2;
cout<<x;
}while(!
(--x));
执行这个程序的输出结果是______。
A.1 B.30 C.1-2 D.死循环
13、有如下程序:
#include<iostream>
usingnamespacestd;
intmain()
{
int*p;
*p=9;
cout<<"Thevalueatp:
"<< *p;
return0;
}
编译运行程序将出现的情况是______。
A.编译时出现语法错误,不能生成可执行文件
B.运行时一定输出:
Thevalueatp:
9
C.运行时一定输出:
Thevalueafp:
*9
D.运行时有可能出错
14、if语句的语法格式可描述为:
格式1:
if(<条件>)<语句>
或
格式2:
if(<条件>)<语句1>
else<语句2>
关于上面的语法格式,下列表述中错误的是______。
A.<条件>部分可以是一个if语句,例如if(if(a==0)…)…
B.<语句>部分可以是一个if语句,例如if(…)if(…)…
C.如果在<条件>前加上逻辑非运算符!
并交换<语句1>和<语句2>的位置,语句功能不变
D.<语句>部分可以是一个循环语句,例如if(…)while(…)…
15、下列符号中,正确的C++标识符是______。
A.enum B.2b C.foo-9 D._32
16、下列关于C++函数的说明中,正确的是______。
A.内联函数就是定义在另一个函数体内部的函数
B.函数体的最后一条语句必须是return语句
C.标准C++要求在调用一个函数之前,必须先声明其原型
D.编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式
17、运算符重载是对已有的运算符赋予多重含义,因此______。
A.可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义
B.可以改变一个已有运算符的优先级和操作数个数
C.只能重载C++中已经有的运算符,不能定义新运算符
D.C++中已经有的所有运算符都可以重载
18、下列有关内联函数的叙述中,正确的是______。
A.内联函数在调用时发生控制转移
B.内联函数必须通过关键字inline来定义
C.内联函数是通过编译器来实现的
D.内联函数函数体的最后一条语句必须是return语句
19、下列运算符不能重载为友元函数的是______。
A.=()( )-> B.+-++-- C.><>=<= D.+=-=*=/=
20、有如下程序:
#include<iostream>
usingnamespacestd;
intmain()
{
voidfunction(doubleval);
doubleval;
function(val);
cout<<val:
return0;
}
voidfunction(doubleval)
{
val=3;
}
编译运行这个程序将出现的情况是______。
A.编译出错,无法运行 B.输出:
3
C.输出:
3.0 D.输出一个不确定的数
21、下面是重载为非成员函数的运算符的函数原型,其中错误的是______。
A.Fractionoperator+(Fraction,Fraction);
B.Fractionoperator-(Fraction);
C.Fraction&operator=(Fraction&,Fraction);
D.Fraction&operator+=(Fraction&,Fraction);
22、有如下类定义:
classMyClass
{
public:
______
private:
intdata;
};
若要为MyClass类重载流输入运算符“>>”,使得程序中可以“cin>>obj;”的形式改变MyClass类的对象obj中数据成员data的值,则横线处的声明语句应为______。
A.friendistream&operator>>(istream&is,MyClass&a);
B.friendistream&operator>>(istream&is,MyClassa);
C.istream&operator>>(istream&is,MyClass&a);
D.istream&operator>>(istream&is,MyClassa);
23、由于常对象不能被更新,因此______。
A.通过常对象只能调用它的常成员函数
B.通过常对象只能调用静态成员函数
C.常对象的成员都是常成员
D.通过常对象可以调用任何不改变对象值的成员函数
24、有如下类定义:
classAA
{
inta;
public:
intgetRef()const{return&a;}//①
intgetValue()const{returna;}//②
voidset(intn)const{a=n;}//③
friendvoidshow(AAaa)const{cout<<a;}//④
};
其中四个函数的定义中正确的是______。
A.① B.② C.③ D.④
25、下列关于this指针的描述中,正确的是______。
A.类的成员函数都有this指针 B.类的友元函数都有this指针
C.任何与类相关的函数都有this指针 D.类的非静态成员函数都有this指针
26、下列关于虚函数的说明中,正确的是______。
A.从虚基类继承的函数都是虚函数 B.虚函数不得是静态成员函数
C.只能通过指针或引用调用虚函数 D.抽象类中的成员函数都是虚函数
27、下列关于基类和派生类关系的叙述中,正确的是______。
A.每个类最多只能有一个直接基类
B.派生类中的成员可以访问基类中的任何成员
C.基类的构造函数必须在派生类的构造函数体中调用
D.派生类除了继承基类的成员,还可以定义新的成员
28、有如下类定义:
classB
{
public:
voidfun1(){}
private:
voidfun2(){}
protected:
voidfun3(){}
};
classD:
publicB
{
protected:
voidfun4(){}
};
若obj是类D的对象,则下列语句中不违反访问控制权限的是______。
A.obj.fun1(); B.obj.fun2(); C.obj.fun3(); D.obj.fun4();
29、有如下类定义:
classFoo
{
public:
Foo(intv):
value(v){}//①
~Foo(){}//②
private:
Foo(){}//③
intvalue=0;//④
};
其中存在语法错误的行是______。
A.① B.② C.③ D.④
30、有如下类定义:
classPoint
{
intxx,yy;
public:
Point():
xx(0),yy(0){}
Point(intx,inty=0):
xx(x),yy(y){}
};
若执行语句
Pointa
(2),b[3],*c14];
则Point类的构造函数被调用的次数是______。
A.2次 B.3次 C.4次 D.5次
31、有如下类定义:
classTest
{
public:
Test(){a=0;c=0;}//①
intf(inta)const{this->a=a;}//②
staticintg(){returna;}//③
voidh(intb){Test:
:
b=b;};//④
private:
inta;
staticintb;
constintc;
};
intTest:
:
b=0;
在标注号码的行中,能被正确编译的是______。
A.① B.② C.③ D.④
32、有如下类声明:
classSAMPLE
{
intn;
public:
SAMPLE(inti=0):
n(i){}
voidsetValue(intn0);
};
下列关于getValue成员函数的定义中,正确的是______。
A.SAMPLE:
:
setValue(intn0){n=n0;} B.voidSAMPLE:
:
setValue(intn0){n=n0;}
C.voidsetValue(intn0){n=n0;} D.setValue(intn0){n=n0;}
33、有如下程序:
#include<iostream>
usingnamespacestd;
classA
{
public:
A(){cout<<"A";}
~A(){cout<<"~A";}
};
classB:
publicA
{
A*p;
public:
B(){cout<<"B";p=newA();}
~B(){cout<<"~B";deletep;}
};
intmain()
{
Bobj;
return0;
}
执行这个程序的输出结果是______。
A.BAA~A~B~A B.ABA~B~A~A
C.BAA~B~A~A D.ABA~A~B~A
34、有如下程序:
#include<iostream>
usingnamespacestd;
classBase
{
private:
voidfun1()const{cout<<"fun1";}
protected:
voidfun2()const{cout<<"fun2";}
public:
voidfun3()const{cout<<"fun3";}
};
classDerived:
protectedBase
{
public:
voidfun4()const{tout<<"fun4";j
};
intmain()
{
Derivedobj;
obj.fun1();//①
obj.fun2();//②
obj.fun3();//③
obj.fun4();//④
return0;
}
其中有语法错误的语句是______。
A.①②③④ B.①②③ C.②③④ D.①④
35、有如下程序:
#include<iostream>
usingnamespacestd;
classBase1
{
public:
Base1(intd){tout<<d;}
~Base1(){}
};
classBase2
{
public:
Base2(intd){cout<<d;}
~Base2(){}
};
classDerived:
publicBase1,Base2
{
public:
Derived(inta,intb,intc,intd):
Base1(b),Base2(a),b1(d),b2(c){}
private:
intb1:
intb2:
};
intmain()
{
Derivedd(1,2,3,4);
return0;
}
执行这个程序的输出结果是______。
A.1234 B.2134 C.12 D.21
36、有如下程序:
#include<iostream>
usingnamespaeestd;
classBase
{
public:
voidfun1(){cout<<"Base\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;
}
执行这个程序的输出结果是______。
A.Base
Base
B.Base
Derived
C.Derived
Base
D.Derived
Derived
37、模板对类型的参数化提供了很好的支持,因此______。
A.类模板的主要作用是生成抽象类
B.类模板实例化时,编译器将根据给出的模板实参生成一个类
C.在类模板中的数据成员都具有同样类型
D.类模板中的成员函数都没有返回值
38、有如下函数模板:
template<typenameT,typenameU>
Tcast(Uu){returnu;}
其功能是将U类型数据转换为T类型数据。
已知i为int型变量,下列对模板函数cast的调用中正确的是______。
A.cast(i); B.east<>(i);
C.cast<char*,int>(i); D.cast<double,int>(i);
39、要建立文件流并打开当前目录下的文件file.dat用于输入,下列语句中错误的是______。
A.ifstreamfin=ifstream.open("file.dat");
B.ifstream*fin=newifstream("file.dat");
C.ifstreamfin;fin.open("file.dat");
D.ifstream*fin=newifstream();fin->open("file.dat");
40、当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为______。
A.los_base:
:
in B.los_base:
:
in|ios_base:
:
out
C.los_base:
:
out D.los_base:
:
in&los_base:
:
out
二、基本操作题
(共18分)
41、考生文件夹
请打开考生文件夹下的解决方案文件proj1,该工程含有一个源程序文件proj1.cpp。
其中位于每个注释“//ERROR ****found****”之后的一行语句存在错误。
请改正这些错误,使程序的输出结果为:
Thevalueis10
注意:
只修改注释“//ERROR ****found****”的下一行语句,不要改动程序中的其他内容。
//proj1.cpp
#include<iostream>
usingnamespacestd;
classMyClass{
intvalue;
public:
//ERROR********found********
voidMyClass(intval):
value(val){}
intGetValue()const{returnvalue;}
voidSetValue(intval);
};
//ERROR ********found********
inlinevoidSetValue(intval){value=val;}
intmain()
{
MyClassobj(0);
obj.SetValue(10);
//ERROR********found********下列语句功能是输出obj的成员value的值
cout<<"Thevalueis"<<obj.value<<endl;
return0;
}
三、简单应用题
(共24分)
42、考生文件夹
请打开考生文件夹下的解决方案文件proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了Stack类和ArrayStack类。
Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。
Stack为抽象类,它只定义了栈的用户接口,如下所示:
公有成员函数 功能
push 入栈:
在栈顶位置添加一个元素
pop 退栈:
取出并返回栈顶元素
ArrayStack是Stack的派生类,它实现了Stack定义的接口。
ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。
数据成员maxSize表示的是栈的最大容量,top用于记录栈顶的位置。
成员函数push和pop分别实现具体的入栈和退栈操作。
请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。
此程序的正确输出结果应为:
a,b,c
c,b,a
注意:
只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
//proj2.cpp
#include<iostream>
usingnamespacestd;
classStack{
public:
virtualvoidpush(charc)=0;
virtualcharpop()=0;
};
classArrayStack:
publicStack{
char*p;
intmaxSize;
inttop;
public: