试卷代号:1008
中央广播电视大学2003-2004学年度第二学期“开放本科”期末考试
计科网络、计科应用
计科硬件
专业面向对象程序设计试题
2004年7月
一、单项选择(毎小题1分,共12分)
1.设x和y均为bool量,则x| |y为假的条件是()
A.它们均为真
B.其中一个为真
C.它们均为假
D.其中一个为假
2.假定一个二维数组的定义语句为“int a[3][4]={{3,4),{2,8,6}};”,则元素 的值为().
A. 2
B. 4
C. 6
D. 8
3.以下错误的描述是()
A.出现在一个表达式中
B.出现在执行语句中
C.作为–个函数的实参
D.作为一个函数的形参
4.关于局部变量,下面说法正确的是()
A.定义该变量的程序文件中的函数都可以访问
B.定义该变量的函数中的定义处以下的任何语句都可以访问
C.定义该变量的复合语句中的定义处以下的任何语句都可以访问
D.定义该变量的函数中的定义处以上的任何语句都可以访问
5.假定P是具有int* *类型的指针变量,则给p赋值的正确语句为()
A. p=new int;
B. p=new int * ;
C. p=nfew int * * ;
D. p—new int[10] ?
6.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进
行相应的软件更新的难易程度叫做软件的(
).
A.可维护性
B.可复用性
C.兼容性
D.正确性
7. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( .)放在函数原型或函数头的前面。
A. in
B. inline
C. inLine
D. InLiner .
8. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度 为length,则队尾的后一个位置为( )。
A. length+1
B. first+length
C. (first + length—”1) %MS
D. (first+length)%MS
9.假定一个类的构造函数为 “A(int aa.int bb) {a = aa; b = aa * bb; }”,则执行”A x(4,
5)产语句后,x. a和x. b的值分别为(
)。
A. 4 和 5
B.5 和 4
C. 4 和 20
D. 20 和 5
10.假定AB为一个类,则执行“AB*p=new AB(1,2);”语句时共调用该类构造函数的次数为( )。
A. 0
B. 1
C. 2
D「3
11.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( )。
A.需加上类域的限定
B.不需加上类域的限定
C.类域的限定可加可不加
102
D.不需要任何限定
12.关于插入运算符<V的重载,下列说法不正确的是( )o
A.运算符函数的返回值类型是ostream &。
B.重载的运算符必须定义为类的成员函数。
C.运算符函数的第一个参数的类型是ostream &。
D.运算符函数有两个参数。
得分|评巻人
二、填空(每空1分,共14分)
1.当执行cout语句输出endl数据项时,将使C++显示输岀屏幕上的光标从当前位置移 动到 的开始位置。
2.假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为 和
3.执行switch语句时,在进行作为条件的表达式求值后,将从某个匹配的标号位置起向 下执行,当碰到下一个标号位置时 执行。
4.strlen(”apple”)的值为 ,strcmp(”a”,”A”)的值为 .
5.C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和 区。
6.假定a是一个一维指针数组,则a+i所指对象的地址比a大 字节。
7.已知语句“ coutVVp;”的输出是“ Hello!”,则语句“ cout<< * p;”输出的是
8.如果一个派生类只有一个唯一的基类,则这样的继承关系称为 。
9.假定AA是一个类,“AA * abcOconst;”是该类中一个成员函数的原型,在该函数体中
向* this或其成员赋值。
10.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为
11.假定用户为类AB定义了一个构造函数“AB(intaa){a=aa;}”,该构造函数实现对数 据成员—的初始化。
12.作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有 个操作数。
三、程序填充,对程序、函数或类中划有横线的位暈,根据题意按标号 把合适的内容填写到程序下面相应标号的后面(毎小题6分,共
24 分)。
10
1.下面程序计算出
i=l
# include<iostream. h>
void mainO
double x,pl==l,p2 = l,s=:0;
int i,j==l;
cout«w输入x的值:七
cin>>x;
for(i=l ;i< = 10;i+ + ) (
pl * = (1) ;
p2 * = (2) ; s+=j * pl/p2; 〃j 的值为(一 1)中 j= ⑶ ;
)
coutV Vs V Vendl;
}
(1)
(2)
(3)
void ff(NODE * L)
{
for( (1) ;p! =NULL; (2) )
cout« (3) VV’气
coutV Vendl;
)
(1) (2) (3)
NODE* f8(NODE* L)
(
if(L==NULL) return NULL;
NODE * p=NULL, * p=L, * t;
while(q! =NULL)(
t=q;
q= (1) ;
t—>next= (-2) ;
P = t;
}
(3) ;
}
(1) (2) (3)
4已知一个利用数组实现栈的类定义如下:
const int ARRAY_SIZE= 10 ;
class Stack (
public:
void Init()(top= —1?} //初始化栈为空
void Push(int newElem); 〃向栈中压入一个元素
int Pop(); 〃从栈顶弹出一个元素
bool Empty()( 〃判栈空
if(top= = — 1) return true;else return false;}
int DepthO {return top+1;) //返回栈的深度
void PrintO ;
〃按照后进先出原则依次输岀栈中每个元素,直到栈空为止 private;
intelemEARRAY_SIZE]; 〃用于保存堆栈元素的数组
int top; 〃指明栈顶元素位置的指针
};
该类的Pop和Print函数的实现分别如下:
(1) ( ,
if(top= = —1)(
cout<V”栈空” VVendl;
exit(l); 〃中止运行
)
return (2) ;
}
void Stack: : PrintO (
while(! Empty())
cout« (3) VV,’;
coutV Vendl;
}
(1) (2) (3)
四、写出程序运行结果(毎小题8分,共16分)
int a[8]= {36,25,20,43,12,70,66,35};
void main()
{
int s0,sl»s2;
s0=sl = s2 = 0;
for(int i=0;i<8;i+ + )(
switch(a[i]%3) {
case 0 : sO + = a[i] ; break ;
case 1 : sl+ =a[l] ; break;
case 2 : s2 + = a[iJ ; break ;
}
}
cout«s0«< ?«S1«4 ,«s2«endl;
}
# include< string. h> class CD{
char * a;
int b;
public:
void Init(char * aa,int bb)
(
a = new char[strlen(aa) +1J ; strcpy(a,aa):
b==bb;
char * GetaO (return a;}
iht GetbO (return b ;}
void OutputO {coutWaVV” VVbVVendl;)
};
void main()
(
CD dx,dy;
char a[20] j
strcpyCa»dx. Geta());
strcat(a,“xyz”);
} 得分[评卷人
五、指出程序或函数的功能(毎小题6分,共12分)
1. # includeCiostream. h>
井 includeVstdlib. h>
井 include<math. h>
void main()
{
int i=10,a;
while(i>0) (
a=rand() %90 + 10;
int j,k=int(sqrt(a) +le—5) ; 〃sqrt(x)为求 x 的平方根函数 for (j = 2;jV = k:j++ )
if(a%j = =O) break;
if(j>k) {coutVVaVV” ;i ;}
int n;
cout««从键盘给n输入一个整数产;
do cin>>n; while(n<C0);
if(n==0) (f=NULL;returm}
f=new IntNode;
IntNode * p=f;
coutVV “从键盘输入” V VnV V”个整数:”;
while (n ) (
p=p—>next=new IntNode;
cin> > p—> data;
}
p—>next —NULL;
p=f; f = f — >next;delete p;
}
假定IntNode的类型定义为:
struct IntNode {
int data; 〃结点值域
IntNode * next; 〃结点指针域
得分评巻人
六、程序改错,国根据程序段或函数模块的功能改写个别地方的错误 (6 分)。
假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,清指出错误 语句行的行号并改正错误行。
井 include<Ciostream. h>
class Franction ( 〃定义分数类
int nume; 〃定义分子
int deno; 〃定义分母
public:
〃把*this化简为最简分数,具体定义在另外文件中实现
void FranSimpO ;
〃返回两个分数* this和x之和,具体定义在另外文件中实现
Franction Fran Add (const Franction&- x);
〃置分数的分子和分母分别0和1
void InitFranctionO (nume=0; deno=l;}
〃置分数的分子和分母分别n和d
void InitFranction (int n, int d) (nume=n; deno=d;)
//输出一个分数
void FranOutputO {cOutVVrwmeVV’/’WdeuoVVendl;}
void mainO | 〃1行 |
( | 〃2行 |
Franction a,b,c, | 〃3行 |
a. InitFranction(6,15); | 〃4行 |
b. InitFranction(l); | 〃5行 |
c. InitFranctionO ; | 〃6行 |
c=FranAdd(a,b); | //7行 |
coutVVc. numeVV’/‘VVc. deno<<endl? //8 行
} 〃9行
错误行的行号为―__、 和 O
分别改正为 .、 和
得分I评卷人
七、编程(每小题8分,共16分)
1.计算1 + 3 + 32+…+3】。的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累 加变量的标识符。
2-根据下面类中Uion函数的原型和注释写出它的类外定义。
class Array (
int*a; 〃指向动态分配的整型数组空间
intn; //记录数组长度
public:
Array (int aa口,int nn); 〃构造函数,利用aa数组长度rm初始化n,
〃利用aa数组初始化a所指向的数组空间
Array(Array& aa); 〃拷贝构造函数
ArrayGive(Airay& aa); 〃实现 aa 赋值给 * this 的功能并返回 * this
Array Uion(Array& aa); 〃实现* this和aa中的数组合并的功能,把合并
〃结果(其长度为两数组长度之和)存入临时对象并返回
int LenthO {return n;) 〃返回数组长度
void PrintO { 〃输出数组
for(int i = 0;iVn; i+ + )
cout<<a[i]<<”;
cout<<Cendl;
};
试卷代号:1008
中央广播电视大学2003-2004学年度第二学期“开放本科”期末考试
应用专业面向对象程序设计
试题答案及评分标准
(供参考)
2004年7月
一、单项选择(毎小题1分,共12分)
1. C 2. C
3. D
4. C
5. B 6. A
7. B
8. D
9. C 10. B
11. A
12. B
二、填空(每空1分,共14分)
1-下一行
2. 3 3. 2
不停止(或继续)
5 1
代码
4*i
H
单继承
不能够(不允许)
ABO {}
a
12.2
三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序
下面相应标号的后面(每小题6分,共24分)
1. (l)x 〃2 分
112
(2)i 〃2 分
(3)-j 〃2 分
2.
(l)NODE* p=L
〃2分
(2)p=p—>next
〃2分
(3)p~~>data
〃2分
3.
(l)q—>next
〃2分
(2)p
〃2分
(3)return p
〃2分
4.
(a)int Stack: :PopO
〃2分
(b)elemEtop ]
〃2分
(c)Pop()
〃2分
四、 写出程序运行结果(每小题8分,共16分)
1.114 138 55 〃每个数据占3分,全对给8分
2. abcdef 30 〃4分,每个数据2分
abcdefxyz 50 〃4分,每个数据2分
五、 指出程序或函数的功能(毎小题6分,共12分)
随机产生出10个10至100(或99)之间的素数并显示出来。
首先从键盘上输入一个整数给n,然后依次输入n个整数建立以表头指针为f的链表。 评分标准:根据叙述情况酌情给分。
六、 程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6分)。
错误行的行号为5 7 8 ,
分别改正为 b. InitFranctiond ,3) ; c=a. FranAdd(b) ; c. FranOutputO
评分标准:共6个数据,每个数据1分。
七、 编程(毎小题8分,共16分)
评分标准:根据编程情况酌情给分。
1.
# include<iostream. h>
void main()
int i; 〃用i作为循环变量
int p=l; 〃用p作为累乘变量
int s= 1; 〃用s作为累加循环变量
for(i=l ;i< = 10;i+ + ) (p * = 3;s+ = p;} coutWsV Vendl ;
}
2.
Array Array: :Uion(Array&aa) (
int k = n+aa,n;
int * w=new int[k];
int i;
for(i = 0;iVn;i + + )w[i] = a[i];
for(i = 0;iVaa. n;i+ + ) w[i+n] = aa.
Array r(w,k);
return r ;
评论0