A.3
B.32
C.24
D.127
10、以下对字符数组initarray进行初始化的语句,不正确的是()。
A.charinitarray[]='word\0';
B.charinitarray[]={'w','o','r','d','\0'};
C.charinitarray[]={"word\0"};
D.charinitarray[]="word\0";
11、下面结构体成员说明中,哪一条语句是错误的。
structEmployee{
charidno[20];//A
Employee*manager;//B
Employeehead;//C
Employee&administrator;//D
};
12、执行下面程序代码后的输出结果是()。
#include
voidmain()
{char*u="1243567",*s;
int*v;
v=(int*)u;
v++;
s=(char*)v;
cout<
A.4567
B.567
C.67
D.34567
13、下述定义中,()是定义指向二维int数组的行指针。
A.int(*p)[5]
B.int*p[]
C.int*p[5]
D.(int*)p[5]
14、若有如下函数说明和变量定义语句
voidfun(floatarray[10],float&s);
floatt[10],*pt=t,n;
则对函数fun的调用语句正确的是()。
A.fun(pt[10],n);
B.fun(pt,n);
C.fun(*pt,n);
D.fun(pt,&n);
15、假设类MyTestClass的定义如下:
classMyTestClass
{public:
MyTestClass(){value=0;}
voidSetValue(inti){value=i;}
private:
intvalue;};
则当执行语句MyTestClass*p,test;p=&test;后,以下描述正确的是()。
A.语句p=&test;是把对象test赋值给指针变量p
B.语句MyTestClass*p,test;的执行,会调用两次MyTestClass类的构造函数
C.对语句p.SetValue(5);的调用不会产生错误
D.对语句p->SetValue(5);的调用不会产生错误
16、以下关于类的构造函数和析构函数的描述中,正确的是()。
A.类的构造函数和析构函数都不能重载
B.类的构造函数和析构函数都能重载
C.若类中没有定义任何构造函数,则编译器将提供一个缺省构造函数,函数体中是空语句
D.当一个对象被撤销时,系统不会自动调用并执行相应的析构函数
17、假设对象b1和b2都是类T的对象,下面的语句()不会执行类T的拷贝构造函数。
A.T&b1=b2;
B.fun(b1,2);//函数fun的原型说明为voidfun(Tx,inta);
C.Tb1=b2;
D.returnb2;
18、关于继承方式,基类的()在私有继承时在派生类中为私有成员,在公有和保护继承时在派生类中为保护成员。
A.私有成员
B.保护成员
C.私有数据成员
D.公有成员
19、当多继承派生类的构造函数被调用以构造对象时,最先执行()的函数体。
A.非虚基类的构造函数
B.虚基类的构造函数
C.派生类中成员对象所属类的构造函数
D.派生类自己的构造函数
20、对于友元函数,以下说法错误的是()。
A.一个类的友元函数中可以访问该类的保护成员,但不能访问私有成员。
B.一个类的友元函数可以是类外的某个函数。
C.一个类的友元函数可以是另一个类中的某个成员函数。
D.一个类的友元函数可以是另一个类中的所有成员函数。
二、读程序,写出输出结果(12分)
1、(2分)
#include
voidadd(int*x,inti,intn)
{
if(n<=i)add(x,i,2*n);
*x+=n++;
cout<<*x<<'\t'<}
voidmain()
{
1213
187
214
21
intx=0;
add(&x,10,3);
cout<}
2、(2分)
#include
intf1(int*px){
staticintcount=0;
*px+=10;
count+=*px;
returncount;
}
voidf2(int&xx)
{xx+=10;}
voidmain(void)
{intx=0;
cout<<"x="<for(inti=0;i<3;i++)
X=0
103060
X=30
X=40
cout<cout<cout<<"x="<f2(x);
cout<<"x="<}
3、(4分)
#include
classBase
{inti;
public:
Base(intn){cout<<"调用Base类的构造函数"<~Base(){cout<<"调用Base类的析构函数"<voidshowBasei(){cout<
intGetBasei(){returni;}
};
classDerived:
publicBase
{intj;
Baseaa;
public:
Derived(intn,intm,intp):
Base(m),aa(p){
cout<<"调用Derived类的构造函数"<j=n;
}
~Derived(){cout<<"调用Derived类的析构函数"<voidshow()
{
showBasei();
cout<调用Base类的构造函数
调用Base类的构造函数
调用Derived类的构造函数
11,6,17
调用Derived类的析构函数
调用Base类的析构函数
调用Base类的析构函数
};
voidmain()
{Derivedobj(6,10,16);
obj.show();
}
4、(4分)
#include
classA{
public:
A(){cout<<"调用A类的构造函数"<virtual~A(){cout<<"调用A类的析构函数"<virtualvoidfun(){cout<<"调用A类的函数fun"<voidg(){fun();}};
classB:
publicA{
public:
B(){fun();cout<<"调用B类的构造函数"<~B(){cout<<"调用B类的析构函数"<classC:
publicB{
调用A类的构造函数
调用A类的函数fun
调用B类的构造函数
调用C类的构造函数
调用C类的函数fun
调用C类的析构函数
调用B类的析构函数
调用A类的析构函数
public:
C(){cout<<"调用C类的构造函数"<~C(){cout<<"调用C类的析构函数"<voidfun(){cout<<"调用C类的函数fun"<voidmain()
{A*a=newC;
a->g();
deletea;
}
三、填程序,在空格位置填入合适的代码(每空2分,共8分)
对于一个int单向链表结构
structnode{
intdata;
node*next;
};
下面一个函数从一个int数组来创建一个int单向链表,按数组中各元素次序建立一个链表,并保持相同次序。
形参a是数组名,形参n是数组a中元素个数,返回链表的头指针。
Node*create(inta[],intn){
Node*p1,*p2,*head=NULL;
for(inti=0;i_______________;
p1->data=a[i];
p1->next=NULL;
if(______________)
head=p1;
else
_______________;
p2=p1;
}
_____________;
}
p1=newNode;
head==NULL
p2->next=p1;
returnhead;
四、写程序,根据要求编写程序(20分)
1、输入任何一个字符串,计算并显示字符串中各个字符及其出现次数。
(10分)
例如,输入:
doorkeeper,输出:
d:
1
o:
2
r:
2
k:
1
e:
3
p:
1
各字符显示次序与串中首次出现次序一样。
按要求实现下面函数:
1.1:
intdupCount(constchara[],charb[],intc[])(7分)
形参a是一个输入字符串。
形参b保存了各个不重复的字符。
形参c保存了各字符对应的出现次数,即c[i]表示了字符b[i]的出现次数。
函数返回不重复的字符个数,上面例子返回6。
1.2:
voidmain()函数,输入一个字符串,调用上面函数得到结果,最后显示结果(3分)。
2、PC类(个人计算机)和NoteBook类(笔记本计算机)。
(10分)
已有一个Date类表示日期:
classDate{
intyear,month,day;
public:
Date(inty,intm,intd);
voidprint();//打印年-月-日
};
建立一个PC类表示个人计算机。
classPC{
charbrand[40];//品牌及型号
DatebuyDate;//购买日期
intcost;//价格,单位为元
public:
PC(char*brand,intbuyy,intbuym,intbuyd,intcost);
virtualvoidshow();
};
要求:
2.1实现构造函数PC(char*brand,intbuyy,intbuym,intbuyd,intcost);
(2分)
2.2实现成员函数voidshow();要求显示所有属性。
(2分)
2.3建立一个NoteBook类表示笔记本计算机,除了计算机的属性之外,还要求描述电池容量:
intbatteryCapacity;//电池容量,单位为毫安时
给出类的设计。
注意利用已有的类。
在类的设计中要求
1)实现NoteBook类的一个构造函数:
NoteBook(char*brand,intbuyy,intbuym,intbuyd,intcost,intbattCap)
2)实现NoteBook类的一个成员函数:
voidshow();要求显示所有属性。
(6分)
4.1参考答案
#include
#include
intdupCount(constchara[],charb[],intc[]){
intk=0;
for(inti=0;ifor(intj=0;jif(a[i]==b[j])
break;
if(j==k){
b[k]=a[i];
c[k]=1;
for(intm=i+1;mif(a[i]==a[m])
c[k]++;
k++;
}
}
returnk;
}
voidmain(){
charstr[200];
cout<<"输入一个英文字符串,用回车结束:
";
cin.getline(str,200);
charch[100];
intcc[100];
intc=dupCount(str,ch,cc);
for(inti=0;icout<"<}
4.2参考答案
#include
#include
classDate{
intyear,month,day;
public:
Date(inty,intm,intd){
year=y;
month=m;
day=d;
}
voidprint(){//打印年-月-日
cout<}
};
classPC{
charbrand[40];//品牌及型号
DatebuyDate;//购买日期
intcost;//价格,单位为元
public:
PC(char*brand,intbuyy,intbuym,intbuyd,intcost)
:
buyDate(buyy,buym,buyd){
strcpy(this->brand,brand);
this->cost=cost;
}
virtualvoidshow(){
cout<";
buyDate.print();
cout<<";价格:
"<}
};
classNoteBook:
publicPC{
intbatteryCapacity;//电池容量,单位为毫安时
public:
NoteBook(char*brand,intbuyy,intbuym,intbuyd,intcost,intbattCap)
:
PC(brand,buyy,buym,buyd,cost){
batteryCapacity=battCap;
}
voidshow(){
PC:
:
show();
cout<<";电池容量:
"<}
};
voidmain(){
NoteBooknb1("Dell",2010,3,4,5600,4500);
nb1.show();
}
一选择题(每题2分,共40分)
1~10CDACBADCDBA
11~20CBABDCABBA
4、(4分)
调用A类的构造函数
调用A类的函数fun
调用B类的构造函数
调用C类的构造函数
调用C类的函数fun
调用C类的析构函数
调用B类的析构函数
调用A类的析构函数
3、(4分)
调用Base类的构造函数
调用Base类的构造函数
调用Derived类的构造函数
11,6,17
调用Derived类的析构函数
调用Base类的析构函数
调用Base类的析构函数
二读程题(共12分)
1(2分)
1213
187
214
21
2、(2分)
X=0
103060
X=30
X=40
三填程题(每空2分,共8分)允许多种表示
1、p1=newNode;或者p1=newnode;
2、head==NULL或者head==0或者!
head
3、p2->next=p1;
4、returnhead;或者return(head);
四编程题(共20分)允许不同的实现方式
1(10分)
#include
#include
intdupCount(constchara[],charb[],intc[]){
intk=0;
for(inti=0;ifor(intj=0;jif(a[i]==b[j])
break;
if(j==k){
b[k]=a[i];
c[k++]=1;
}else
c[j]++;
}
returnk;
}
(7分)
voidmain(){
charstr[200];
cout<<"输入一个英文字符串,用回车结束:
";
cin.getline(str,200);
charch[100];
intcc[100];
intc=dupCount(str,ch,cc);
for(inti=0;icout<"<}
(3分)
2(10分)允许不同的实现方式
classPC{
charbrand[40];//品牌及型号
DatebuyDate;//购买日期
intcost;//价格,单位为元
public:
PC(char*brand,intbuyy,intbuym,intbuyd,intcost)
:
buyDate(buyy,buym,buyd){
strcpy(this->brand,brand);
this->cost=cost;
}(2分)
virtualvoidshow(){
cout<";
buyDate.print();
cout<<";价格:
"<}(2分)
};
classNoteBook:
publicPC{(以下6分)
intbatteryCapacity;//电池容量,单位为毫安时
public:
NoteBook(char*brand