试卷代号:1008
座位号
中央广播电视大学2006-2007学年度第一学期“开放本科”期末考试
计算机专业 面向对象程序设计 试题
2007年1月
一、单项选择题(毎小题2分,共20分)
1.由C++源程序文件编译而成的目标文件的默认扩展名为().
A. cpp
B. exe
C. obj
D. lik
2.设×和y均为bool 量,则x &&- y为真的条件是()。
A.它们均为真
B.其中一个为真
C它们均为假
D.其中一个为假
3.在下面的二维数组定义中,正确的语句是().
A. int a[5][];
B. int a[][5];
C. int a[][3]={{1,3,5},i2}};
D. int a[](10);
4.在文件包含命令中,被包含文件的扩展名().
A.必须是. h
B.不能是. h
C可以是.h或. cpp
D.必须是. cpp
5.要使语句”p=new int[10][20];”正确,p应事先定义为()。
A. int * p;
B. int **p;
C. int * p[20];
D. int( * p)[2o];
6.在关键字public后面定义的成员为该类的()成员。
A.私有
B.公用
C.保护
D.任何
7.假定AA为一个类,a为该类私有的数据成员,若要在该类的—个成员函数中访问它,则书写格式最好为().
A. a
B. AA: :a
C. a( )
D. AA: ; a()
8,队列具有()的操作特性。
A.先进先出
B.先进后出
(C进出无序
D.仅进不出
9.假定AB为一个类,则执行“AB a,b(3),* p;”语句时共调用该类构造函数的次数为)次。
A.5
B.4
c. 3
D.2
10.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( )。
A.作为友元函数重载的1元运算符
B.作为成员函数重载的1元运算符
c.作为友元函数重载的2元运算符
D作为成员函数重载的2元运算符
二、填空题(每题2分,共20分)
1.用于输出表达式值的标准输出流对象是_
2.假定x5,y=6,则表达式x—— *——y的值为_—_。
3,假定x是一个逻辑量,则× l l true 的值为__
4.C十+提供的预处理命令有宏定义命令,条件编译命令和_命令。
5.假定a是一个一维数组,则a[订的指针访问方式为-…
6.变量v定义为“double v= 23.4;”,要使指针 pv指向v,则定义 pv的语句为
7、若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上__-_…和两个冒号分隔符。
8.若采用x. abc(y)表达式调用一个成员函数,在成员函数中使用的____就代表了类外的x对象。
9.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为
10.假定用户只为类AB定义了一个构造函数”AB(int aa,int bb=0){a=aa; b=bb;}”,则定义该类的对象时,其实参表中至多带有___..__个实参。
三、程序填充题(对程序、函数或类中划有横线的位置,根据题意按标 号把合适的内容填写到程序下面相应标号的后面°每小题6分, 共24分)
L打印出2至99之间的所有素数(即不能被任何数整除的数)。
井 include<C iostream. h>
# includeVmath. h>
void main。
{
int i,n;
for(n=2; n< = 99; n+ + ) (
int temp = int(sqrt(n)) ; //求出n的平方根并取整
for(i-2; ⑴ 多 i+ + >
if(n%i==0) (2) ;
if(i>temp) coutVVn<V’
}
coutVV ‘\n,;
(1) (2)
2.下面是对按从小到大排列的有序数组a[n]中进行二分査找x的算法,若査找成功返 回该元素下标,否则返回一L
int BinarySearch(int a[],int n.int x)
{
int low=0, high=n—1; 〃定义并初始化区间下界和上界变量
int mid; 〃定义保存中点元素下标的变量
while(low< = high) {
mid = (low+high) / 2 ;
if(x= — a[ mid] ) G) ;
else if(xVa[mid]) high=mid—1;
» else (2)
)
return —1;
}
(1)
3 .请补充完整如下的类定义:
class A (
char * a ;
public:
a( ){a = 0;} 〃定义无参构造函数,使a的值为空
A(char * aa) {
a= 一 ⑴― ;〃进行动态存储分配
strcpy(a,aa); //用aa所指字符串初始化a所指向的动态存储空间
)
⑵ ―//定义析构函数,删除a所指向的动态存储空间
};
(1)
(2),
4. 一种类定义如下:
class Goods
private:
char gd_name[20]; 〃商品名称
int weight; //商品重量
static int totalweight; public: 〃同类商品总重量
Goods (char * str,int w) { 〃构造函数
strcpy(gd_name, str); weight= w; total weight + = weight ;
)
〜Goods ( ) {totalweight —= weight ;} char* GetN(){ (1) 舟 //返回商品名称
int GetW() (return weight;} static int GetTotal_Weight( ) { 〃定义静态成员函数返回总重量
(2) ;
}
)
四、理解问答题(写出前两小题的程序运行结果和指出后两小题的程 序(或函数)所能实现的功能。每小题6分,共24分)
1・ 甘 include V iostream. h>
const int T=8;
void main()
{
int i,s=0;
for(i=l ;i< = T;i+ = 2) { s+=i * i;
coutV<sV V’
}
cout«endl;
}
运行结果:
2.甘 includeViostream, h〉
class CE (
private:
int a,b;
int getmaxO (return (a>b? a:b) ;} public:
int c;
void SetValue(int xl ,int x2‘ int x3) { a=xl ; b=x2; c=x3;
}
int GetMaxO ;
};
int CE: :GetMaxC) (
int d= getmaxO ;
return (d>c? d:c);
}
void mainO
{
int x=5,y=12,z=8;
CE ex;
ex・ SetValue(x,y,z); coutVVex. GetMaxO V<endl$
}
运行结果:
3・ int ff(int x, int y) {
int z;
cout«xV V,+’ <<y V V,=, cin>>z;
if(x+y==z) return 1 ; else return 0;
}
函数功能:
4. char * f(char *s){
int n=strlen(s);
char * r=new charCn+lJ ;
for(int 1=0$ iVn; i+ + )
if(s[i]>=W && s[i]V=,z,) r[i] = s[i]—W +,A,; else r[i] = s[i];
r[n]=、0l
return r;
}
函数功能:
五、编程题(每小题6分,共12分)
1.按照下面函数原型语句编写一个递归函数求岀并返回数组a中n个元素的平方和。 int f(int a£],int n);
2.根据下面类中Sum函数成员的原型和注释写出它的类外定义。
class AA (
int * a;
int n;
int MS;
public:
void InitAA(int aa[], int nn, int ms) (
if(nn>ms) {coutVV”Error!”<Vendl; exit(l) ;)
MS=ms;
n=nn;
a = new int[MS];
for(int i —0; iVn; i+ + ) a[i] = aa[i];
}
int Sum(); 〃求出并返回数组a中前n个元素之和
试卷代号:1008
中央广播电视大学2006-2007学年度第一学期“开放本科”期末考试
计算机专业面向对象程序设计试题答案及评分标准
(供参考) 2007年1月
一、单项选择题(每小题2分,共20分)
1.C 2. A 3.C 4・C 5. D
6. B 7. A 8. A 9. D 10. B
二、填空题(每题2分,共20分)
1.下一行
2.3 3. 2
3.5
4 .代码
5・ 4 * i
6.单继承
7.不允许
8.ABO {}
9.a
10.2
三、程序填充题(对程序■函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程 序下面相应标号的后面。每小题6分,共24分)
每小题评分标准:对一空给3分,全对给6分。
1. (1) i<C = temp
(2) break
2- (1) return mid
(2) low=mid+l
3.(1) new charCstrlen(aa) +1]
(2) ~ A() (delete }
(2) return totalweight
四、 理解问答题{寫出前街小题的程序运行结果和狷出后两小题的程序(或函数)所能实现的功 能。每小题6分.共24分)
评分标准:第3、4小题根据叙述的完整程度酌情给分。
1.1 10 35 84 〃每个数据1分,全对6分
2.12 //6 分
3.根据参数x和y,由用户通过键盘输入计算出x+y的值,若正确返回1,否则返回0。
4.根据参数s所指向的字符串,生成一个由r所指向的新字符串并返回,该字符串使s字 符串中的小写字母均变为大写。
五、 编程题(每小题6分,共12分)
评分标准:根据编程完整程度酌情给分。
1.int f(int a[],int n)
if(n==0) return 0 ; 〃或者 if(n= = l)retun a[0] * a[0];
else return a[n— 1] * a[n— l] + f(a,n— 1);
)
2.int AA:: SumO
(
int s=0;
for(inti=l; iVn; i+ + ) s+ = a[i];
return s;
评论0