设为首页 加入收藏

TOP

2018年9月计算机二级C++考试强化练习题及答案(1)(一)
2018-08-27 09:59:40 】 浏览:392
Tags:2018年 9月 计算机 二级 考试 强化 习题 答案

1.下列关于成员函数特征的描述中,错误的是(  )。


A.成员函数一定是内联函数


B.成员函数可以重载


C.成员函数可以设置参数的默认值


D.成员函数可以是静态的


答案:A。【解析】成员函数不一定是内联函数。


2.考虑以下的函数原型:


voldA(inta,intb=5,charZ=’*’);


下面的函数调用中,不正确的是(  )。


A.A(7)


B.A(3,4)


C.A(16,’#’)


D.A(0,2,’*’)


答案:C。【解析】A、B项中,实参不全,参数默认为函数原型中的初始值,但在C项中,第二个实参(char型)与函数原型中的第二个形参类型不一致,故C项错误。


3.关于静态数据成员的描述中正确的是(  )。


A.类的静态数据成员不是类的所有对象共享的数据


B.类的静态数据成员不能被类的成员函数调用


C.类的静态数据成员不能被类的构造函数调用


D.类的静态数据成员必须进行初始化


答案:D。【解析】C++类中的静态成员变量是该类中所有对象所共有的,它能够被类中的任何函数调用,所以选项A,B,C是错误的。而类的静态数据成员是必须要进行初始化才能使用。


4.设有以下类和对象的定义:


ClaSSA


{public:


intm;


};


Ak1,k2,*p1,*p2;


则下面针对成员变量m的引用,错误的是(  )。


A.k1.m=1


B.k2→m=2


C.p1→m=3


D.(*p2).m=4


答案:B。【解析】A*p1,A*p2为指向A类对象的指针,故“p1→m=3,(*p2).m=4”是正确的。但k2不是指针,k2→m的表示是错误的。


5.有以下程序:


classDate


{


public:


Date(inty,intm,intd);


{


year=Y:


month=m;


day=d;


}


Date(inty=2000)


{


year=y;


month=10;


day=1;


}


Date(Date&d)


{


year=d.year;


month=d.month;


day=d.day;


}


voidprint(  )


{


cout<}


private:


intyear,month,day;


};


Datefun(Dated)


{


Datetemp;


temp=d;


returntemp;


}


intmain(  )


{


Datedatel(2000,1,1),date2(0,0,0);


Datedate3(datel);


date2=fun(date3);


return0;


}


程序执行时,Date类的拷贝构造函数被调用的次数是(  )。


A.2


B.3


C.4


D.5


答案:B。【解析】本题考核拷贝构造函数。上述程序中,拷贝构造函数一共被调用了3次:第1次是在执行语句Datedate3(date1)时,用已经建立的对象date1对正在建立的对象date3进行初始化;第2次是在调用fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进行初始化;第3次是在执行fun函数中的返回语句returntemp;时,系统初始化一个匿名对象时使用了拷贝构造函数。


6.下列关于纯虚函数与抽象类的描述巾,错误的是(  )。


A.纯虚函数是一种特殊的虚函数,它没有具体的实现


B.抽象类是指具有纯虚函数的类


C.一个基类声明了纯虚函数,该基类的派生类一定不是抽象类


D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出


答案:C。【解析】纯虚函数是在声明虚函数时被“初始化”为0的虚函数。不定义对象而只作为一种基本类型作为继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。


7.以下程序的输出结果是(  )。


#include


longfun(intn)


{longs;


if(n=-1‖n==2)s=2;


elses=n-fun(n-l):


returns;


}


voidmain(  ){cout


B.2


C.3


D.4


答案:A。【解析】题中fun函数进行了递归调用,第1次调用时:fun(3)n=3,s=3-fun(2),第二次调用时:fun(2)n=2,s=2,返回第一次调用后,s=3-2=1。


8.对于模板定义关键字class和typename说法不正确的是(  )。


A.程序中的class并不能都替换为typename


B.class和typename都可互相替换


C.程序中的typename都能替换为class


D.程序中的部分class可以替换为typename


答案:B。【解析】在C++程序中的typename是都可以替换为class的,但class不能都替换为typename。


9.有如下程序:


#include(iostream>


usingnamespacestd;


classCon


{


charID;


public:


Con(  ):ID(’A){cout<<1;}


Con(charID):ID(ID){cout((2;)


Con(Con8Lc):ID(c.getlD(  )){cout<<3;}


chargetID(  )const{returnID;}


};


voidshow(Conc){cout


{


Conc1;


show(c1);


Conc2(’B’);


show(c2);


return0;


执行上面程序的输出结果是(  )。


A.13A23A


B.23A13B


C.13A23B


D.13823A


答案:C。【解析】Concl定义cl对象,调用Con的无参数构造函数,输出1,ID值变为A,执行show(c1)时会调用拷贝构造函数,将cl对象的值复制给show函数的形参,此时输出3,然后在show()中输出cl的lD值A,Conc2(’B’)定义c2对象,调用Con(charID)构造函数,输出2,c2的ID值为B,show(c2)执行时先调用拷贝构造函数输出3,然后输出B。因此程序输出结果为“13A23B”。


10.有如下程序


#include(iostream.h>


voidmain(  )


{charch[2][5]={"6937","8254"),*p[2];


inti,j,s=0;


for(i=0;i<2;i++)p[i]=ch[i];


for(i=0;i<2;i++)


for(j=0;p[i][j])’\0’;j+=2)


s=10*s+p[i][j]一’0’;


cout<该程序的输出结果是(  )。


A.69825


B.63825


C.6385


D.693825


答案:C。【解析】该题主要要搞清楚以下几点:①定义了一个指针数组char*p[2]后,程序中第一个循环“for(i=0;i(2;i++)p[i]=ch[i]”的作用是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素指向了二维数组ch的第二行字符串,这样,就使指针数组P和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串“6937”,第二行ch[1]中的内容为字符串“8254”。③程序中第二个循环中的循环体“s=s*10+p[i][j]-’0’”的功能是这样的,每执行一次,将s中的值乘以10(即将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][j]中的字符量转换为相应的数字,然后把这个数字加到s

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇2018年9月计算机二级C++考前基础.. 下一篇2018年9月计算机二级C++考试强化..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目