试卷代号:1008
中央广播电视大学2004-2005学年度第二学期“开放本科”期末考试
计算机专业面向对象程序设计试题
2005年7月
一、单项选择题(每小题1分,共16分)
一.单项选择题(每小题1分,共16 分)
1.用来组织C++程序文件的基本单位是()。
A.字符
B.语句
C.函数
D.源程序文件
2.下列的符号常量定义中,错误的定义是()。
A. const M=10;
B. const int M=20;
c. const char ch;
D.const bool mark true;
3.下列()的调用方式是引用调用。
A.形参和实参都是变量
B.形参是指针,实参是地址值
C.形参是引用,实参是变量
D.形参是变量,实参是地址值
4.采用重载函数的目的是().
A.实现共享
B.减少空间
C.提高速度
D.使用方便,提高可读性
5.下列给字符数组赋初值时,正确的应该是().
A. char s1[]=”abedef”;
B. char s2[4]一”abcd”;
C. char s3[2][3]={“abc”, ”xyz”’);
D. char s4[4][]一{‘a’,’x’,’s’,’t’} ;
6,假定一条定义语句为“int a[10],x,* pa”a;”,若要把数组a中下标为3的元素值赋给x,则不正确的语句为().
A. x一pa[3];
B.x=*(a+3),
c. x=a[3];
D.x *pa+3;
7.假定有“struct BOOK{char title[40]; float prices }; BOOK * book;”定义,则不正确的语句为()。
A. BOOK * x=new book;
B. BOOK x={“C++ Programming”,27.0};
c. BOOK * x=new :3M OK;
D. BOOK * * x=&.book;
8.在一个完整类的定义中,应包含有()成员的定义。
A.数据
B.函数
C.数据和函数
D.数据或函数
9.假定AA为一个类,a()为该类公有的函数成员vx为该类的一个对象,则访同x对象中函数成员a()的格式为().
A. x. a
B. x,a(
c. x一>a
D. x一 >a(
10.假定A:是一个类,abc是该类的-个成员函数,则参数丧中隐含的第一个参数为
()
A. abc
B. * this
C. this
D. this&
11.对于一个类的构造函数,其函数名与类名().
A.完全相同
B,基本相同
C.不相同
D.无关系
12.假定AB为一个类,则执行“AB * s =new AB(a,5);”语句时得到的一个动态对象为()。
A. s
B. s>a
C. s.a
D. * s
13.假定-个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以·为().
A. AB(){
B.AB(:a(O>{}
C. AB(int aa=0){a=aa; }
D.AB(int aa){
14.对类中常量成员的初始化是通过构造函数中给出的()实现的。
A.函数体
B。参数表
C.初始化表
D.初始化表或函数体
15、如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为()。
A. a. operator+(b)
B. b.operator+(a).
C. operator+(a,b)
D. operator(a+b)
16.对于公有继承,基类的公有和保护成员在派生类中将()成员。
A,全部变成公有
B。全部变成保护
C.全部变成私有
D.仍然相应保持为公有和保护
二、墳空题(每空1分,共18分)
1.在C+ +程序中包含一个头文件或程序文件的预编译命令为 。
2.C+ +常数0x145对应的十进制值为 o
3.设有定义为“enum PrintStatus{ready,busy,error},则 coutVVbusy 的输出结果是
4.元素类型为int的数组a[10]共占用 字节的存储空间。
5.在C++语言中,一个函数由函数头和 组成•
6,一个指针类型的对象占用内存的 个字节的存储空间。
7,假定一个二维数组为c[5]C8],则c[3]的值为二维元素 的地址,c[3] + 2 的值为二维元素 的地址。
8,与结构成员访问表达式(* fp). score等价的表达式是 。
9.对于类中定义的任何成员,其隐含访问权限为 o
10.假定AA是一个类,“AA* abc();”是该类中一个成员函数的原型,则在类外定义时 的函数头为 »
11.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度 为length,则删除一个元素后队首的位置为 o
12.假定AB为一个类,则执行”AB a[10];”语句时,系统自动调用该类构造函数的次数 为 。
13.假定AB为一个类,则该类的拷贝构造函数的函数头为 。
14.当保护继承时,基类的 成员在派生类中成为保护成员,派生 类对象不能直接访问基类的 _成员。
15.一个单目运算符作为类的成员函数重载时有 个参数;如果作为独立函数重载, 则有 个参数。
得分评卷人
二、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标 号把合适的内容填写到程序后面的标号处。(每小题6分,共24 分)
1.下面函数是求两个整型参数a和b的最小公倍数。
int f2(int a9 int b)
(
int i = 2, p=l ;
do {
while(a%i= =0 && (1) ) {
P * =i; a/ = i; b/ = i;
}
} while(a> = i && (3) );
return p * a * b;
}
(1)
(2)
(3)
2.采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输
出。
# include <iostream. h>
const int N = 8; void mainO
(
int a[N], * p, * q;
for(p=a; pVa + N; p+ + ) (1) p = a;q=a + N—1;
while(pVq) (
int r= * p? * p= * q; * q=r; (2) ; (3) ;
}
for(p = a;p<a+N; p+ + )
coutV V * p«”;
coutV Vendl;
}
(1)
(2)
(3)
3.假定有定义为”struct NODE(int data; NODE* next;};气下面算法是把以L为表头
指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。
NODE* f8(NODE* L)
(
if(L==NULL) return NULL; NODE * p=NULL, * q=L, * t; while(q! =NULL) {
t=q;
q= (1) ; t~>next= (2) ; P=t;
}
(3) ;
}
(1)
(2)
(3)
4.# include<iostream. h>
# include<stdlib. h>
class A (
int * a; int n? int MaxLen;
public:
AO : a(0) , n(0) , MaxLen(O) {)
A(int * aa9 int rm, int MM) (
n=nn;
MaxLen=MM;
if(n>MaxLen) exit(l) ?
a=new int[MaxLen];
—(1)—; 〃以i为循环变量把aa数组中每个元素值
//传送给a数组的对应元素中
}
〜A();
int GetValue(int i) (return //函数体返回 的值
} ?
—(2) //析构函数的类外定义
void mainO
(
int b[10]= (1,2,3,4,5,6,7,8,9,10};
A r(b,10,10);
int i»s=0;
—(3) I 〃以i为循环变量,把r对象的a数据成员中的
〃每个元素值依次累加到s中
coutVV”s = ”VVsV Vendl;
}
(1)
(2)
(3)
得分[评巻
四、理解问答题,写出前三小题的程序运行结果和指出后两小题的程
序(或函数)所能实现的功能。(毎小题6分,共30分)
1.# include-<iostream. h>
const int T=6 > void mainO –
int itj;
for(i = l ;i< = T;i+=2){ for(j = 2;jV = T;j+=2) ( if(i+j<T) cout«, + ,; else coutVV’ * ‘;
}
}’
}
运行结果:
2.# includeCiostream. h> class CE {
private:
int a,bj
int getmaxO {return (a>b? a:b) j} public:
int c?
void SetValue(int xl ,int x2, int x3) { a=xl ; b=x2j c=x3;
)
int GetMaxO ;
};
int CE::GetMaxO {
int d = getmax(); return (d>c? d:c);
}
void main()
(
int x=5,y=12,z=8;
CE ex, * ep= &ex;
ex. SetValue(x,y»z); cout«ex. GetMax()«endl; ep—>SetValue(x+y »y—z,20); coutCCep—>GetMax(XCendl;
}
运行结果:
3,并 include<iostream. h〉
class A {
int afb;
public:
A(int aa, int bb) (a = aa? b = bb;}
float Multip(char op) (
switch(op) (
case ‘ + ‘: return a+b;
case ‘ — return a—b;
case ‘ * ‘ : return a * b;
case ‘/’: if(b! =O)return float(a)/b;
else (cout«M除数为 O!”VVendl; return 0;}
default: coutVV’\n,VVopVV”非法运算符!”VVendl;
return 0$
}
}
};
void mainO {
A x(10,4);
char a[6] = ” * /”;
int i=0?
while(a[i]) {
float k=x. Multip(a[i]);
if(k! =0) coutVVkVV”; i++;
)
cout«endlj
}
运行结果:
4.# include<.iostream. h>
void mainO
{
int i,p=l,s=0;
int Nj
cout< V”输入一个正整数:”;
cin»Nj for(i= 1 ; i< = N ; i+ + ) {
p * =ii
s+=p;
}
coutVVsV Vendl;
程序功能:
106
5.int f(const char * s)
int i = 0;
while( * s+ + )i+ + ;
return i;
};
程序功能:
鱼-分 寸卷人 五、编程题(每小题6分,共12分)
1.已知6<a<30,15<b<36,编写出一个主函数,求满足不定方程2a+5b=126的全部
整数组解。如(13, 20)就是一个整数组解,并以所给的样式输出每个解。
2.根据下面类中Search函数成员的原型和注释写出它的类外定义。
class AA (
int * a;
int n;
int MS;
public:
void InitAA(int int nn, int ms) (
if(nn>ms) (cout<;<wError! w<<endl; exit(l) ;} MS=msj
n=nn?
a=new int[MSj?
for(int i==0; i<n; i+ + ) a[i] = aa[ij;
}
int Search(int x); 〃从数组a的前n个元素中顺序査找值为x的元素,
〃若査找成功则返回元素的下标,否则返回一1。
试卷代号:1008
中央广播电视大学2004-2005学年度第二学期“开放本科”期末考试
计算机专业面向对象程序设计试题答案及评分标准
(供参考)
2005年7月
一、单项选择题(每小题1分,共16分)
1. c 2. C 3. C 4. D 5. A
6. D 7. A 8. C 9. B 10. C
11. A 12. D 13. C 14. C 15. A
16. D
二、填空题(毎空1分,共18分)
1.# include
2.325
3.1
4.40
5.函数体
6.4
7.c[3][0] c[3][2]
8.fp — > score
9.Private(或私有)
10.AA * AA:: abc()
11.(first+l)%MS
12.10
13.AB(AB&)
14.公有和保护 任何
15.0 1
注:13小题可附带任何一个名字的参数
三、 程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程
序后面的标号处。(毎小题6分,共24分)
评分标准:每空2分。
1.(1) b%i==O
(2)i++ (或++i 或 i = i + l)
(3)b> = i
2.(1) cin>> * p
(2)p+ + (或 + + p)
(3)q (或 q)
3.(1) q—>next
(2)p
(3)return p
4.(1) for(int i = 0? i<n; i+ + ) a[i] = aa[i]
(2)A::—AO (delete □%}
(3)for(i —0? iVIO; i+ + ) s+ =r. GetValue(i)
四、 理解问答题,写出前三小题的程序运行结果和指出后两小题的程序(或函数)所能实现的功
能。(毎小题6分,共30分)
1.++* + *****
2.12 〃3 分
20 //3 分
3.14 6 40 2. 5 〃每个数据正确得1分,全对得6分。
N
4. 计算并输出〉i!的值,其中N值由键盘输入。 〃按叙述完整程度给分
1=1
5.求出并返回字符指针参数s所指向的字符串长度。 //按叙述完整程度给分
五、编程题(毎小题6分,共12分)
评分标准:按编程完整程度酌情给分。
1.# include<iostream. h>
void main()
{
int a,b;
for(a=6;aV = 30; a+ + )
for(b=15;b< = 36 ;b+ +)
if(2 * a+5 * b= =126)
cout«,(,«a«\,«b«,),«endl;
}
2.int AA:: Search(int x)
{
int i;
for(i=0; i<n?i+ + )
if(a[i]= = x) return i;
return —1 ;
评论0