点击查看:2018年3月计算机二级C++过关练习题及答案汇总
1[判断题]C++语言比C语言对数据类型要求更加严格了。
参考答案:对
2[简答题] 为单链表类模板增加一个复制构造函数和赋值运算符(=)。在上题基础上,List类增加一个复制构造函数和赋值运算符(=)。
参考解析:
templateList::List(List& l){
head=new Node(-9999);//现建立头结点
Node* tempP=l.head->link,*tempC;
while(tempP!=NULL){
tempC=CreatNode(tempP->info);
InsertAfter(tempC);
tempP=tempP->link;
}
}
templateList& List::operator=(List& l){
MakeEmpty();//先释放原来链表的数据结点
Node* tempP=l.head->link,*tempC;
while(tempP!=NULL){
tempC=CreatNode(tempP->info);
InsertAfter(tempC);
tempP=tempP->link;
}
return *this;
}
int main(){
Node * P1;
List list1,list2;
int a[10]={20,12,0,-5,9,-18,6,11,5,3},i,j;
for(i=0;i<10;i++){
P1=list1.CreatNode(a[i]);
list1.InsertOrder(P1);
}
list1.PrintList();
cout<<"请输入一个要求删除的整数"<
cin>>j;
P1=list1.Find(j);
if(P1!=NULL){
P1=list1.DeleteNode(P1);
delete P1;
list1.PrintList();
}
else cout<<"未找到"<
cout<<"请输入一个要求插入的整数"<
cin>>j;
P1=list1.CreatNode(j);
list1.InsertOrder(P1);
list1.PrintList();
list2=list1;
list2.PrintList();
List list3=list1;
list3.PrintList();
cout<<"请输入一个要求删除的整数"<
cin>>j;
P1=list1.Find(j);
if(P1!=NULL){
P1=list1.DeleteNode(P1);
delete P1;
list1.PrintList();
}
else cout<<"未找到"<
list2=list3=list1;
list2.PrintList();
list3.PrintList();
list1.MakeEmpty();//清空list1
list2.MakeEmpty();//清空list1
list3.MakeEmpty();//清空list1
return 0;
}
3[单选题]一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是:
A.一对一B.一对多C.多对多D.多对一
参考答案:C
4[单选题] 下列叙述中正确的是( )。
A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化
B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化
C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化
D.以上说法都不正确
参考答案:C
参考解析:栈是先进后出的数据结构,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来操作,所以选择c。
5[单选题]下列叙述中正确的是 ( )。
A.线性表是线性结构
B.栈与队列是非线性结构
C.线性链表是非线性结构
D.二叉树是线性结构
参考答案:A
参考解析:线性表是线性结构;线性链表是线性表的链式存储结构,因此也是线性结构;栈与队列 是特殊的线性表,因此也是线性结构;二叉树是非线性结构。
6[单选题]
A.0B.1C.2D.3
参考答案:B
参考解析:此题实际考查的是变量作用域的屏蔽效应。在C++中,当标识符的作用域发生重叠时,在一个函数中声明的标识符可以屏蔽函数外声明的标识符或全局标识符。声明类A的全局对象时,构造函数首先调用int函数,但由于静态成员变量a被构造函数内部的形参a所屏蔽所以a++改变的是形参a的值,对静态成员变量a没有影响。
7[单选题]在下面的4个关键字中用来说明虚函数的是( )。
A.virtualB.publicC.protectedD.private
参考答案:A
参考解析:C++中用virtual关键字声明虚函数。而public、protected、private为成员访问限定符。
8[单选题]
参考答案:B
9[单选题]有如下程序:
#include
usingnamespacestd;
classBase{
public:
Base(intx=O){cout<
};
classDerived:publicBase{
public:
Derived(intx=O){cout<
private:
Baseval;
};
intmain(){
Derivedd(1);
return0;
}
程序执行后的输出结果是( )。
A.100B.000C.010D.001
参考答案:D
参考解析:本题考查的知识点是豢的构造。建立一个类的对象时,构造函数的执行顺序如下:①执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);②执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);③执行自身的构造函数。本题Derived类继承于Base类,所以首先会构造基类Base,但Derived类的构造函数没有初始化列表,所以将调用Base类的默认构造函数,输出一个0。接下来由于它的成员中还定义了一个Base类的对象,两构造函数也没有显示初始化这个对象,所以再次调用Base类的默认构造函数输出一个0。最后构造自身,因为主函数中传入了构造参数1,所以构造自身时输出了一个1。故最终输出结果为001。
10[单选题] 若已定义:
inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是( )。
A.a[p-a]B.*(&a[i])C.p[i]D.a[10]
参考答案:D
参考解析:通常,引用一个数组元素可以用下标法,如a[p-a]形式,或指针法,如*(&a[i])的形式。本题中a[9]=9,a[10]显然超出了数组范围,数组的下标是从0开始的。
11[判断题]使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访问权限是私有的。
参考答案:错
12[单选题]需求分析阶段的任务是( )。
A.软件开发方法B.软件开发工具C.软件开发费用D.软件系统功能
参考答案:D
参考解析:需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。
13[单选题]有如下程序段:
int *p, a=10, b=1;
p=&a;
a=*p+b;
执行该程序段后,a的值是( )。
A.12B.11C.10D.编译出错
参考答案:B
14[单选题]在模块化程序设计中,按功能划分模块的原则是( )。
A.各模块的功能尽量单一,且各模块之间的联系尽量的少
B.各模块的功能尽量单一,且各模块之间的联系尽量紧密
C.各模块应包括尽量多的功能
D.各模块应包括尽量多的输入输出操作
参考答案:A
参考解析:在模块化程序设计中.按功能划分模块的原则是:要求各模块的功能尽量单一,且各模块之间的联系尽量的少。
15[单选题] 数据库设计的根本目标是要解决( )。
A.数据共享问题
B.数据安全问题
C.大量数据存储问题
D.简化数据维护
参考答案:A
参考解析:从数据库的概念中可以看到,所谓数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。因此进行数据库设计的根本目标还是为了解决数据共享问题。
16[单选题]下列关于this指针的叙述中,正确的是( )
A.任何与类相关的函数都有this指针
B.类的成员函数都有this指针
C.类的友元函数都有this指针
D.类的非静态成员函数才有this指针
参考答案:D
17[简答题]使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:
sizeof(S1)=5
sizeof(s2)=10
sizeof(s3)=1
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。
(1)不能删除assert()语句。
(2)只能修改后面的数字。
提示:assert函数如果为假,则会产生一个中断异常。
试题程序:
#include
#include
voidmain()
{
char*s1="abc":
//********error********
assert(sizeof(s1)==3):
cout<<"sizeof(s1)=5"<
chars2[10]="ab":
//********error********
assert(sizeof(s2)==2);
cout<<"sizeof(s2)=10"<
chars3=23:
//********error********
assert(sizeof(s3)==4);
cout<<"sizeof(s3)=1"<
return;
}
参考解析:
(1)应改为“assert(sizeof(s1)==4);”。
(2)应改为“assert(sizeof(s2)==1O);”。
(3)应改为“assert(sizeof(s3)==1);”。
【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert函数只有为真,才不会产生中断异常。“assert(sizeof(s1)==3);”语句中“sizeof(s1)==3”为假,这会使程序产生异常,不能正常执行。因为str1的值为abc,但是它还有一个尾符,它的长度应该是4,而不是3,所以在第1处修改为“assert(sizeof(s1)==4);”。str2[10]说明,str2的空间为10,在第2处修改为“assert(sizeof(s2)==10);”。charstr3=23;语句说明23是字符,所占存储空间为1,所以修改为“assert(sizeof(s3)==1);”。
18[填空题]数据模型分为格式化模型和非格式化模型,则关系模型属于_______ 模型。
【答案】非格式化
【解析】数据模型分为格式化模型和非格式化模型,关系模型属于非格式化模型。
19[填空题]继承的方式有公有继承、私有继承和 【13】 3种。
参考解析:保护继承
微信搜索"考试吧"了解更多考试资讯、下载备考资料
相关推荐: