试卷代号:1008
中央广播电视大学2005-2006学年度第一学期“开放本科”期末考试
计算机专业面向对象程序设计试题
2006年1月
一、单项选择题(每小题2分,共20分)
1.程序中主函数的名字为()。
A. main
B. MAIN
C. Main
D.任意标识符
2为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( )。
A.内联函数
B重载函数
C.递归函数
D.函数模板
3.将两个字符串连接起来组成-个字符串时,选用()函数。
A. strlen()
B. strcap(
C. strcat()
D. strcmp()
4.用new运算符创建一维整型数组的正确语句是()。
A. int * p=new a[10]
B. int * pnew float[10]
c. int * p=new int[lo]
D. int * p=new int[5]={(1,2,3,4,5}
5.假定有定义“int b[1o]; int * pb;”,则不正确的赋值语句为()。
A. pb=b
B. pb=&.b[o]
C. pb-new int
D. pb=b[5]
6.假定AA为一个类,a为该类公有的数据成员vx为该类的一个对象,则访问x对象中数据成员a的格式为().
A. x(a)
B. x[a]
C. x一 >a
D. x.a
7.假定AB为一个类,则执行“AB x(a,5); “语句时将自动调用该类的()。
A.带参构造函数
B.无参构造函数
c.拷贝构造函数
D.赋值重载函数
8.对于任一个类,用户所能定义的析构函数的个数至多为()。
A. 0
B. l
C. 2
D.任意个
9.对类中引用成员的初始化是通过构造函数中给出的(
)实现的。
A.函数体
B.参数表
C.初始化表
D.初始化表或函数体
10.如果表达式a==b中的“==”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为()。
A. a. operator= =(b>
B. b. operator= =(a)
c. operator me m (a,b)
D. operator= –( b,a)
二、填空题(每小题2分,共20分)
1.常数一4. 205和6. 7E-9分别具有 和 位有效数字。
2.元素类型为double的二维数组a[4] [6]共有 个元素,共占用 字节的存储空间。
3.假定对二维数组a[3][4]进行初始化的数据为{{3,5,6},{2,8},{7}},则和a [2][3]分别被初始化为 和 。
4.假定P为指向二维数组int d[4]L6]的指针,则P的类型为 ,其中一个元素d 表 示成指 针访问 方式为 。
5.已知变量a定义为”int a = 5;”,要使ra成为a的引用,则ra应定义为 ,要使rb指向a,贝!| rb应定义为 =
6.若只需要通过一个成员函数读取其数据成员的值,而不需要修改它们,则应在函数头 的后面加上 关键字;若只需要读取引用参数的值,不需要对其修改,则应在该参 数说明的开始使用 关键字。
7.假定一个类对象数组为A[N],当定义该数组时,将自动调用该类的无参构造函数的次 数为 次,当离开它的作用域时,将自动调用该类析构函数的次数为 次。
8.假定AB为一个类,则类定义体中的“AB(AB& x);”语句为该类 的原型语句,而“ operator = ( AB& x );”为该类 的原型语句O
9.在定义一个派生类时,使用 关键字表示为私有继承,使用 关键字表示为公有继承。
10.重载一个运算符时,该运算符的 、 以及操作符的 个数不允许改变。
得分评卷人
三、程序填充题(对程序、函数或类中划有横线的位置,根据题意按标 号把合适的内容填写到程序后面的标号处。每小题5分,共20 分)
1.在输出屏幕上打印出一个由字符’* ‘组成的等腰三角形,该三角形的高为5行,从上到 下每行的字符数依次为1,3,5,7,9。
井 include^iostream. h〉
void main()
{
int i,j ;
for(i=l; (1) ;i+ + ) {
for(j = l ;jV = 9;j + + )
if(jV = 5 —i I I (2) ) cout«^ «
else (3) ;
coutV Vendl
(1) (2) (3)
2.从一个字符串中删除所有同一字符后得到一个新字符串并输出。
# include-<iostream. h〉
const int len=20;
void delstr(char ,char >char c);
void main() {
char strl[len] ,str2[len];
char ch;
cout«”输入一个字符串:”;
cin〉〉strl ;
cout«”输入一个待删除的字符:”;
cin〉〉ch;
delstr(strl,str2,ch);
coutVVstr2V Vendl;
}
void delstr(thar ,char b[],char c)
{
int j = 0;
for(int i = 0 ; (1) ; i+ + )
if( (2) ) b[j + +] = a[订;
b[j]= (3) ;
3.已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运 算符[]要对下标是否越界进行检查。
class ARRAY(
‘ int *v; 〃指向存放数组数据的空间
int s; //数组大小
public:
ARRAY(int a[] , int n);
‘ARRAY()(delete
int size() ( return s;}
int& operator]](int n);
};
(1) operator[](int n) //[]的运算符成员函数定义
{
if(n<0 I I (2) ) (cerr«nT标越界!”; exit(l);} return (3) ;
}
(1) (2) (3)
4. 一个类定义如下:
class Point
{
private:
int x, y;
public:
Point(){x=y = 0;}
Point(int xO,int yO) {x=xO;y=yO;}
int GetX() (return x; }
int GetYO (return y; }
void Print() {coutV V”Point(” V VxV V”,” V VyV V”) “V Vendl;}
(1) ; 〃友元函数声明
(2) ; 〃友元函数声明
};
Point operator+ (Point& pt,int dd)
〃加号操作符重载函数,实现Point类对象与整数的加法
Point temp = pt;
temp. x+ — dd;
temp. y+ = dd;
return temp;
}
Point operator+ (Point&- ptl,Point& pt2)
//加号操作符重载函数,实现两个Point类对象的加法
{
Point temp = ptl ;
temp. x+ ―pt2. x;
temp. y+ = pt2. y;
(3) ;
}
(1)
(2)
(3)
四、理解问答题,写出前三小题的程序运行结果和指出后两小题的程
序(或函数)所能实现的功能。(每小题6分,共30分)
1.# include<Ciostream. h〉
const int B—2 ;
void main()
(
int p= 1 ,s= 1 ;
while(s<C50) (
p * ~B; s+ = p;
}
coutVV”s = ” VVsWendl;
2.* includeViostream. h>
class CE (
private:
int a» b;
int getminO (return (a<b? a:b);}
public:
int c;
void SetValueCint xl ,int x2, int x3) ( a=xl ; b=x2; c=x3;
}
int GetMinO ;
};
int CE: :GetMinO (
int d=getmin();
return (dVc? d : c);
}
void main()
{
mt x=5,y=12,z = 8;
CE * ep;
ep = new CE;
ep一>*SetValue(x+y,y—z, 10); coutV Vep —〉GetMin( )V Vendl; CE a= * ep;
cout<<a. GetMin() * 3 + 15<<endl;
}
3.# include<iostream. h>
class A {
int a[10]; int n;
public:
A(int aa口,int nn) : n(nn) {
for(int i = 0; i<Cn; i+ + ) a[ij = aaQiJ;
}
int GetCint i) {return a[i] ;}
int SumA(int nn) {
int s = 0;
£or(int j = 0; jVnn; j + + ) s+=a[j];
return s;
)
};
void mainO {
int a[]={2,5,8,10,15,20};
A x(a,4);
A y(a,6);
int d=l ;
for(int i = 0; i<4; i+ + ) d * = x. Get(i);
int f=y. SumA(5);
coutVV”d= “VVd V Vendl;
coutV V”f= “WfV Vendl;
}
运行结果:
4.# include-^Ciostreani. h>
# include<Zstdlib. h〉
# includeVtime. h>
const int N= 10;
int ff(int x, int y) (
int z; cout«x« ? + ?«y«?=’;
cin>>z;
if(x+y==z) return 1 ; else return 0;
)
void mainO
(
int a,b,c=0;
srand(time(0)) ; //初始化随机数序列
forCint i~0;i<N;i+ + ) {
a = rand()%20 + l? //randO函数产生0 —32767之间的一个随机数
b = rand() %2。+1 ;
c+ = ff(a,b);
}
coutVV”得分:”VVc* 10VVendl;
}
程序功能:
5. char * f(char * s){
int n=strlen(s);
char * r=new char[n+lj;
for(int i = 0; i<n; i+ + )
&& s[i]V=,z,)= AJ
else =
心]=;
return r;
程序功能:
五、编程题(每小题5分,共10分)
1.编写一个函数,分别求出由指针a所指向的字符串中包含的每种十进制数字出现的次 数,把统计结果保存在数组b的相应元素中,该函数的原型如下。
void fun(char * a, int b[]);
2.根据下面类中CompareBig函数成员的原型和注释写出它的类外定义。
class AA {
int * a;
int n;
int MS;
public:
void InitAA(int int nn, int ms) {
i£(nn>ms) (cout<<“Error! “<<Cendl; exit(l) ;}
MS=ms;
n=nn;
a = new int[MS];
for(int i = 0; i<n? i+ + ) = ,
}
int CompareBig(AA&- b) ; //比较* this与b的大小,从前向后按两数组
〃中的对应元素比较,若* this中元素值大则返回1,若b中
〃元素值大则返回一1,若相等则继续比较下一个元素,直到
〃一个数组中无元素比较,此时若两者的n值相同则返回0,
〃否则若*this中的n值大则返回1,若b中的n值大则返回一1。
试卷代号:1008
中央广播电视大学2005-2006学年度第一学顚“开放本科”期末考试
计算机专业面向对象程序设计
试题答案及评分标准
(供参考) 2006年1月
一、单项选择题(每小题2分,共20分)
1. A 2. A 3. C 4. C 5. D
6. D 7. A 8. B 9. C 10. C
二、填空题(每小题2分,共20分)
评分标准:每小题若有两个空,则每空1分;若只有一个空,则每空2分。
L 4 2 2. 24 192
3. 8 0 4. int( * )[6] * ( * (d+i)+j)
5. int &” =a; int * rb— 6. const const
7, N N 8.拷贝构造函数赋值重载函数
9. private public 10.优先级结合性
三、程序填充题(对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程
序后面的标号处。每小题5分,共20分)
评分标准:对一空给2分,对两空给4分,对三空给5分。
1.(1) i< = 5
(2)j> = 5 + i
(3)coutVV 疽
2.(1) (或 a[i]! =\0,)
(2)a[i]! =c
(3)W
3.(1) int& ARRAY::
(2)n〉= s
(3)(或 * (v + n))
4.(1) friend Point operator+ (Point& pt, int dd)
(2)friend Point operator+ (Point& ptl ,Point& pt2)
(3)return temp
四、理解问答题(写出前三小题的程序运行结果和指出后两小题的程序(或函数)所能实现的功 能。每小题6分,共30分)
评分标准:第4.5小题根据叙述完整程度酌情给分。
1. s=63
2. 4 分
27 〃3分
3. d = 800 //3分
f=40 //3分
4.让计算机随机产生出10道20以内整数的加法题供用户计算,每道题10分,计算完成 后打印出得分。
5.根据参数s所指向的字符串,生成一个由r所指向的新字符串并返回,该字符串使s字 符串中的小写字母均变为大写。
五、编程题(每小题5分,共10分)
评分标准:按编程完整程度酌情给分。
1. void fun(char * a, int b口)
(
int i;
for(i=0;iV10;i+ + ) b[i] = 0;
while( * a) (
int j = * a —’O’;
if(j> = 0 & & jV = 9) b[j] + + ;
a+ + ; 丿
2. int AA: :CompareBig(AA& b) int k;
if(n>b. n) k=b. n; else
for(int i = 0; iVk; i+ + )
if(a[i]〉b. a[i]) return 1 ;
else if(a[i]Vb・ a[i]) return — 1 ; if(k= —n && k = = b. n) return 0; else if(kVn) return 1 ;
else return 一 1 ;
评论0