计算机二级C++笔试243Word下载.docx
《计算机二级C++笔试243Word下载.docx》由会员分享,可在线阅读,更多相关《计算机二级C++笔试243Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
B.软件工程主要解决软件产品的生产率问题
C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则
D.软件工程只是解决软件开发中的技术问题
软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。
软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。
软件工程的目标是:
在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。
第6题:
下列对于软件的叙述中正确的是
A.软件测试的目的是证明程序是否正确
B.软件测试的目的是使程序运行结果正确
C.软件测试的目的是尽可能多地发现程序中的错误
D.软件测试的目的是使程序符合结构化原则
软件测试是程序的一种执行过程,目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。
第7题:
为了使模块尽可能独立,要求
A.模块的内聚程序要尽量高,且各模块间的耦合程序要尽量强
B.模块的内聚程序要尽量高,且各模块间的耦合程序要尽量弱
C.模块的内聚程序要尽量低,且各模块间的耦合程序要尽量弱
D.模块的内聚程序要尽量低,且各模块间的耦合程序要尽量强
B
为了使模块尽可能独立,要求模块的内聚程度尽量高,且各模块之间的耦合程度要尽量弱。
第8题:
A.程序就是软件
B.软件开发不受计算机系统的限制
C.软件既是逻辑实体,又是物理实体
D.软件是程序、数据与相关文档的集合
软件是一系列按照特定顺序组织的计算机数据和指令的集合。
软件并不只是包括在计算机上运行的程序,与这些程序相关的文档也被认为是软件的一部分。
简单地说,软件就是程序加文档和数据的集合体。
第9题:
数据独立性是数据库技术的重要特点之一。
所谓数据独立性是指
A.数据与程序独立存放
B.不同的数据被存放在不同的文件中
C.不同的数据只能被对应的应用程序所使用
D.以上3种说法都不对
数据独立性是指建立在数据的逻辑结构和物理结构分离的基础上,用户以简单的逻辑结构操作数据而无须考虑数据的物理结构,转换工作由数据库管理系统实现。
数据独立性分为数据的物理独立和数据的逻辑独立。
第10题:
用树状结构表示实体之间联系的模型是
A.关系模型
B.网状模型
C.层次模型
D.以上3个都是
实体之间的关系模型包括层次模型、网状模型和关系模型,其中,层次模型可以由树状结构来表示。
第11题:
为了取代C中带参数的宏,在C+十中使用
A.重载函数
B.内联函数
C.递归函数
D.友元函数
内联函数是inline,当程序中出现对该函数的调用时,编译器使用函数体中的代码插入到调用该函数的语句处,同时用实参代替形参。
一般在程序运行时不再进行函数调用,代替了C语言中的宏定义。
第12题:
下列关于类定义的叙述中,正确的是
A.类定义中包括数据成员和函数成员的声明
B.类成员的缺省访问权限是保护的
C.数据成员必须被声明为私有的
D.成员函数只能在类体外进行定义
在类的定义中,类的数据成员和成员函数可在类中声明,在类中或者类外定义均可。
在类外定义成员函数时,要加上类名和域作用符,类名:
:
为前缀,在类中的成员的默认访问权限为私有的。
第13题:
下列关于派生类构造函数和析构函数的叙述中,错误的是
A.派生类的构造函数会隐含调用基类的构造函数
B.如果基类中没有默认构造函数,那么派生类必须定义构造函数
C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数
D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数
在通常情况下,派生类和基类的构造函数的执行顺序为:
先执行基类的构造函数,然后执行派生类的构造函数;
当撤销派生类对象时,先执行派生类的析构函数,随后再执行基类的析构函数。
第14题:
通过运算符重载,可以改变运算符原有的
A.操作数类型
B.操作数个数
C.优先级
D.结合性
运算符重载不能改变运算符原有的优先级、结合特性和操作数个数。
运算符重载不能创建新的运算符,运算符重载可以改变运算符参数的类型和返回值的类型。
第15题:
有如下函数模板:
templateTsouare(Tx)(returllx*x;
) 其中T是
A.函数形参
B.函数实参
C.模板形参
D.模板实参
函数模板定义的一般格式为:
Template<typename类型参数>返回类型 函数名(模板形参表){函数体}
第16题:
使用输入/输出操作符setw,可以控制
A.输出精度
B.输出宽度
C.对齐方式
D.填充字符
setw(n)设置域宽为n,用于输出。
第17题:
下列字符串中,不可以用作C++标识符的是
A.y_2006
B._FEST_H
C.Return
D.switch
在C++中,变量标识符必须是以大小写字母、下画线开始,由数字或者字母下画线等组成的一个字符串,其中C++关键字不能作为标识符,不能包含-、+、*、/等运算符号。
C++变量区分大小写,所以Retrun不是关键字,而是一个合法变量;
swith为关键字,所以不能定义为标示符。
第18题:
字面常量42、4.2、42L的数据类型分别是
A.long、double、int
B.long、float、int
C.int、double、long
D.int、float、long
根据题干可知,分别为整型、浮点型和长整型。
第19题:
执行下列语句段后,输出字符“*”的个数是for(inti=50;
i>l;
--i)cout<<”*”
A.48
B.49
C.50
D.51
for(inti=50;
i>1;
--i),i为50~2,故打印49个*。
第20题:
有如下程序段,其中会产生编译错误的语句是inti=0,j=1;
int&r=i;
//①r=j;
//②int*p=&i;
//③*p=&r;
//④
A.④
B.③
C.②
D.①
赋值运算符不能将int地址(指针)赋值给int变量。
第21题:
在下面的定义语句中,画线处应填入的内容是classFred{public:
voidprint(){cout<<data<<endl;
}voidsetData(doubleD.{data=d;
}staticintcount;
private:
doubledata;
};
______count=0;
//静态数据成员的定义
A.int
B.staticint
C.intFred:
D.staticintFred:
静态数据成员在类中声明,对它的访问可通过类名进行。
第22题:
有如下程序:
#include<iostream>usingnamespacestd;
classBase{protected:
inti;
public:
intj;
classDerived:
publicBase{intm;
intn;
intmain(){Derivedd;
d.i=0;
//[1]d.j=0;
//[2]d.n1=0;
//[3]d.n=0;
//[4]return0;
} 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是
A.[1]和[2]
B.[1]和[3]
C.[2]和[3]
D.[2]和[4]
基类被派生类公有派生时,可以在派生类中访问基类中的公有数据成员和保护数据成员,私有数据成员在派生类中不能被直接访问,保护数据成员和私有数据成员均不能被派生类对象直接访问。
如果一个类的数据成员没有被限定就会被默认为私有数据成员,私有数据成员不能直接被类对象访问。
第23题:
在表达式x-y中,“-”是作为非成员函数重载的运算符。
若使用显式的函数调用代替直接使用运算符“-”,这个表达式还可以表示为
A.x.operator-(y)
B.operator-(y,x)
C.yoperator-(x)
D.operator-(x,y)
非成员函数重载的运算符的显示调用格式为:
aa.operator@bb,其中@是重载运算符号。
第24题:
下列函数模板定义中错误的是
A.template<classQ>
B.template<classQ>QF(Qx){returnQ+x;
}QF(Qx){returnx+x;
}
C.template<classT>
D.template<classT>TF(Tx){returnx*x;
}boolF(Tx){returnx>1;
在函数模板定义中,类型参数不能参与运算。
第25题:
已知outfile是一个输出流对象,要想将outfile的文件指针定位到当前位置之前321字节处,正确的函数调用语句是
A.outfile.seekp(321,ios_base:
cur);
B.outfile.seekp(321,ios_base:
beg);
C.outfile.seekp(-321,ios_base:
D.outfile.seekp(-321,ios_base:
在文件中偏移定位时的初始值ios:
base_beg将指针定位在文件的开始位置;
ios:
base_cur将指针定位在文件的当前位置;
base_end将指针定位在文件的结束位置。
从当前位置往后偏移量为正,从当前位置往前偏移,偏移量为负。
第26题:
#include<cstring>#include<iostream>usingnamespacestd;
classMyString{public:
MyString(constchar*s);
~MyString(){delete[]data;
}protected:
unsignedlen;
char*data;
MyString:
MyString(constchar*s){len=strlen(s);
data=newchar[1en+1];
strcpy(data,s);
}intmain(){MyStringa("
C++Progreanfing"
);
MyStringb(A);
return0;
} 在运行上面的程序时出错,错误的原因是
A.构造函数的实参不允许是本类的对象
B.没有定义实现深层复制(深复制)的复制构造函数
C.构造对象a时实参与形参类型不符
D.系统不能生成缺失的复制构造函数
当类中的数据成员有指针时,必须使用深层复制构造函数,否则会发生指针悬挂。
在进行函数析构时,会出现指针丢失现象。
第27题:
#include<iostream>usingnamespaeestd;
classDemo{public:
Demo(){cout<<"
defaultconstructor\n"
;
}Demo(constDemo&x){cout<<"
copyconstructor\n"
}};
DernouserCore(DemoB.{Democ(B.;
returnc;
}intmain(){Demoa,d;
cout<<"
callinguserCode()\n"
d=userCode(A);
} 执行上面程序的过程中,构造函数Demo()和Demo(constDemo&
x)被调用的次数分别为
A.1和1
B.1和2
C.2和3
D.2和4
无参构造函数调用和复制构造函数调用的Demoa,d;
调用2次无参构造函数Demo(),在DemouserCore(DemoB.{Democ(B.;
}函数中,Demob调用一次复制构造函数,Democ(B.调用一次复制构造函数,在函数返回值时还要调用一次复制构造函数,故Demo(constDemo&x)的调用次数为3次。
第28题:
已知在函数func中语句this->ff=0;
与语句ff=0;
的效果完全相同。
对于这一现象,下列叙述中错误的是
A.ff是某个类的数据成员,func是该类的友元函数
B.ff是某个类的数据成员,func是该类的成员函数
C.this->ff和ff是同一个变量
D.func不是一个静态成员函数
类的静态数据成员和友元函数,不能拥有this指针。
第29题:
如下程序的输出是#include<iostream>usingnamespacestd;
classBase{public:
Base(){cout<<"
BB"
f();
}voidf(){cout<<"
Bf"
publicBase{public:
Derived(){eout<<"
DD"
Df"
intmain(){Derivedd;
return0;
A.BBBff)D
B.BBDfDDDf
C.DD
D.DDBBBf
当创建派生类对象时,首先调用基类的构造函数,最后调用派生类的构造函数。
第30题:
下列叙述中错误的是
A.公有继承时基类中的public成员在派生类中仍是public成员
B.私有继承时基类中的protected成员在派生类中仍是protected成员
C.私有继承时基类中的public成员在派生类中是private成员
D.保护继承时基类中的public成员在派生类中是protected成员
在私有继承方式下,所有的类成员都继承为私有成员。
第31题:
下列是关于派生类声明的开始部分,其中正确的是
A.classvirtualB:
publiceA
B.virtualclassB:
C.classB:
publicAvirtal
D.classB:
virtualpublicA
派生类的声明格式如下:
class派生类名:
[继承方式]基类名{派生类的数据成员和成员函数}virtual为虚继承,是继承方式,所以应该放在派生类名后面。
第32题:
在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是
A.后缀一元运算符
B.前缀一元运算符
C.无操作数的运算符
D.二元运算符
在成员函数重载中,一元函数重载在函数声明中可以没有任何形参,操作数就是对象本身;
但是作为后缀运算符重载时,则必须在形参中添加参数。
第33题:
关于关键字class和typename,下列说法中正确的是
A.程序中所有的typename都可以替换为class
B.程序中所有的class都可以替换为typename
C.A和B都正确
D.A和B都不正确
只有在目标声明中,typename和class才可以相互替换,即typename可以被class替换,而有的class,不一定能被typename替换。
第34题:
如下程序的输出结果是#include<iostream>#include<iomanip>usingnamespacestd;
classCSum{intx,y;
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;
}
A.88
B.****88
C.****8****8
D.8****8
输出流控制中,如果没有指定对齐方式,则默认为左对齐、右填充,CSum类使“<<”运算符出栈,并将输出控制为宽度为5,cout<<setfill('
执行时就打印8****,然后执行cout<<y;
打印8,故答案为D。
第35题:
classStack{public:
Stack(unsignedn=10):
size(n){rep_=newint[size];
top=0;
}Stack(Stack&
s):
size(s.size){rep_=newint[size];
fbr(inti=0;
i<size;
i++)rep_[i]=s.rep_[i];
top=s.top;
} ~Stack(){delete[]rep_;
}voidpush(intA){rep一_top]=a;
top++;
}intpop(){--top;
returnrep_[top];
}b001isEmpty()const{returntop==0;
}private:
int*rep_;
unsignedsize,top;
intmain(){Stacksl;
for(inti=1;
i<5;
i++)s1.push(i);
Stacks2(s1);
for(i=1;
i<3;
i++)cout<-<s2.pop()<<'
,'
s2.pusl:
(6);
s1.push(7);
while(!
s2.isEmpty())cout<<s2.pop()<<'
return0:
} 程序的输出结果是
A.4,3,2,1,
B.4,3,6,7,2,1,
C.4,3,6,2,1,
D.1,2,3,4,
堆栈组织元素的原则是“先进后出”,Stacks2(s1);
使用复制构造函数新建s2,里面有元素1,2,3,4。
for(i=1;
i++)cout<<s2.pop()<<'
使栈顶元素4,3出栈,s2.push(6)将6压入栈顶。
while(!
s2.isEmpty())cout<<s2.pop()<<'
使元素6,2,1出栈,故答案为4,3,6,2,1。
二、填空题(每空2分,共30分)
第36题:
在深度为7的满二叉树中,度为2的结点个数为______。
63
详细解答:
第37题:
软件测试分为白箱(盒)测试和黑箱(盒)测试,等价类划分法属于______测试。
黑盒
等价类划分法是将所有可能的输入数据,即程序的输入域划分为若干部分(子集),然后从每个子集中选择少数具有代表性的数据作为测试用例。
该方法是一种常用的黑盒用例分析方法。
第38题:
在数据库系统中,实现各种数据管理功能的核心软件称为______。
DBMS
一个完整的数据库系统(DBS)包括数据库(DB.和数据库管理系统(DBMs),其中,数据库管理系统实现各种数据管理功能,是数据库系统的核心。
第39题:
软件生命周期可分为多个阶段,一般分为定义阶段、开发和维护阶段。
编码和测试属于______阶段。
开发[解释]软件的生命周期一般包括3个阶段:
软件定义、软件开发及软件维护阶段。
软件定义阶段包括:
可行性研究与计划制定和需求分析阶段;
软件的开发阶段包括了软件设计、软件实现软件的编码和测试等内容;
在软件维护阶段,主要是对软件的运行和维护。
第40题:
在结构化分析使用的数据流图(DFD.中,利用______对其中的图形元素进行确切解