C习题.docx
《C习题.docx》由会员分享,可在线阅读,更多相关《C习题.docx(63页珍藏版)》请在冰点文库上搜索。
C习题
一、单项选择题
1.有以下类的说明,请指出错误的地方_。
classCSample
{
inta=2.5;(A)
Csample();(B)
public:
CSample(intval);(C)
-CSample();(D)
};
答:
A
分析:
类的数据成员不能直接赋初值。
2.在C+十中,可以把具有相同内部存储结构和相同操作的对象看成属于同一类。
在指定一个类后,往往把属于这个类的对象称为类的①。
从语言角度来说,类是一种数据类型,而②是具有这种类型的变量。
A.实例B.实物C.特征D.对象
答:
①A②D
3.有关类的说法不正确的是。
A.类是一种用户自定义的数据类型
B.只有类中的成员函数才能存取类中的私有数据
C.在类中,如果不作特别说明,所有的数据均为私有类型
D.在类中,如果不作特别说明,所有的成员函数均为公有类型
答:
D
4.有关类和对象的说法下列不正确的有。
A.对象是类的一个实例
B.任何一个对象只能属于一个具体的类
C.一个类只能有一个对象
D.类与对象的关系和数据类型和变量的关系相似
答:
C
5.有关构造函数的说法不正确的是。
A.构造函数名字和类的名字一样
B.构造函数在说明类变量时自动执行
C.构造函数无任何函数类型
D.构造函数有且只有一个
答:
D
6.有关析构函数的说法不正确的是。
A.析构函数有且只有一个
B.析构函数无任何函数类型
C.析构函数和构造。
数一样可以有形参
D.析构函数的作用是在对象被撤消时收回先前分配的内存空间
答:
C
分析:
构造函数可以有形参,但析构函数不能有形参。
7.在类的定义体外定义成员函数时,需要在函数名前加上
(1),而在域外使用成员函数时,需要在成员名外加上②的名字。
A类标记B.类域标记C.类对象D.域运算符
答:
①B②C
8.若函数是在运行时被激活的,则该函数称为。
A内联函数B.非内联函数C.成员函数D.静态成员函数
答:
B
9.在类的定义形式中,数据成员、成员函数和组成了类定义体。
A.成员的访问控制信息B.公有消息C.私有消息
D.保护消息
答:
A
10.的功能是对对象进行初始化。
A.析构函数B.数据成员*胸造函数D.静态成员函数
答:
C
11.只能访问静态成员变量,静态成员函数和类以外的函数和数据不能访问类中的非静态成员变量。
A静态函数B.虚函数C.构造函数D.析构函数
答:
A
12.若却queue是类,aQueue是它的一个对象,pl是类对象aQueue的一个指针,那么类对象aQueue可以通过①来访问类的成员,类对象aQueue的指针p1可以通过②来访问类的成员。
A.:
:
B..C.;D.->
答:
①B②D
13.局部变量可以隐藏全局变量,那么在有同名全局变量和局部变量的情形时,可以用。
提供对全局变量的访问。
A域运算符B类运算符C.重载D引用
答:
A
14.在下列关键宇中,用以说明类中公有成员的是。
A.publicB.privateC.protectedD.friend
答:
A
15.下列的各类函数中,不是类的成员函数。
A构造函数B.析构函数C.友元函数D.拷贝初始化构造函数
答:
C
16.不是构造函数的特征。
A.构造函数的函数名与类名相同
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数必须指定类型说明
答:
D
17.是析构函数的特征。
A.一个类中只能定义一个析构函数
B.析构函数名与类名不同
C.析构函数的定义只能在类体内
D.析构函数可以有一个或多个参数
答:
A
18.通常拷贝初始化构造函数的参数是、。
A.某个对象名
B某个对象的成员名
C.某个对象的引用名
D.某个对象的指针名
答:
C
19.关于成员函数特征的下述描述中,是错误的。
A.成员函数一定是内联函数
B.成员函数可以重载
C.成员函数可以设置参数的默认值
D.成员函数可以是静态的
答:
A
分析:
成员函数可以是时联函数,也可以是非内联函数。
20.下述静态数据成员的特性中,是错误的。
A.说明静态数据成员时前边要加修饰符StatiC
B.静态数据成员要在类体外进行初始化
C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
D.静态数据成员不是所有对象所共用的
答:
D
21.友元的作用。
。
A.提高程序的运用效率
B.加强类的封装性
C.实现数据的隐藏性
D.增加成员函数的种类
答:
A
22.类模板的使用实际上是将类模板实例化成一个具体的。
A.类B.对象C.函数D.模板类
答:
A
23.一个允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。
A.函数模板B.模板函数C.类模板D.模板类
答:
C
24.模板是实现类属机制的一种l具,其功能非常强大,它既允许用户构造类属函数,即①;也允许用户构造类属类,即②。
A.模板函数B.函数模板C.模板类D.类模板
答:
①A②C
二、填空题
1.任何类中允许有三种类型的数据、、。
答:
publicprivateprotected
2.类中的数据和成员函数默认类型为。
答:
私有
3.结构中p玫据和成员函数默认类型为。
答:
公有
4.在类内部定义的数据不能被不属于该类的函数来存取,定义为的数据、函数则可以在类外部进行存取。
答:
pritvalepublic
5.是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。
答:
构造函数
6.一个类有个析构函数。
答:
l
7.静态数据成员在定义或说明时前面要加上关键字。
答:
static
8.成员函数的实现中不能直接引用类中说明的非静态成员。
答:
静态
9.定义在类内部的函数为类默认状态,在类外部每次调用该函数时,定义的函数代码会在调用函数位置展开。
答:
内联函数
10.以下程序运行的结果为、。
#Include”iostream.h”
classCSample
{
private:
inti;
staticintk;
public:
CSample();
voidDisplay();
};
CSample:
:
CSample()
{
i=0;
k++;
}
voidCsample:
:
Display()
{
cout<<”i=”<
}
intcsample:
:
k=0;
voidmain()
{
CSamplea,b;
a.Display();
b.Display();
}
答:
i=0,k=2
i=0,k=2
11.以下程序运行的结果为_。
#Include”iostream.h”
classCSample
{
inti;
public:
CSample();
voidDisplay();
~CSample();
};
CSarnple:
:
CSample()
{
cout<<”Constructor”<<”,”;
i=0;
};
voidCSample:
:
~Display()
{
cout<<”i=”<
}
CSample:
:
~CSample()
{
cout<<”Destructor”<}
voidmain()
{
CSamplea;
a.Display();
}
答:
Constructor,i=0,Destructor
12.以下程序运行的结果为_。
#include”stream.h”
classCSample
{
inti;
public:
CSample();
CSample(intval);
voidDisplay();
~CSample();
};
CSample:
:
CSample()
{
cout<<”Constructor”<}
CSample:
:
CSample(intval)
{
cout<<”Constructor”<i=val;
}
voidCSample:
:
Display()
{
cout<<”i=”<
}
CSample:
:
~CSample()
{
cout<<”Destructor”<}
voidmain()
{
CSamplea,b(10);
a.Display();
b.Display();
}
答:
Constructor1
Constructor2
i=0
i=10
Destructor
Destructor
13.以下程序运行的结果为_。
#include”iostream.h”
C1assCCouter
{
intvalue;
public:
CCounter();
CCounter(intval);
~CCounter();
};
classCExample
{
intvalue;
public:
CCountercar;
CExample();
cexample(intval);
voidDISplay();
~CExample();
};
CCounter:
:
CCounter()
{
cout<<”ccounterConstructorl”<value=0;
}
CCounter:
:
CCounter(intval){
cout<<”CCounterconstructor2”<value=val;
}
CCounter:
:
~CCounter()
{
cout<<”CCounterDestructor”<}
CExarnple:
:
CExample()
{
cout<<”CExampleconstructorl”<value=0;
}
CExample:
:
CExample(intval)
{
cout<<”CExamPleConstructorl”<value=val;
}
voidCExample:
:
Display()
{
cout<<”value=”<}
CExample:
:
~CExample()
{
cout<<”CExampleDestructor”<}
voidmain()
{
CExamplee
(2);
e.Display();
}
答:
ccounterConstructor2
CExampleConstructor2
Value=2;
CExampleDestmctor
CCoullterDestructor
14.以下程序运行的结果为。
#include<iostream.h>
ClassB
{
public:
B(){};
B(inti,intj);
voidPrintb();
private:
inta,b;
};
classA
{
public:
A(){};
A(inti,intj);
voidprinta();
private:
Bc;
};
A:
:
A(inti,intD):
c(i,j)
{};
voidA:
:
printa()
{
c.printb();
}
B:
:
B(inti,intj)
{
a=i;b=j;
}
voidB:
:
printb()
{
cout<<”a=”<}
voidmain()
{
Am(7’8);
m.printa();
}
答:
a=7,b=8
15.阅读以下程序后填空。
#include<iostream.h>
classqueue
{
intq[100];//存放队列中的各个元素
inthead,rear;//head和rear分别为队头、队尾
public:
queue();
voidqgut(inti);
intqget();
};
queue:
:
queue()//构造函数
{
head=rear=0;
cout<<”queueinitialized\n”;
}
voidqueue:
:
qput(inti)
{
if(head==100)
{
cout<<”queueisfull\n”;
return;
}
head十十;
q[head]=i;
}
intqueue:
:
qget()
{
if(rear==head)
{
cout<<”quequeisempty\n”;
return0;
}
rear++;
returnq[rear];
}
voidmain《)
{
queuea,b;
a·qPut(10);
b.qput(20);
a·qput(20);
b.qPut(19);
coutt<coutt<coutt<coutt<}
操作1输出的结果是①,操作2输出的结果是②,操作3输出的结果是③,操作4输出的结果是④。
答:
①10②20③20④19
二、类和对象
一、单项选择题
l.已知一个类A,是指向类A成员函数的指针。
假设类有三个公有成员:
voidfl(int),voidf2(int)和inta。
A.A*p
B.intA:
:
*pc。
&A:
a
C.voidA:
:
*pa
D.A*pp
答:
C
2.运算符一>*的功能是。
A.用来表示指向对象指针对指向类成员指针的操作
B用来表示对象对指向类成员指针的操作
C月来表示指向对象指针对类成员的操作
D.用来表示对象类成员的操作
答:
A
3.己知fl(int)是类A的公有成员函数,p是指向成员函数fl()的指针,采用是正确的。
A.p=f1
B.p=a:
:
f1*
C.p=a:
:
f1*()
D.P=f1()
答:
B
4.已知:
p是一个指向类A数据成员m的指针,AI是类A的一个对象。
如果要给m赋值为5,是正确的。
A.A1.p=5
B.A1->p=5
C.A1.*p=5
D.*A1.p=5
答:
C
5.己知:
类A中一个成员函数说明如下:
voidSet(A&a);其中,A&a的含义是。
A.指向类A的指针为a
B.将a的地址值赋给变量Set
C.a是类A的对象引用,用来作函数Set()的形参
D.变量A与a按位相与作为函数Set()的参数
答:
C
6.下列关于对象数组的描述中,是错误的。
A.对象数组的下标是从0开始的
B.对象数组的数组名是一个常量指针
C.对象数组的每个元素是同一个类的对象
D.对象数组只能赋初值,而不能在定义后赋值
答:
D
7,下列定义中,是定义指向数组的指针p.
A.int*p[5]
B.int(*p)[5]
C.(int*)p[5]
D.int*p[]
答:
B
8.下列说明中constchar*ptr;Ptr应该是、。
A指向字符常量的指针
B.指向字符的常量指针
C.指向字符串常量的指针
D.指向字符串的常量指针
答:
C
9.已知:
Print()函数是一个类的常成员函数,它无返回值,下列表示中,是正确的。
A.voidprit()const
B.constvoidprint()
C.voidconstprint()
D.voidpfint(const)
答:
A
10.关于new运算符的下列描述中,是错误的。
A它可以用来动态创建对象和对象数组
B.使用它创建的对象或对象数组,可以使用运算符delete删除
C.使用它创建对象时要调用构造函数
D.使用它创建对象数组时必须指定初始值
答:
D
11.关于delete运算符的下列描述中,是错误的。
A.它必须用于new返回的指针
B.它也适用于空指针
C.对一个指针可以使用多次该运算符
D.指针名前只用一对方括号符,不管所删除数组的维数
答:
C
二、空题
1.以下程序的执行结果是。
#Include”iostream.h”
classSample
{
intX;
public:
voidsetx(inti){x—i;}
intputx(){returnx;}
};
Voidmain()
{
Sample*p;
SampleA[3];
A[0].setx(5);
A[l].setx(6);
A[2].Setx(7);
For(intj=0;j<3;j++)
{
p=&A[j];
cout<
}
cout<}
#:
5,6,7
2.以下程序的执行结果是,。
#include<iostream.h>
classSample
{
intX;
public:
voidsetx(inti){x=i;}
intputx(){returnx;}
};
Voidmain()
{
sample*p;
SampleA[3];
A[0].setx(5);
A[l].setx(6);
A[2].Setx(7);
P=&A[0];
for(intj=0;j<3;j++)
cout<
cout<}
答:
5,6,7
3.以下程序的执行结果是。
#include<iostream.h>
classbox
{
intlength;
intWidth;
box*anotherbox;
public:
box();
voidSet(intnewlength,intnewwdth);
intgetarea();
voidpointatnext(box*wheretopoint);
box*getnext();
};
bOX:
:
bOX()
{
length=8;width=8;anotherbOX=NULL;
}
voidbox:
:
set(intnewlength,intnewwidth)
{
length=newlength;width=newwidth;
}
intbox:
:
getarea()
{
returnlenqth*width;
}
voidbox:
:
pointatnext(box*Wheretopoint)
{
anotherbox=wheretopoint;
}
box*box:
:
qetnext()
{
returnanotherbox;
}
voidmain()
{
boxsmall,*medium,large;
box*boxpointer;
small.set(5,7);
large.set(15,20);
cout<<”小方框的面积是:
”<
cout<<“中方框的面积是:
”<cout<<”大方框的面积是:
”<medium.Pointatnext(&large);
boxpointer=&small
boxpointer=boxpointer->getnext();
cout<<”指向的方框的血积是:
”<}
答:
小方框的面积是:
35
中方框的面积是:
64
大方框的面积是:
300
指向的方框的面积是为64
4.以下程序的执行结果是。
#include<iostream.h>
CldSSB
{
intx,y;
publiC:
B(){x=y=0;cout<<”Constructorl”<B(inti){X=i;y=0;cout<<”constructor2”<B(inti,intj){x=i;y=j;cout<<”Constructor3”<~B(){cout<<”Destructor”<voidprint()
{
cout<<”x=”<}
};
voidmain()
{
b*ptr;
ptr=newB[3];
Ptr[0]=B();
ptr[l]=B(5);
Ptr[2]=B(2,3);
For(inti=0;i<3;i十十)
ptr[i].print();
delete[]ptr;
}
答:
Constructorl
Constructorl
Constructorl
Constructorl
Destructor
Constructor2
Destructor
Constructor3
Destructor
X=0,y=0
x=5,y=0
X=2,y=3
Destructor
Destructor
Destructor
6.以下程序的执行结果是。
#include<iostream.h>
classA
{
public:
A(inti=0){m=i;cout<<”constructor”<voidset(inti){m=i;}
voidprint()const{cout<~A()