计算机专业面向对象程序设计试1.docx
《计算机专业面向对象程序设计试1.docx》由会员分享,可在线阅读,更多相关《计算机专业面向对象程序设计试1.docx(9页珍藏版)》请在冰豆网上搜索。
计算机专业面向对象程序设计试1
计算机专业面向对象程序设计试题
一、单项选择题(每小题1分,共20分)
1.C++源程序文件的缺省扩展名为(A)。
A.cpp B.exe C.obj D.lik
2.x>0||y==5的相反表达式为(B)。
A.x<=0||y!
=5 B.x<=0&&y!
=5
C.x>0||y!
=5 D.x>0&&y==5
3.在下面的字符数组定义中,(D)的语法错误。
A.chara[20]=”abcdefg”; B.chara[]=”x+y=55.”;
C.chara[15]; D.chara[10]=’5’;
4.以下正确的函数原型语句是(A)。
A.doublefun(intx,inty); B.doublefun(intx;inty);
C.doublefun(intx=5,inty); D.doublefun(intx,y);
5.软件产品可被全部或部分重用于新的应用的能力叫做软件的(B)。
A.可维护性 B.可复用性
C.兼容性 D.正确性;
6.在多文件结构的程序中,通常把含有main()函数的文件称为(A)。
A.主文件 B.实现文件 C.程序文件 D.头文件
7.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队为空,则进行插入时必须把新的地址赋给(C)。
A.elemHead B.elemTail
C.elemHead和elemTail D.elemHead或elemTail
8.假定AB为一个类,则执行“ABa,b
(2),c[3],*p=&a;”语句时共调用该类无参构造函数的次数为(4)次。
A.5 B.6 C.3 D.4
9.引入友元的主要目的是为了(C)。
A.增强数据的安全性 B.提高程序的可靠性
C.提高程序的效率的灵活性 D.保证类的封装性
10.假定类B是在类A的基础上扩充而得到的,那么就称(B)。
A.类A为基类或父类,类B为超类或子类
B.类A为基类、父类或超类,类B为派生类或子类
C.类A为派生类,类B为基类
D.类A为派生类或子类,类B为基类、父类或超类
二、填空题(每空2分,共20分)
1.由函数原型语句“intfun1(void);”可知,该函数的返回类型为整型,该函数带有0个参数。
2.假定x是一个逻辑量,则x||false的值与x的值 相同 。
3.作为语句桔标号使用的C++保留字case和default只能用于switch 语句的定义体中。
4.对一个二维字符数组a进行初始化的数据表为{“123”,”456”,”789”},则a[1]元素对应的字符串为456。
5.NULL是一个符号常量,通常作为空指针值,它的具体值为‘\0’。
6.内联函数的定义模块与所属的类模块必须放在同一个文件中。
7.一个类的构造函数实现对该类对象进行初始化的功能。
8.假定为类AB定义了一个构造函数“AB(intaa=0):
a(aa){}”,则定义该类的对象时,可以有2种不同的定义格式。
9.重载抽取运算符>>时,其运算符函数的返回值类型应当是istream&。
10.若多个基类及其派生类中都定义了同名的函数成员,要访问一个类中该成员函数时,就需要在函数名前加上类名和类区分符:
:
。
三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序后面的标号处。
(每小题5分,共20分)
1.下面程序算出
的值。
#include
voidmain()
{
doublex,p1=1,p2=1,s=0;
inti,j=1;
cout<<"输入x的值:
";
cin>>x;
for(i=1; ⑴ ;i++){
p1*=x;
p2*= ⑵ ;
s+=j*p1/p2;
j= ⑶;
}
cout<
}
⑴i<=10
⑵i
⑶-j
2.假定结点类型的定义为“structNODE{intdata;NODE*next;};”,下面算法是依次输出以L为表头指针的单链表中各结点的值。
voidff(NODE*L)
{
for(⑴;p!
=NULL;⑵)
cout<<⑶<<'';
cout<}
⑴NODE*p=L
⑵p=p->next
⑶p->data
3.一个带类的程序如下:
classA{
inta,b;
public:
A(intaa=0,intbb=0):
⑴{}//分别用bb和bb初始化a和b
};
voidmain(){
⑵;//定义类A的对象x并用5初始化,定义y并用x初始化
⑶;//定义p指针,指向对象x
}
⑴a(aa),b(bb)
⑵Ax(5),y(x)
⑶A*p=&x
4.一个带类的程序如下:
classA{
inta,b;
public:
⑴ //定义构造函数,使参数aa和bb的默认值为0,
//在函数体中用aa初始化a,用bb初始化b
};
voidmain(){
A*p1,*p2;
⑵ ;//调用无参构造函数生成由p1指向的动态对象
⑶ ;//调用带参构造函数生成由p2指向的动态对象,
//使a和b成员分别被初始化为4和5
}
⑴A(intaa=0,intbb=0){a=aa;b=bb;}
⑵p1=newA
⑶p2=newA(4,5)
四、理解问答题,写出前三小题的程序运行结果和指出后两小题的程序(或函数)所能实现的功能。
(每小题6分,共30分)
1.#include
constintM=20;
voidmain()
{
intc2,c3,c5;
c2=c3=c5=0;
for(inti=1;i if(i%2==0)c2++;
if(i%3==0)c3++;
if(i%5==0)c5++;
}
cout<}
运行结果:
963
2.#include
#include
classCD{
char*a;
intb;
public:
voidInit(char*aa,intbb)
{
a=newchar[strlen(aa)+1];
strcpy(a,aa);
b=bb;
}
char*Geta(){returna;}
intGetb(){returnb;}
voidOutput(){cout<};
voidmain()
{
CDdx,dy;
dx.Init("abcdef",30);
dy.Init("shenyafen",3*dx.Getb()+5);
dx.Output();
dy.Output();
}
运行结果:
abcdef30
Shenyafen95
3.#include
classBase
{
public:
Base(inti,intj){x0=i;y0=j;}
voidMove(intx,inty){x0+=x;y0+=y;}
voidShow(){cout<<"Base("<private:
[w1]
intx0,y0;
};
classDerived:
publicBase
{
public:
Derived(inti,intj,intm,intn):
Base(i,j){x=m,y=n;}
voidShow(){cout<<"NEXT("<private:
intx,y;
};
voidmain()
{
Baseb(1,2);
b.Show();
Derivedd(3,4,10,15);
d.Move(5,6);
d.Show();
}
运行结果:
Base(1,2)
NEXT(18,25)
4.#include
voidmain()
{
inti,s=0;
intN;
cout<<"输入一个整数:
";
cin>>N;
for(i=1;i<=N;i++)s+=i*i;
cout<
}
程序功能:
由键盘输入一个正整数N,计算并输出从1到N的各整数平方之和。
5.intf(constchar*s)
{
inti=0;
while(*s++)i++;
returni;
}
程序功能:
统计字符串中所包含的字符个数。
五、编程题(每小题5分,共10分)
1.根据下面函数原型编写一个函数,求出并返回由字符指针s所指向的字符串中包含的字符’a’和’A’的总个数。
intvoid[w2] fun(char*a);
int fun(char*a)
{
inti=0;
for(;*a;*a++)if(*a=='a'||*a=='A')i++;
returni;
}或
int fun(char*a)
{
inti=0;
do{if(*a=='a'||*a=='A')i++;}while(*a++);
returni;
}
2.根据下面类中拷贝构造函数的原型写出它的类外定义。
#include
classArray{
int*a;//指向动态分配的整型数组空间
intn;//数组长度
public:
Array(intaa[],intnn){ //构造函数
n=nn;
a=newint[n];
for(inti=0;i }
Array(Array&bb); //拷贝构造函数
Array&Give(Array&cc);//实现cc赋值给*thia的功能并返回*this
intLenth(){returnn;} //返回数组长度
};
Array:
:
Array(Array&bb)
{
n=bb.n;
a=newint[n];
for(inti=0;i}