试卷代号:1008
座位号
中央广播电视大学2007-2008学年度第一学期“开放本科”期末考试
计算机专业面向对象程序设计试题
2008年1月
一、单项选择题(毎小题2分,共20分)
1.设X和y均为bool s,则x||y为假的条件是( )。
A.它们均为真
B.其中一个为真
C.它们均为假
D.其中二个为假
2.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素的值为()
A. 2
B. 4
C. 6
D. 8
3.假定p是具有int* *•类型的指针变量,则给P赋值的正确语句为( )o
A. p = new int
B. p = new int *
C. p = new int * *
4.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进
行相应的软件更新的难易程度叫做软件的()o
A.可维护性
B.可复用性
C.兼容性
D.正确性
5. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数
原型或函数头的前面。
A. in
B. inline
C・ inLine
D. InLiner
6. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为( )。
A. length+1
B. first+length
C. (first+ length — 1) % MS
D. (first+length) % MS
7. 假定一个类的构造函数为 “A(intaa, int bb) {a=aa; b=aa * bb;}”,则执行“Ax(4, 5);”语句后,x.a和x.b的值分别为( )。
A. 4 和 5
B. 5 和 4
C. 4 和 20
D. 20 和 5
8. 假定AB为一个类,则执行“AB *p=new AB(1,2);”语句时共调用该类构造函数的次数为( )。
A. 0
B. 1
C. 2
D. 3
9. 一个类的成员函数也可以成为另一个类的友元函数,这时的友元声明( )类域的限定。
A,需加上
B.不需加上
C.可加可不加
D.取消
10. 队列具有( )的操作特性。
A,先进先出
B.先进后出
C.进出无序
D,仅进不出
二、填空题(毎小题2分,共20分)
多行注释的开始标记符为 。
假定x=5,y = 6,则表达式x++*++y的值为 。
假定x是一个逻辑量,则x && true的值与x的值 。
含随机函数的表达式randO^20的值在0至 的整数区间内。
程序的编译是以 为单位进行的。
一个数组的 实际上是指向该数组的第一个元素的指针,并且在任何 时候都不允许修改它。
指针变量 pv 和 pc 定义为“void *pv=”Hello, word!”; char *pc;”,要将 pv 值赋给 pc,则正确的赋值语句是pc=( )pv。
—个类的 函数通常用于实现释放该类对象中指针成员所指向的动态 存储空间的任务。
假定用户为类AB定义了一个构造函数”AB(int aa) ;a(aa) {}”,则 是该类的数据成员。
在多文件结构的程序中,通常把含有main ()函数的文件称为该程序的
三、程序填充题,根据题意在横线上填写合适的内容。(每小题6分,—— 共24分)
釆用辗转相除法求出两个整数的最大公^约数。
甘 include<iostream. h>
void main()
int a,b;
coutVV”请输入两个正整数:”;
cin>>a>>b; .
while(a< = 0 | | b< = 0) (cout<V”重新输入cin>>a>>b;) while(b) {
int r;
r=a%b;
; ;〃分别修改a和b的值
}
cout«a<<endl ; //输出最大公约数
}
用插入排序方法对table指针数组中size个指针所指向的字符串进行按升序排序的算
法。
void sort(char 关 table口,int size) (
for(int i= 1 ; iVsize; i+ + ){
char * p=tableCiH;
for(int j = i —1; j> = 0 ; j )
if(strcmp(p, table[j]) VO) table[j +1] = ; else break;
table] j +1 ] = ;
)
}
类A的定义
class A { ,
char * a ;
public:
AO (a=NULL;} 〃定义为参构造函数,使a为空指针
ACchar * aa) (
a = char[strlen(aa) +1]; strcpy(a,aa); 〃用aa所指字符串初始化a所指向的动态存储空间
}
; //定义析构函数,删除a所指向.的动态存储空间
};
4.类Goods的定义
class
(
private:
char Name[20]; 〃商品名称
int Weight; 〃商品重量
static int totalWeight; 〃同类商品总重量
public:
Goods (char * str,int w) { //构造函数
strcpyCName, str);
Weight= w;
total Weight+= Weight;
、}
〜Goods () (totalWeight―= Weight ;}
char * GetN ()( ;) 〃返回商品名称
.int GetWO (return weight;}
static int GetTotalWeightO ( 〃定义静态成员函数返回总重量
}
四、理解问答题,分别写出前2小题的程序运行结果和指出后2小题的程序或函数功能。(每小题6分,共24分)
井 includeViostream. h>
const int T = 6;
void main()
int i,j,k = O;
for(i = l;i< = T;i + = 2)(
for(j = 2jj< = T;j + =2) k+ + ;
}
coutV V”k= “VVkV Vendl ;
}
运行结果:
井 includeV iostream. 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 i b = x2; c= x3 ;
}
int GetMax();
};
int CE: :GetMax() (
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. GetMax( ) <<endl ;
}
运行结果:
# include<iostream. h>
void main( )
(
int i,p= 1 ;
int N;
cout< V”输入一个正整数
cin>>N;
for(i = l ;i< = N;i+ + ) p * =i; cout«nN! =,,«p«endlj
}
程序功能:
int f(char * s)
{
int i = 0;
while( * s+ + )i+ + ;
return i;
};
函数功能:
得分评卷人
五、编程题(每小题6分,共12分)
编写一个函数,分别求出由指针a所指向的字符串中包含的蜜种十进制数字出现的次 数,把统计结果保存在数组b的相应元素中,该函数的原型声明如下:
void fun(char * a, int b[]);
根据下面类中CompareBig函数成员的原型和注释写出它的类外定义。
class AA (
int * a;
int n;
int MS;
public:
void InitAA(int int nn, int ms) (
if(nn〉ms) {coutVV”Error!”VVendl; exit(l) ;}
MS=ms;
n=nn;
a=new int[MS];
for(int i=0; iVn; i+ + ) =
}
int CompareBig(AA&- b);
〃比较* this与b的大小,从前向后按两数组
〃中的对应元素比较,若* this中元素值大则返回1,若b中
〃元素值大则返回一1,若相等则继续比较下一个元素,直到
〃一个数组中无元素比较,此时若两者的n值相向则返回0,
〃否则若* this中的n值大则返回1,若b中的n值大则返回一1。
};
试卷代号:1008
中央广播电视大学2007-2008学年度第一学期“开放本科”期末考试
计算机专业面向对象程序设计试题答案及评分标准
(供参考)
2008年1月
一、单项选择题(毎小题2分,共20分)
1. C 2. C 3. B4. A5. B
6. D 7. C 8. B9. A10. A
二、填空题(每小题2分,共20分)
/*
35
相同
19
文件
数组名•
char *
析构
a
JO.主文件
三、程序填充题,根据题意在横线上填写谷适的内容。(毎小题6分,共24分)
评分标准:每空3分
a = b b = r
table[j] p
new 〜AO (delete }
retprn Name return totalWeight
四、 理解岡答题.分别写出前2小题的程序运行结果和指出后2小题的程序或函数功能。(每 小题6分,共24分)
k=9 ,
12
计算并输出N阶乘的值,其中N值由键盘输入。
求出并返回字符指针参数s所指向的字符串长度。
五、 编程题(毎小题6分,共12分)
评分标准:按编程完整程度酌情给分。
void fun(char * a9 int b口)
{
int ”
for(i=0;i<10?i+ + ) b[i] = 0? //2 分
while( * a) {
int j= * a—’O’;
if(j> = 0 && jV = 9) b[j] + + ;
a+ + J
} //6 分
}
int AA: :CompareBig(AA&- b)
{
int k;
if(n>b. n) k=b・ n? else k—m //I 分
, for(int i = 0? i<k; i+ + )
if(a[i]>b・ a[i]) return 1;
else if(a[i]Vb・ a[i]) return — 1 ; //3 分
if(k= = n && k= = b. n) return 0? //4 分
else if(k<n) return 1 ;
else return — 1 ? //6 分
评论0