c++ 期末练习题+答案.docx

上传人:b****4 文档编号:4877524 上传时间:2022-12-11 格式:DOCX 页数:32 大小:29.65KB
下载 相关 举报
c++ 期末练习题+答案.docx_第1页
第1页 / 共32页
c++ 期末练习题+答案.docx_第2页
第2页 / 共32页
c++ 期末练习题+答案.docx_第3页
第3页 / 共32页
c++ 期末练习题+答案.docx_第4页
第4页 / 共32页
c++ 期末练习题+答案.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

c++ 期末练习题+答案.docx

《c++ 期末练习题+答案.docx》由会员分享,可在线阅读,更多相关《c++ 期末练习题+答案.docx(32页珍藏版)》请在冰豆网上搜索。

c++ 期末练习题+答案.docx

c++期末练习题+答案

C++程序设计练习题

一、选择题

1.有函数f定义如下:

intf(inta=1,intb=2,intc=3){

returna+b+c;

}

下列说法中错误的是(D)。

A.函数调用f()的结果为6。

B.函数调用f(f(f()))的结果为16。

C.函数调用f(f(),f())的结果为15

D.函数调用f(f(),f(f()))的结果为21。

2.C++中,关于参数默认值的描述正确的是(B)。

A.只能在函数定义时设置参数默认值

B.设置参数默认值时,应当从右向左设置

C.设置参数默认值时,应当全部设置

D.设置参数默认值后,调用函数不能再对参数赋值

3. 如果类 A 被说明成类 B 的友元,则 (D ) 

A. 类A的成员即类 B 的成员 B. 类 B 的成员即类 A 的成员 

C. 类A的成员函数不得访问类B的成员 

D. 类 B 不一定是类 A 的友元

4、如下是某同学定义的类A,则其中有(B)处错误。

classA{

inta=1;

voidA();

~A(void);

}

A.2B.3C.4D.5

5、针对下列类型定义,可以出现在main函数中的语句有(A)。

classDate{

private:

intyear,month,day;

};

A.Dated;

B.Date:

:

year=1;

C.Dated={2009,1,1};

D.cout<

6、有程序如下,下列说法中错误的是(B)。

classRMB{

intyuan,jiao,fen;

public:

RMB(inty=0,intj=0,intf=0){

yuan=y,jiao=j,fen=f;

}

~RMB(){cout<

"<

"<

};

intmain(){

RMBa[2],b(10,20,30),c(b);

}

A.20:

10:

30不可能是程序的输出结果。

B.析构对象c时输出结果是0:

0:

0。

C.0:

0:

0会在输出结果中出现两遍。

D.对象a[0]最后析构。

7、类A是自定义类型,下列说法中错误的是(C)。

A*a=newA;

A*b=newA(a);

deletea;

deleteb;

A.构造堆对象a时会调用类A的默认构造函数。

B.构造堆对象b时会调用类A的拷贝构造函数。

C.堆对象a先构造,所以它后析构。

D.释放指针b所指内存时,会调用类A的析构函数。

8、a、b、c是类T的对象,为计算表达式c=a+b,必须(C)。

A.以成员函数形式重载加法运算符+。

B.以友元函数形式重载赋值运算符=。

C.以友元函数形式重载加法运算符+。

D.以T作为加法运算符函数的返回类型。

9.执行如下的程序段后,输出结果是(A)。

cout.fill('*');cout.width(6);cout.fill('#');cout<<123<

A.###123B.123###C.***123D.123***

10.s是STL数据类型string的对象,下列表达式错误的是(C)。

A.s+='s'B.s="Hello"

C.s-'a'D.s>"abc"

11.下列程序中,访问出错的是(B)。

classA{

private:

intx;

protected:

inty(){x=1;}//A

public:

intz;

};

classB:

publicA{

public:

voidu(){cout<

};

intmain(){

Bb;b.z=1;//C

b.u();//D

}

12.有类型定义如下,则下列说法中错误的是(B)。

classObject{};

classA{Objectoa;};

classB:

publicA{Objectob;};

A.构造类B的对象时会首先调用类Object的构造函数。

B.对语句Bb;的执行会先后引发6次函数调用。

C.析构类B的对象时,类B的析构函数在类A的析构函数之前调用。

D.析构类A的对象时会最后调用类Object的析构函数。

13.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是 (A) 

A. 派生类的对象可以直接访问基类中的成员 

B. 派生类的对象可以初始化基类的引用 

C. 派生类的对象可以赋给基类的对象 

D. 派生类的对象的地址可以赋给指向基类的指针 

14.下列(D)行的输出结果是B:

:

v。

classA{

public:

voidf(){cout<<"A:

:

f"<

virtualvoidv(){cout<<"A:

:

v"<

};

classB:

publicA{

public:

voidf(){cout<<"B:

:

f"<

virtualvoidv(){cout<<"B:

:

v"<

};

intmain(){

Aa,*pa=&a;

pa->f();//A

pa->v();//B

Bb;pa=&b;

pa->f();//C

pa->v();//D

}

15.以下(C)成员函数表示纯虚函数。

A.virtualintvf(int);B.voidvf(int)=0;

C.virtualvoidvf()=0;D.virtualvoidvf(int){}

17.下列程序段中,ofs是ofstream类的对象,ifs是ifstream类的对象,c是char型变量,则执行结果是(B)。

while(ifs.get(c))

ofs.put(c);

A.把一个文件的第1个字节写入到另一个文件中

B.把一个文件的内容全部写入到另一个文件

C.仅仅把字符c写入到一个文件中

D.把两个文件的内容合并到一起

4. 下面说法正确的是 (B) 

A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 

B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 

C.类的内联函数必须在类体内定义 

D.类的内联函数必须在类体外通过加关键字 inline 定义 

18.下列(B)循环能够把26个小写字母以文本方式写入文件中。

intmain(){

inta;

ofstreamofs("data.txt");

a='a';while(a<='z')ofs<

a='a';while(a<='z')ofs.put(a++);//B

a='a';while(a<='z'){//C

ofs.write((constchar*)&a,sizeof(a));

++a;

}

a='a';while(a<='z')cout<

ofs.close();

}

19.假定AB为一个类,则执行“ABa(4),b[5],*p[2];”语句时,自动调用该类构造函数的次数为(A)。

A.6B.7C.9D.11

20.下面叙述错误的是(A)。

A.基类的protected成员在派生类中仍然是protected

B.基类的protected成员在public派生类中仍然是protected的

C.基类的protected成员在private派生类中是private的

D.基类的protected成员不能被派生类的对象访问

21.多继承派生类构造函数构造对象时,(B)被最先调用。

A.派生类自己的构造函数

B.虚基类的构造函数

C.非虚基类的构造函数

D.派生类中子对象类的构造函数

22.关键字_____C__说明对象或变量初始化后不会被修改。

A.staticB.publicC.constD.inline

23.在C++中,函数原型不能标识(D)

A.函数的返回类型B.函数参数的个数

C.函数参数类型D.函数的功能

24.以下能正确定义数组并正确赋初值的语句是D

A.intN=5,b[N][N];

B.inta[2]={{1},{3},{4},{5}};

C.intc[2][]={{1,2},{3,4}};

D.intd[3][2]={{1,2},{3,4}};

25.对于动态分配内存空间描述正确的是(D)

A.使用new运算符分配的内存空间的长度必需是常量

B.delete运算符可以释放动态的存储空间和静态的存储空间

C.由new分配的内存空间是不连续的

D.delete运算符只能释放由new分配的动态存储空间

26.C++中解决命名冲突的机制是:

D

A.虚基类B.虚函数C.函数重载D.名字空间                              

27.对于一个功能不太复杂,并且要求加快执行速度,选用(A)合适。

A.内联函数B.重载函数

C.递归调用D.嵌套调用

28.在一个源文件中定义的全局变量的作用域为(C)

A.本程序的全部范围

B.本函数的全部范围

C.从定义该变量的位置开始到本文件结束

D.以上说法都不正确

                              

5.对于任意一个类,析构函数的个数最多为(B)

A.0B.1C.2D.3

29. 假定 AB 为一个类,则执行 AB x ;语句时将自动调用该类的 (B ) 

A. 有参构造函数 B. 无参构造函数 

C. 拷贝构造函数 D. 赋值构造函数 

30. 类型修饰符 unsigned 不能修饰 (D ) 

A. char B. int 

C. long int D. float 

31.可以用 p.a 的形式访问派生类对象 p 的基类成员 a ,其中 a 是 (D) 

A. 私有继承的公有成员 B. 公有继承的私有成员 

C. 公有继承的保护成员 D. 公有继承的公有成员 

32.下列程序的输出结果是(B)。

voidf(int&i,int&j){

intt(i);

i=j,j=t;

cout<

}

intmain(){

inta=5,b=8;

f(b,a);

cout<

}

A.8558B.5885

C.5858D.8585

33.对于类定义

classA{

public:

virtualvoidfunc1(){}

voidfunc2(){}

};

classB:

publicA{

public:

voidfunc1(){cout<<〃classBfunc1〃<

virtualvoidfunc2(){cout<<〃classBfunc2〃<

};

下面正确的叙述是(C)

A.A:

:

func2()和B:

:

func1()都是虚函数

B.A:

:

func2()和B:

:

func1()都不是虚函数

C.B:

:

func1()是虚函数,而A:

:

func2()不是虚函数

D.B:

:

func1()不是虚函数,而A:

:

func2()是虚函数

34.在下列函数原型中,可以作为类AA构造函数的是(D)。

A.voidAA(int);B.intAA();C.AA(int)const;D.AA(int);

35. 将两个字符串连接起来组成一个字符串时,选用(C)函数。

A.strlen()B.strcap()C.strcat()D.strcmp()

36. 如果类 A 被说明成类 B 的友元,则 ( D) 

A. 类A的成员即类 B 的成员 B. 类 B 的成员即类 A 的成员 

C. 类A的成员函数不得访问类B的成员 

D. 类 B 不一定是类 A 的友元

37. 用new运算符创建一个含10个元素的一维整型数组的正确语句是(C)。

A.int*p=newa[10];

B.int*p=newfloat[10];

C.int*p=newint[10];

D.int*p=newint[10]={1,2,3,4,5}

38. 在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是 (C ) 

A. 派生类的对象可以赋给基类的对象 

B. 派生类的对象可以初始化基类的引用 

C. 派生类的对象可以直接访问基类中的成员 

D. 派生类的对象的地址可以赋给指向基类的指针 

40.面向对象方法的多态性是指(B)。

A.一个类可以派生出多个特殊类

B.一个对象在不同的运行环境中可以有不同的变体

C.针对一消息,不同的对象可以以适合自身的方式加以响应

D.一个对象可以是由多个其他对象组合而成的

41. 在 C++ 程序中,对象之间的相互通信通过 (B) 

A. 继承实现 B. 调用成员函数实现 

C. 封装实现 D. 函数重载实现 

42.面向对象软件开发中使用的OOA表示(A)。

A.面向对象分析B.面向对象设计

C.面向对象语言D.面向对象方法

43.在 int a=3,int *p=&a ;中, *p 的值是 (D ) 

A. 变量 a 的地址值 B. 无意义 

C. 变量 p 的地址值 D.3 

44.使用重载函数编程序的目的是(A)

A.使用相同的函数名调用功能相似的函数B.共享程序代码

C.提高程序的运行速度D.节省存储空间

45. 在多文件结构的程序中,通常把类的定义单独存放于(D)中。

A.主文件B.实现文件C.库文件D.头文件                              

46.可以用 p.a 的形式访问派生类对象 p 的基类成员 a ,其中 a 是 ( D) 

A. 私有继承的公有成员 B. 公有继承的私有成员 

C. 公有继承的保护成员 D. 公有继承的公有成员                        

47.C++语言中函数返回值的类型是由(C)决定的?

A.return语句中的表达式类型

B.调用该函数的主调函数类型

C.定义函数时所指定的函数类型

D.上说法都不正确

48.当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的(D)。

A.只能是公有成员B.只能是保护成员

C.只能是除私有成员之外的任何成员D.具有任何权限的成员

49.下正确的函数原型为(D)

A.func(intx;inty);B.void(x,y);

C.void(intx,y);D.voidfunc(int,int);

50.在一个源文件中定义的全局变量的作用域为(C)

A.本程序的全部范围

B.本函数的全部范围

C.从定义该变量的位置开始到本文件结束

D.以上说法都不正确

51.应在下列程序划线处填入的正确语句是(C)。

classBase

 {public:

voidfun(){cout<<"Base:

:

fun"<

 classDerived:

publicBase

{voidfun()

{//显示调用基类的函数fun()

cout<<"Derived:

:

fun"<

A.fun();B.Base.fun();C.Base:

:

fun();D.Base->fun();

52.C++中,关于参数默认值的描述正确的是(A)。

A.只能在函数定义时设置参数默认值

B.设置参数默认值时,应当从右向左设置

C.设置参数默认值时,应当全部设置

D.设置参数默认值后,调用函数不能再对参数赋值

53.如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为(A)。

A.a.operator+(b)B.b.operator+(a)

C.operator+(a,b)D.operator(a+b)

54.实现运行时的多态性要使用(D)。

A.重载函数B.构造函数C.析构函数D.虚函数

55.对数组名作函数的参数,下面描述正确的是(B)。

A.数组名作函数的参数,调用时将实参数组复制给形参数组。

B.数组名作函数的参数,主调函数和被调函数共用一段存储单元。

C.数组名作参数时,形参定义的数组长度不能省略。

D.数组名作参数,不能改变主调函数中的数据。

56.对于一个功能不太复杂,并且要求加快执行速度,选用(A)合适。

A.内联函数B.重载函数

C.递归调用D.嵌套调用

57.在 int a=3,int *p=&a ;中, *p 的值是 (D ) 

A. 变量 a 的地址值 B. 无意义 

C. 变量 p 的地址值 D.3 

58.C++中的虚基类机制可以保证:

(D)。

A.限定基类只通过一条路径派生出派生类

B.允许基类通过多条路径派生出派生类,派生类也就能多次继承该基类

C.当一个类多次间接从基类派生以后,派生类对象能保留多份间接基类的成员

D.当一个类多次间接从基类派生以后,其基类只被一次继承

59.用重载函数编程序的目的是(A)

A.使用相同的函数名调用功能相似的函数B.共享程序代码

C.提高程序的运行速度D.节省存储空间

60. 在 C++ 程序中,对象之间的相互通信通过 (B ) 

A. 继承实现 B. 调用成员函数实现 

C. 封装实现 D. 函数重载实现 

61、下列关于C++标识符的命名不合法的是C

A.PadB.name_1C.A#bcD._a12

62、若有以下类型标识符定义:

(D)

intx=2;charw='a';floaty=23.45f;doublez=45.6712;

则表达式w*x+y-z的结果类型是

A.floatB.charC.intD.double

63、若有intx=10,y=20,z=30;则执行下面语句后,x的值是B

if(x>y)

z=x;

x=y;

y=z;

A.10B.20C.30D.0

64、循环语句whlie(inti=0)i--;的循环次数是A

A.0B.1C.5D.无限

65、一个函数无返回值时,应选择的说明符是C

A.staticB.externC.voidD.无说明符

66、对重载函数形参的描述中,错误的是D

A.参数的个数可能不同

B.参数的类型可能不同

C.参数的顺序可能不同

D.参数的个数、类型、顺序都相同,只是函数的返回值类型不同

67、以下能正确定义数组并正确赋初值的语句是D

A.intN=5,b[N][N];

B.inta[2]={{1},{3},{4},{5}};

C.intc[2][]={{1,2},{3,4}};

D.intd[3][2]={{1,2},{3,4}};

68、下列给字符数组进行的初始化中,不正确的是D

A.chars1[]="abcd";

B.chars2[3]={'x','y','\0'};

C.chars3[]={'a','x','y','\0'};

D.chars4[6]={"xyz","mnp"};

69、通常的拷贝构造函数的参数是C

A.某个对象名B.某个对象成员名

C.某个对象的引用D.某个对象的指针名

70、关于构造函数特点的描述中,错误的是A

A.定义构造函数必须指出类型

B.构造函数的名字与该类的类名相同

C.一个类中可定义0至多个构造函数

D.构造函数是一种成员函数

71、下面程序的运行结果为D+usingnamespacestd;后选C

#include

intadd(inta,intb);

voidmain()

{

externintx,y;

cout<

}

intx=20,y=5;

intadd(inta,intb)

{

ints=a+b;

returns;

}

A.20B.5C.25D.编译会提示出错信息

72、关于常成员的描述中,错误的是B

A.常成员包含常数据成员和常成员函数两种

B.常数据成员必须是公有的

C.常数据成员要使用构造函数成员初始化列表进行初始化

D.常对象只能调用它的常成员函数,不能调用其它的成员函数

73、关于友元函数的描述中,错误的是B

A.友元函数不是成员函数

B.友元函数只能访问类中私有成员

C.友元函数破坏隐藏性,尽量少用

D.友元函数说明在类体内,使用关键字friend

74、如果有intx,*p;floaty,*q;则下面操作正确的是C

A.p=xB.p=q

C.p=&xD.p=&y

75、若有函数说明voidfA(intm,intn);和指针变量的定义void(*p)(int,int);并且有p=fA则下列操作不正确的是D

A.(*p)(3,4);B.p(3,4);

C.fA(3,4);D.*p++;

76、若数组名作实参而指针变量作形参,函数调用时实参传给形参的是D

A.数组的长度

B.数组第一个元素的值

C.数组所有元素的值

D.数组第一个元素的地址

77、对于动态分配内存空间描述正确的是D

A.使用new运算符分配的内存空间的长度必

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1