c++练习题带答案.docx

上传人:b****8 文档编号:10952203 上传时间:2023-02-23 格式:DOCX 页数:32 大小:28.22KB
下载 相关 举报
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++练习题带答案

一、选择题

1.C++语言属于( C )、

A)自然语言  B)机器语言    C)面向对象语言   D)汇编语言

2.下面选项中不属于面向对象程序设计特征的是(C) 、

A)继承性 B)多态性C)相似性D)封装性

3.可用作C++语言用户标识符的一组标识符是(B )。

A) void define  +WORDﻩ ﻩB)a3_b3_123  YN

C)for -abc   CaseD)2a   DO sizeof

4.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。

A)0  B)4    C)8   D)6

5.下列情况中,哪一种情况可不能调用拷贝构造函数 (B )

A)用派生类的对象去初始化基类对象时

B)将类的一个对象赋值给该类的另一个对象时

C)函数的形参是类的对象,调用函数进行形参与实参结合时

D)函数的返回值是类的对象,函数执行返回调用者时

6.以下哪一关键字可用于重载函数的区分( C  )

A)externﻩﻩB)staticﻩC)constD)virtual

7.下列有关数组的叙述中,正确的是(    B)

A)C++中数组的存储方式为列优先存储

B)数组名能够作为实参赋值给指针类型的形参

C)数组下标索引从1开始,至数组长度n结束

D)数组指针的语法形式为:

类型名*数组名[下标表达式];

8.下列有关继承与派生的叙述中,正确的是(C )

A)派生类不能访问通过私有继承的基类的保护成员

B)多继承的虚基类不能够实例化

C)假如基类没有默认构造函数,派生类就应当声明带形参的构造函数

D)基类的析构函数与虚函数都不能够被继承,需要在派生类中重新实现

9.实现运行时多态的机制是(  A )

A)虚函数ﻩB)重载函数ﻩC)静态函数ﻩD)模版函数

10.若有下面的函数调用:

fun(a+b, 3,max(n—1,b));

其中实参的个数是(  A )

A)3ﻩﻩB)4ﻩﻩC)5ﻩD)6

11.下列关于this指针的讲法正确的是(B  )

A)this指针存在于每个函数之中

B)在类的非静态函数中this指针指向调用该函数的对象

C)this指针是指向虚函数表的指针

D)this指针是指向类的函数成员的指针

12.在下列关于C++函数的叙述中,正确的是(C )

A)每个函数至少要有一个参数B)每个函数都必须返回一个值

C)函数在被调用之前必须先声明ﻩD)函数不能自己调用自己

13.下列运算符中,不能重载的是( C)

A)&&ﻩﻩB)!

=C)、ﻩﻩD)-〉

14.下面程序的输出结果是( B)

#include〈iostream>

usingnamespace std;

inti=0;

intfun(intn) 

ﻩstaticinta= 2;

a++;

ﻩreturn a+n;

voidmain()

{

intk =5;

ﻩ{

ﻩinti=2;

ﻩﻩk+=fun(i);

}

ﻩk += fun(i);

cout〈< k;

}

A)13ﻩﻩB)14ﻩﻩC)15ﻩﻩD)16

15.下面的程序段的运行结果为(D  )

charstr[]=”job", *p =str;

cout〈〈*(p+2)<〈endl;

A)98ﻩB)无输出结果C)字符’b’的地址   D)字符’b’

16.下面程序的输出结果是(C  )

#include〈iostream〉

usingnamespacestd;

classA

{

 public:

ﻩA(inti){ x= i;}

ﻩvoid dispa() {cout 〈<x 〈〈“,";}

 private:

ﻩint x;

};

classB:

 public A

public:

ﻩB(inti):

A(i+10) {x =i;}

 voiddispb() {dispa();cout<<x<〈endl;}

  private:

ﻩintx;

};

voidmain()

{

Bb

(2);

b、dispb();

A)10,2ﻩﻩB)12,10ﻩC)12,2ﻩﻩD)2,2

17.下面程序的输出结果是(C )

#include<iostream〉

usingnamespace std;

classBase

{

public:

ﻩ Base(int i){cout<〈i; }

ﻩ~Base() {}

};

classBase1:

 virtualpublicBase

{

public:

ﻩBase1(inti, intj=0):

 Base(j){cout 〈〈i; }

ﻩ  ~Base1(){}

};

classBase2:

 virtual public Base

public:

ﻩ  Base2(inti, intj=0) :

Base(j){cout〈〈i;}

ﻩ~Base2() {}

};

classDerived:

 publicBase2, public Base1

{

public:

ﻩDerived(int a,intb, intc, intd) :

mem1(a), mem2(b),Base1(c), 

                Base2(d),Base(a)

  {cout<

private:

ﻩBase2mem2;

Base1mem1;

};

voidmain(){Derived objD(1,2, 3,4);}

A)134122ﻩB)123412ﻩﻩC)14302012ﻩD)143212

18.下面程序的输出结果是( C )

#include

usingnamespace std;

classBase

 public:

ﻩvirtual voidf(){ cout〈〈 “f0+";}

 voidg(){cout<〈“g0+”; }

};

class Derived:

publicBase

 public:

ﻩ voidf(){ cout〈<“f+";}

ﻩ void g(){ cout<〈 “g+”; }

};

voidmain(){Derivedd;Base*p= &d;p->f(); p—〉g();}

A)f+g+ﻩﻩB)f0+g+ﻩC)f+g0+ﻩD)f0+g0+

19.下面程序的输出结果是( C )

#include

using namespacestd;

classSample

ﻩfriendlongfun(Samples) 

 if(s、x〈2)return1;

  return s、x*fun(Sample(s、x—1));

  }

public:

ﻩSample(long a){ x= a;}

 private:

ﻩ longx;

};

void main() 

{

intsum= 0;

for(inti=0;i<4; i++)

 {

sum += fun(Sample(i));

  cout<

}A)12ﻩB)16ﻩﻩC)10ﻩﻩD)34

20.以下程序的输出结果是:

(D )

#include 

usingnamespacestd;

intfun(char*s)

{char*p=s;

while(*p!

='\0’) p++;

return(p—s);

}

voidmain(){

cout〈<fun("abc”)〈<endl;

}

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

21.有如下程序段:

inti=1;

while(1)

{

i++;

if (i==10)break;

if(i%2==0) cout<〈’*’;

}

执行这个程序段输出字符*的个数是(C)

A、 10   B、3  C、4   D、5

22.下列关于虚基类的描述中,错误的是(C)

A、使用虚基类能够消除由多继承产生的二义性

B、ﻩ构造派生类对象时,虚基类的构造函数只被调用一次

C、ﻩ声明classB:

virtualpublicA讲明类B为虚基类

D、ﻩ建立派生类对象时,首先调用虚基类的构造函数

23.有下类定义

Class A{

Char*a;

Public:

A():

a(0){}

A(char*aa){//把aa所指字符串拷贝到a所指向的存储空间

A=___________________;

Strcpy(a,aa);

~A(){delete[] a;}

};

正确的选择是(A)

A、 newchar[strlen(aa)+1] B、char[strlen(aa)+1]

C、char[strlen(aa)] D、newchar[sizeof(aa)-1]

24.假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(X)。

A) x、a   B) x、a() C)x->GetValue()  D)x、GetValue( )

25.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(A)、

A)intAA:

:

a()B) intAA:

a()

C)AA:

:

a()  D) AA:

:

inta()

26.有如下程序:

#include〈iostream〉

usingnamespace std;

class Test{

public:

Test(){}

~Test(){cout〈<'#’;}

};

intmain(){

Testtemp[2],*pTemp[2];

return0;

执行这个程序输出星号(#)的个数为(B)、

A)1 B)2 C)3  D)4

27.有如下程序:

#include<iostream〉

usingnamespacestd;

classMyClass{

public:

MyClass(int i=0){cout<<1;}

MyClass(const MyClass&x){cout<〈2;}

MyClass&operator=(constMyClass&x){cout<〈3; return*this;}

~MyClass(){cout<〈4;}

};

intmain(){

MyClassobj1

(1),obj2(2),obj3(obj1);

obj1=obj2;

return0;

}运行时的输出结果是(A)。

A)1123444 B)11114444   C)121444D)11314444

28.有如下程序:

 

 #include〈iostream〉

usingnamespacestd;

classpoint

{

public:

staticint number;

 public:

point() {number++;}

~point(){number-—;}

};

 intpoint:

:

number=0;

voidmain()

{point*ptr;

   pointA,B;

{

point *ptr_point=new point[3];

 ptr=ptr_point;

}

pointC;

delete[] ptr;

cout〈〈point:

:

number;

程序结果为(A)

A)3 B)4 C)6D)7

29.友元运算符obj++被C++编译器解释为( D  )、

A、 operator++(obj)     B、 operator++(obj,0)

B、obj、operator++()      D、obj、operator++(0)

二、程序填空

1、用递归法求从1到n的立方与:

ﻩf

(1)=1   (n=1)

f(n)=f(n—1)+n3  (n>1)

#include

using namespace std;

intf(int);

int main(){

intn,s;

cout<<"inputthenumber n:

”;

cin>〉n;

s=   f(n)  ;

cout<〈"Theresultis"<

return0;

int f(intn){//递归法求立方与函数

if (   n==1 ) return 1;

 else return( f(n—1)+n*n*n);

}

3、请将下列程序补充完整,使得输出结果为“Destructor Derived Destructor Base"、

#include<iostream>

usingnamespacestd;

classBase

{

 public:

ﻩﻩvirtual ~Base()  {cout〈〈“Destructor Base”〈〈endl;}

};

classDerived :

public Base

{

public:

ﻩ ~Derived(){cout〈<“DestructorDerived"<〈 endl; }

};

void main()

{ 

 Base*pBase=newDerived;

   deletepBase  ;

三、阅读程序,写出运行结果

1、

#include<iostream〉

#include<cstring>

usingnamespace std; 

classCD

ﻩ char name[20];

ﻩ intnumber;

public:

ﻩ  voidInit(char*aa, intbb)

 {

ﻩ     strcpy(name,aa);

ﻩ  number=bb;

  }

ﻩchar* Getname(){returnname;}

ﻩ  int Getnumber(){return number;}

ﻩ voidOutput(){cout〈〈 name<<' '<

};

CDdx;

voidmain()

ﻩCDdy;

dx、Init(”歌唱祖国",30);

ﻩdy、Init("义勇军进行曲”,3*dx、Getnumber()+5);

dx、Output();

dy、Output();

歌唱祖国30

义勇军进行曲 95

2、#include 〈iostream>

 using namespacestd;

int f(inta){

 return++a;

 intg(int&a){

 return++a;

}

 voidmain(){

 int m=0,n=0;

m+=f(g(m));

  n+=f(f(n));

 cout<<"m=”〈<m<〈endl;

 cout〈<”n="〈<n<〈endl;

}

3、#include<iostream>

usingnamespacestd;

class Demo

{

public:

ﻩ  Demo(){cout〈〈"defaultconstructor\n”;}

ﻩ   Demo(constDemo&x){cout<<”copyconstructor\n";}

};

Demo userCode(Demo b){Democ(b);return c;}

voidmain()

Demoa,d;

ﻩ cout〈<"calling userCode()\n";

  d=userCode(a);

}

执行上面的程序的过程中,构造函数Demo()与Demo(const Demo&x)被调用的次数分不是多少次?

五、编写程序

1、编写函数计算y=1!

+2!

+3!

、、、n!

n作为参数传递,在主函数调用该函数并输出结果。

2、编写函数找出二维数组(5*4)中元素的最大值与最小值,并返回其最大值与最小值、测试结果、

3、编写一个三角形类,有计算面积,显示面积的功能等,并测试。

要求有参数的构造函数及复制构造函数

^^下面关于类概念的描述中,(  D)是错误的、

A)类是抽象数据类型的实现B)类是具有共同行为的若干对象的统一描述体

C)类是创建对象的样板   D)类就是C语言中的结构体类型

^^D

^^面向对象程序设计思想的主要特征中不包括 ( D)。

A)封装性 B)多态性 C)继承性 D)功能分解,逐步求精

^^D

~~01|11|1|1

^^在C++中,函数原型不能标识() 、

A)函数的返回类型 B)函数参数的个数C)函数参数类型 D)函数的功能

^^D

~~01|11|1|1

^^有关析构函数的讲法不正确的是()、

A)析构函数有且仅有一个 B)析构函数与构造函数一样能够有形参

C) 析构函数的功能是用来释放一个对象 D) 析构函数无任何函数类型

^^B

~~01|11|2|1

^^已知X类、则当程序执行到语句,X array[3];时,调用了(D )次构造函数、

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

^^D

~~01|13|1|1

^^类定义的内容允许被其她对象无限制地存取是( C)。

A)private部分B)protected部分C)public部分D)以上都不对

^^C

~~01|01|2|1

^^关于new运算符的下列描述中,(  D)是错误的、。

A)它能够用来动态创建对象与对象数组

B)使用它创建对象或对象数组,能够使用运算符DELETE删除

C) 使用它创建对象时要调用构造函数

D) 使用它调用对象数组时不许指定初始值

^^D

~~01|01|2|1

^^关于下面程序段,表达式正确的是( B  )。

classBase{public:

intb;};

classBase1:

public base{};

classBase2:

public base{};

classDerived:

publicbase1,public base2{public:

int fun();};

Derivedd;

A)d、Base1:

:

b   B)d、Base:

:

b  C) d、b  D) d、Base :

:

fun()

^^B

~~01|12|1|1

^^能够用p、a的形式访问派生类对象p的基类成员a其中a是(D )。

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

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

^^D

^^下列关于C++类的描述中错误的是 (C )。

A)类与类之间能够通过一些手段进行通信与联络  

B)类用于描述事物的属性与对事物的操作

C)类与类之间必须是平等的关系,

D)类与类之间能够通过封装而具有明确的独立性

^^C

~~01|12|1|1

^^下列描述中哪个是正确的(B )。

  A)私有派生的子类无法访问父类的成员

   B)类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的

    C)私有派生类不能作为基类派生子类

   D)私有派生类的所有子孙类将无法接着继承该类的成员

^^B

~~01|11|1|1

^^下列关于构造函数讲法不正确的是(  )。

 A)构造函数必须与类同名  B)构造函数能够省略不写

C)构造函数必须有返回值  D)在构造函数中能够对类中的成员进行初始化

^^C

~~01|13|1|1

^^假如友元函数重载一个运算符时,其参数表中没有任何参数则讲明该运算符是(D )。

 A)一元运算符       B)二元运算符

C)选项A)与选项B)都估计     D)重载错误

^^D

~~01|14|1|1

^^在重载一个运算符时,假如其参数表中有一个参数,则讲明该运算符是(D )。

 A)一元成员运算符        B)二元成员运算符

 C)一元友元运算符             D)选项B)与选项C)都估计

^^D

~~01|12|1|1

^^一个类的友元函数能够访问该类的( D   )。

 A)私有成员  B)保护成员 C)公有成员D)所有成员

^^D

^^下列关于类定义的讲法中,正确的是(A )、

A)类定义中包括数据成员与函数成员的声明

B)类成员的缺省访问权限是保护的

C)数据成员必须被声明为私有的 D)成员函数只能在类体外进行定义

^^A

~~01|14|1|1

^^通过运算符重载,能够改变运算符原有的( A )、

A)操作数类型 B)操作数个数  C)优先级 D)结合性

^^A

~~01|14|1|1

^^在C++语言中,数据封装要解决的问题是( D )、

A)数据的规范化B)便于数据转换 C)幸免数据丢失 

D)防止不同模块之间数据的非法访问

^^D

~~01|13|1|1

^^对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( D  )、

A)公有类型  B)私有类型 C)保护类型 D)友元类型

^^D

~~01|11|1|1

^^在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其她内部管理操作的函数是(C)。

A)友元函数   B)虚函数   C)构造函数 D) 析构函数

^^C

~~01|11|1|1

^^类的析构函数的作用是( D)、

A)一般成员函数的初始化 B

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

当前位置:首页 > 自然科学 > 数学

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

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