计算机专业 面向对象程序设计 试题.docx
《计算机专业 面向对象程序设计 试题.docx》由会员分享,可在线阅读,更多相关《计算机专业 面向对象程序设计 试题.docx(9页珍藏版)》请在冰豆网上搜索。
计算机专业面向对象程序设计试题
计算机专业面向对象程序设计试题
2007年1月
一、单项选择题(每小题1分,共20分)
1.由C++源程序文件编译而成的目标文件的默认扩展名为(C)。
A.cpp B.exe C.obj D.lik
2.设x和y均为bool量,则x&&y为真的条件是(A)。
A.它们均为真 B.其中一个为真
C.它们均为假 D.其中一个为假
3.在下面的二维数组定义中,正确的语句是(C)。
A.inta[5][]; B.inta[][5];
C.inta[][3]={{1,3,5},{2}}; D.inta[][10];
4.在文件包含命令中,被包含文件的扩展名(C)。
A.必须是.h; B.不能是.h;
C.可以是.h或.cpp; D.必须是.cpp;
5.要使语句“p=newint[10][20]”正确,p应事先定义为(D)。
A.int*p; B.int**p;
C.int*p[20]; D.int(*p)[20];
6.在关键字public后定义的成员为该类的(B)成员。
A.私有 B.公有 C.保护 D.任何
7.假定AA为一个类,a为该类私有的数据成员,若要在该类的一个成员函数中访问它,则书写格式最好为(B)。
A.a B.AA:
:
a
C.a() D.AA:
:
a()
8.队列具有(A)的操作特性。
A.先进先出 B.先进后出 C.进出无序 D.仅进不出
9.假定AB为一个类,则执行“ABa,b(3),*p”语句时共调用该类构造函数的次数为(D)。
A.5 B.4 C.3 D.2
10.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是(B)。
A.作为友元函数重载的1元运算符
B.作为成员函数重载的1元运算符
C.作为友元函数重载的2元运算符
D.作为成员函数重载的2元运算符
二、填空题(每空2分,共20分)
1.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到下一行的开始位置。
2.假定x和y为整型,其值分别为16和5,则a/y和double(x)/y的值分别为3和 3.2 。
3.strlen(“apple”)的值为 5 。
4.C++程序运行时的内在空间可以分为全局数据区,堆区,栈区和代码 区。
5.假定a是一个一维指针数组,则a+i所指对象的地址比a大4×i字节。
6.如果一个派生类只有一个唯一的基类,则这样的继承称为单继承。
7.假定AA是一个类,“AA*abc()const;”是该类中的一个成员函数的原型,在该函数体中不能够 向*this或其成员赋值。
8.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为AB()。
9.假定用户为类AB定义了一个构造函数“AB(intaa){a=aa;}”,该构造函数实现对数据 a 的初始化。
10.作为类的成员函数重载地个运算符时,参数表中只有一个参数,说明该运算符有2 个操作数。
三、程序填充题(对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面。
每小题6分,共24分)
1.打印出2至99之间的所有素数(即不能被任何数整除的数)。
#include
#include
voidmain()
{
inti,n;
for(n=2;n<99;n++){
inttemp=int(sqrt(n));//求出n的平方根并取整
for(i=2; ⑴ ;i++)
if(n%i==0) ⑵ ;
if(i>temp)cout< }
cout<<'\n';
}
⑴i<=temp ⑵break
2.下面是对按从小到大排列的有序数组a[n]中进行二分查找x的算法,若查找成功返回该元素的下标,否则返回-1。
intBinnarySearch(inta[],intn,intx)
{
intlow=0,high=n-1;//定义并初始化区间下界和上界变量
intmid; //定义保存中点元素下标的变量
while(low<=high){
mid=(low+high)/2;
if(x==a[mid]); ⑴
elseif(x else; ⑵
}
return-1;
}
⑴returnmid ⑵low=mid+1
3.请补充完整如下的类定义:
#include
classA{
char*a;
public:
A(){a=0;}//定义无参构造函数,使A的值为空
A(char*aa){
a= ⑴ ;//进行动态存储分配
strcpy(a,aa);//用aa所指字符串初始化a所指向的动态存储空间
}
⑵ ;//定义析构函数,删除a所指向的动态存储空间
};
⑴newchar[strlen(aa)+1]
⑵~A(){delete[]a;}
4.一个类定义如下:
classGoods
{
private:
chargd_name[20];
intweight;
staticinttotalweight;
public:
Goods(char*str,intw){
strcpy(gd_name,str);
weight=w;
totalweight+=weight;
}
~Goods(){totalweight-=weight;}
char*GetN(){ ⑴ ;}
intGetW(){returnweight;}
staticintGetTotal_weight(){
⑵ ;
}
};
⑴cout<四、理解问答题(写出前两小题的程序运行结果和指出后两小题的程序(或函数)所能实现的功能。
每小题6分,共24分)
1.#include
constintT=8;
voidmain()
{
inti,s=0;
for(i=1;i<=T;i++){
s+=i*i;
cout<
}
cout<}
运行结果:
1514305591140204
2.#include
classCE{
private:
inta,b;
intgetmax(){return(a>b?
a:
b);}
public:
intc;
voidSetValue(intx1,intx2,intx3){
a=x1,b=x2,c=x3;
}
intGetMax();
};
intCE:
:
GetMax(){
intd=getmax();
return(d>c?
d:
c);
}
voidmain()
{
intx=5,y=12,z=8;
CEex;
ex.SetValue(x,y,z);
cout<}
运行结果:
12
3.intff(intx,inty){
intz;
cout< cin>>z;
if(x+y==z)return1;elsereturn0;
}
函数功能:
输入2个整数相加的结果,结果正确返回1,否则返回0
4.char*f(char*s){
intn=strlen(s);
char*r=newchar[n+1];
for(inti=0;i if(s[i]>='a'&&s[i]<='z')r[i]=s[i]-'a'+'A';
elser[i]=s[i];
r[n]='\0';
returnr;
}
函数功能:
将字符串中的小写字母转换为大写
五、编程题(每小题6分,共12分)
1.按照下面函数原型语句编写一个递归函数求出并返回数组a中n个元素的平方和。
intf(inta[],intn)
程序如下:
intf(inta[],intn){
if(n==1)returna[0]*a[0];
elsereturna[n-1]*a[n-1]+f(a,n-1);
}
2.根据下面类中Sum函数成员的原型和注释写出它的类外定义。
classAA{
int*a;
intn;
intMS;
public:
voidInitAA(intaa[],intnn,intms){
if(nn>ms){cout<<"Error!
"<(1);}
MS=ms;
a=newint[MS];
for(inti=0;i }
intSum();//求出并返回数组a中前n个元素之和
};
程序如下:
intAA:
:
Sum(){
intsum=0;
for(inti=0;i sum+=a[i];
returnsum[U1] ;
}