c++练习题带答案.docx
《c++练习题带答案.docx》由会员分享,可在线阅读,更多相关《c++练习题带答案.docx(32页珍藏版)》请在冰豆网上搜索。
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