《面对对象程序设计》期末考核试题样例及解答
一、单项选择〔每题1分,12小题WhatsApp网页版,共12分〕
1.C++源程序文件的缺省扩展名为()。
A.cppB.exeC.objD.lik
2.x0||y==5的相反表达式为〔〕。
A.x=0||y!=5B.x=0y!=5
C.x0||y!=5D.x0y==5
3.在下面的字符数组定义中,有语法错误的选项是()。
A.chara
20
=abcdefg”;B.chara
=“x+y=55.”;
C.chara
15
;D.chara
10
=’5’;
4.以下正确的函数原型语句是()。
A.doublefun(intx,inty)
B.doublefun(intx;inty)
C.doublefun(int,int);
D.doublefun(intx,y);
5.在下面存储类中,〔〕的对象不是局部变量。
A.外部静态类B.自动类C.函数形参D.存放器类
6.假定有“structBOOK{chartitle
40
;floatprice;};BOOK*book=newBOOK;”,
那么正确的语句是〔〕。
A.strcpy(book-title,WangTao”);B.strcpy(book.title,”WangTao”);
C.strcpy(*book.title,”WangTao”);D.strcpy((*book)-title,”WangTao”);
7.软件产品所具有的全部或局部地再用于新的应用的实力称为该软件的〔〕。
A.可维护性B.可复用性C.兼容性D.正确性
8.在多文件构造的程序中,通常把含有main()函数的文件称为〔〕。
A.主文件B.实现文件C.程序文件D.头文件
9.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针
域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,假设链队
为空,那么进展插入时必需把新结点的地址赋给()。
A.elemHeadB.elemTail
C.elemHead和elemTailD.elemHead或elemTail
10.假定AB为一个类,那么执行ABa,b(2),c
,*p=a;“”语句时共调用该类无参
构造函数的次数为()。
A.5B.6C.3D.4
11.引入友元的主要目的是为了〔〕。
A.增加数据平安性B.提高程序的牢靠性
C.提高程序的效率和敏捷性D.保证类的封装性
12.假如是类B在类A的根底上构造,那么WhatsApp网页版,就称〔〕。
A.类A为基类或父类,类B为超类或子类
B.类A为基类、父类或超类,类B为派生类或子类
C.类A为派生类,类B为基类
D.类A为派生类或子类,类B为基类、父类或超类
二、填空〔每空1分,15小题,共18分〕
1.C++语言是在_________语言的根底上开展起来的。
2.假定x=5,y=6,那么执行表达式y*=x++计算后,x和y的值分别为__________和
__________。
3.假定x是一个逻辑量,那么xfalse的值为__________。
4.在if语句中,每个else关键字和它前面同层次并且最接近的________关键字相配
套。
5.一个二维字符数组a
10
20
能够存储________个字符串,每个字符串的长度至多
为________。
6.局部变量具有局部生存期,存放在内存的____________区中。
7.假定p所指对象的值为25,p+1所指对象的值为42,那么执行*(p++)或*p++运算后,
p所指对象的值为________。
8.确定语句“couts;”的输出是“apple”,那么执行语句“couts+2;”的输出结
果为__________。
9.面对对象软件开发的生命周期分为三个阶段WhatsApp网页版,即分析、__________和__________。
10.假设采纳p-abc(y)表达式调用一个成员函数,在成员函数中运用的________就代
表了类外的p指针。
11.当用户为一个类定义有____________时,那么系统不会为该类再自动生成一个默认
构造函数。
12.假定用户为类AB定义了一个构造函数,那
么定义该类的对象时,有________种定义格式。
13.假定用户只为类AB定义了一个构造函数,
那么定义该类的对象时,其实参表中至少带有_________个实参。
14.在重载一个单目运算符时,参数表中没有参数,说明该运算符函数只能是类的
_____________。
15.假设要保证一个公共的基类在派生类中只产生一个基类子对象,那么必需都以
____________的方式继承它。
三、程序填充。对程序、函数或类中划有横线的位置,依据题意按标号把适宜的内容
填写到程序下面相应标号的后面〔每题6分,3小题,共18分〕
1.把从键盘上输入的一个大于等于3的整数分解为质因子的乘积。如输入24时得到的
输出结果为“2223”,输入50时得到的输出结果为“255”,输入37时得到的输出结果
为“37”。
#includeiostream.h
voidmain()
intx;
请输入一个整数,假设小于3那么重输
docinx;while(___(1)___);
inti=2;
do{
while(___(2)___){
couti;
x/=i;
___(3)___;
}while(ix);
if(x!=1)coutx;
coutendl;
(1)
(2)
(3)
2.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法依据table数
组中的n个元素建立一个表头指针为L的链表,链表中结点值的依次和数组元素值的依次正
好相反。
voidf6(NODE*L,inttable
,intn)
L=NULL;
if(n=0)return;
inti=0;
NODE*p;
while(___(1)___){
p=newNODE;
p-data=___(2)___;
p-next=L;
___(3)___;
i++;
(1)
(2)
(3)
3.确定一个利用数组实现栈的类定义如下:
constintARRAY_SIZE=10;
classStack{
public:
voidInit(){top=-1;}//初始化栈为空
voidPush(intnewElem);//向栈中压入一个元素
intPop();//从栈顶弹出一个元素
boolEmpty(){//判栈空
returntop==-1;
intDepth(){returntop+1;}//返回栈的深度
voidPrint();//遵照后进先出原那么依次输出栈中每个元素,
//直到栈空为止
private:
intelem
ARRAY_SIZE
;//用于保存栈元素的数组
inttop;//指明栈顶元素位置的指针
};
voidStack::Push(intnewElem){
if(___(1)___){
栈满
exit(1);//中止运行
___(2)___;
elem
top
=___(3)___;
(1)
(2)
(3)
四、写出程序或程序段的运行结果〔每题6分,3小题,共18分〕
1.#includeiostream.h
voidmain()
intx=5;
switch(2*x-3){
case4:coutx’;
case7:cout2*x+1’’;
case10:cout3*x-1’’;break;
2.#includeiostream.h
voidmain()
inti,j,len
for(i=0;i3;i++){
for(j=0;j8;j++)
len
=j;break;
3.#includeiostream.h
#includestring.h
classPoint{
intx,y;
public:
Point(intx1=0,inty1=0):x(x1),y(y1){
~Point(){
};
classText{
chartext
100
;//文字内容
public:
Text(char*str){
strcpy(text,str);
~Text()
};
classCircleWithText:publicPoint,publicText{
public:
CircleWithText(intcx,intcy,char*msg):
Point(cx,cy),Text(msg){
};
voidmain()
五、指出程序或函数的功能〔每题6分,2小题,共12分〕
1.doublef1(doublea,doubleb,charop){
switch(op){
case+’:returna+b;
case’-’:returna-b;
case’*’:returna*b;
case’/’:if(b==0){
exit(1);
elsereturna/b;
exit(1);
功能:
2.IntNode*FindMax(IntNode*f)
if(!f)returnNULL;
IntNode*p=f;
f=f-next;
while(f){
if(f-datap-data)p=f;
f=f-next;
returnp;
假定IntNode的类型定义为:
structIntNode{
intdata;//结点值域
IntNode*next;//结点指针域
};
功能:
六、程序改错。请依据程序或函数模块的功能改写个别地方的错误〔每题6分,共6
分〕。
在下面的定义中,NODE是链表结点的构造,appendToList那么是一函数,其功能是:
在list所指向的链表的末尾添加一个新的值为x的结点,并返回表头指针。函数中有两处
错误,指出错误所在行的行号并提出改正看法。
structNODE{
intdata;
NODE*next;
};
NODE*appendToList(NODE*list,intx){//1行
NODE*p=newint;//2行
p-data=x;//3行
p-next=NULL;//4行
if(list==NULL)returnp;//5行
NODE*p1=list;//6行
while(p1-next!=NULL)p1=p1-next;//7行
p1=p;//8行
returnlist;
错误行的行号为______和________。
分别改正为______________和______________。
七、编程〔每题8分,2小题,共16分〕
1.编一程序求出满意不等式的最小n值并输出。
2.依据下面类中MaxMin函数成员的原型和注释写出它的类外定义。
classAA{
int*a;
intn;
intMS;
public:
voidInitAA(intaa
,intnn,intms){
MS=ms;