试卷代号:1008
中央广播电视大学2004-2005学年度第一学期“开放本科”期末考试
计算机专业面向对象程序设计试题
2005年1月
一、单项选择题(每小题1分,共16分)
1.以下标识符中不全是保留字的是()。
A. case for int
B. defaultthen while
C. boolclass long
D. gotoreturn char
2.设x是一个bool型的逻辑量,y的值为10,则表达式x &.&. y的值为().
A. 1
B. o
C.与x值相同
D.与x值相反
3.假定下列x和y均为int型变量,则不正确的赋值为()。
A. x十—y十十
B. x十十一y++
c. x=++y
·D.十十x=++y
4.若定义了函数double * function(),则函数function的返回值为()。
A、实数型
B。实数的地址
C.指向函数的指针
D.函数的地址
5.以下关于函数模板叙述正确的是()。.
A.函数的模板也是一个具体的函数
B.函数模板的类型参数与函数的参数是同一个概念
C.通过使用不同的类型参数,函数模板可以生成不同类型的具体函数
D.用函数模板定义的函数没有类型
6.若用数组名作为函数调用的实参,传递给形参的是()。
A.数组的首地址
B。数组中第一个元素的值
C.数组全部元素的值
D.数组元素的个数
7.预处理命令在程序中都是以(>符号开头的。
A.*
B#
c. &
D. @
8.假定p指向的字符串为“string”若要输出这个字符串的地址值,则使用()。
A. cout<<*p;
B cout<<p
C. cout<<&p;
D. cout<<(void * )p
9,假定变量b和pb定义为“int b[10],* pb=b;”,要将24赋值给b[1]元素中,不正确的语句是().
A. * (pb+1)=24;
B * (b+1)=24;
C. *++b=24;
D.*++pb=24;
10.面向对象软件开发中使用的OOA表示().
A,面向对象分析
B面向对象设计
C.面向对象语言
D.面向对象方法
11.在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于()中。
A.主文件
B实现文件
C.库文件
D.头文件
12.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next 表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插人时必须把新结点的地址赋给().
A. elemHeadelemTail
B elemTail
C. elemHead一>next和elemTail
D. elemTail- >next和elemTail
13.假定AB为一个类,则( )为该类的拷贝构造函数的原型说明。
A. ABCAB x);
B.AB(AB& x);
C. void AB(AB& x);
D. AB(int x);
14.设px是指向一个类对象的指针变量,则执行“delete px;”语句时,将自动调用该类的
A.无参构造函数
B。带参构造函数
C析构函数
D.拷贝构造函数
15、假定AB为一个类,px为指向该类的一-个含有n个对象的动态数组的指·针,则执行“delete[]px;”语句时共调用该类析构函数的次数为()。
A. 0
B.1
C. n
D. n十1
16.一个类的友元不是该类的成员,与该类的关系密切,所以它().
A、有this指针,有默认操作的对象
B没有this指针,可以有默认操作的对象
C.有this指针,不能执行默认操作
D.没有this指针,也就没有默认操作的对象
二、填空题(每空1分,共18分)
1.用于输岀表达式值的标准输出流对象是 。
2.假定x=5,y=6,则表达式x * y的值为 。
3.假定x是一个逻辑量,则x | | true的值为 。
4.在switch语句中,每个语句标号所含关键字case后面的表达式必须是 =
5.若a是一个字符数组,则向屏幕输出a中所存字符串的表达式语句为
6.C+ +提供的预处理命令有宏定义命令,条件编译命令和 命令。
7.假定a是一个一维数组,则a[i]的指针,访问方式为 。
8.变量v定义为“double v=23. 4;”,要使指针pv指向v,则定义pv的语句为
9.在C+ +中,编译时的多态性是通过 实现的,而运行时的多态性则是通 过 实现的。
10.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数 名前必须加上 和两个冒号分隔符。
11.若采用x. abc(y)表达式调用一个成员函数,在成员函数中使用的 就代表了 类外的x对象。
12.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为
13.对类中对象成员的初始化是通过在构造函数中给出的 来实现的。
14.假定用户只为类AB定义了一个构造函数“AB(int aa, int bb=0) {a = aa; b = bb;}”, 则定义该类的对象时,其实参表中至多带有 个实参。
15.一个单目运算符作为类的成员函数重载时带有 个参数;如果作为独立函数 重载,则带有 个参数。
16.重载插入运算符”VV”或抽取运算符”>>’‘时,其运算符函数的参数有 个。
得分评巻人
三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标
号把合适的内容填写到程序后面的标号处。(每小题6分,共24
分)
1.釆用辗转相除法求出两个整数的最大公约数。
井 include<iostream. h>
void main ()
(
int a,b;
coutVV “请输入两彳正整数:七
cin>>a>>b;
while(a< = 0 I I (1) ) (cout«M重新输入cin»a»b;) while(b) (
int r;
r=a%b;
—(2) ;—(3) ; 〃分别修改a和b的值
}
cout«a<<endl; 〃输岀最大公约数
)
(1)
(2)
(3)
2.用插入排序方法对table指计数组中size个指针所指向的字符申进行按升序排序的算
法。
void sort(char ‘* table口 , int size) (
£or(int i=l, (1) ; i+ + )( char * p=table[i];
£or(int j = i一l;j> = 0 ; j )
if(strcmp(p, tableEj] ) <0) (2) else break ;
table[j + l]= (3) ;
(1)
(2)
3 .请补充完整如下的类定义:
class A (
char * a;
public:
—(1)— //定义无参构造函数,使a的值为空
A(char * aa) (
a— (2) ;
strcpy(a,aa); 〃用aa所指字符串初始化a所指向的动态存储空间 }
(3)— //定义析构函数,删除a所指向的动态存储空间 (1)
(2)
(3)
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; totalweight+ = weight;
〜Goods () (totalweight 一= weight;}
char* GetN () ( (1) ;} //返回商品名称
int GetWO {return weight;)
(2) GetTotaLWeight () ( 〃定义静态成员函数返回总重量 (3) ;
(1) (2) (3)
得分评卷人
四、理解问答题,写出前三小题的程序运行结果和指出后两小题的程
序(或函数)所能实现的功能。(每小题6分,共30分)
1, # includeViomanip. h> const int M=20; void main()
(
int c2 ,c3 ,c5 ; c2 = c3 = c5 = 0; for(int i= 1 ; iV = M; i++) { if(i%2 = =0) c2 + + ; if(i%3 = =0) c3 + + ; if(i%5==0) c5 + +;
} cout«c2<<??«c3«,,«c5«endl;
}
运行结果:
2. # include<Ciostream. h>
# include Vstring. h>
class CD (
char * a;
int b;
public:
void Init(char * aa, int bb)
{
a = new charfstrlen(aa) +1J ;
strcpy(a?aa);
b=bb;
}
char * Geta () (return a;} 、
int Getb () (return b;}
void Output () {coutWaVV”VVbVVendl;} } dx;
void main()
(
CD dy;
dx. Init(“abcdef”,30);
dy. Init(wshenyafenw,3 * dx. Getb () +5);
dx. Output ();
dy. Output ();
}
运行结果:
3.井 include Viostream. h〉
class Base
{
public:
Base (int i,int j)( xO = i; yO=j;)
void Move(int x,int y)( xO+ = x; yO+=y;}
void Show(){ coutVV”Base(”VVxOVV”,”VVyOVV”)”VVendl;} private:
int xO,yO;
} 5
class Derived: private Base
(
public:
Derived(int i,int j,int m,int n) :Base(i,j)( x=m; y=n;)
void Show (){coutVV”Next(“VVxVV”,”VVyVV”)”VVend»}
void MovelO (Move(2,3) i)
void Showl()(Base::ShowO ;)
private:
int x,y?
};
// **************************test. cpp ***********************V/
井 include “test, h”
void main()
(
Base b(l,2);
b. ShowO j
Derived(1(3,4,10,15);
d. MovelO ;
d. ShowO ;
d. ShowlO I
)
运行结果:
4.void trans(int x)
(
char a[10j;
int i=0,rem;
do {
rem=x%16;
x=x/16;
•if(rem<10) a[i] = 48 + rem; //’O’字符的 ASCII 码为 48
else a[i] = 55 + rem; 〃’A’字符的 ASCII 码为 65
i+ +;
} while(x! =0);
while(i>0) coutVVa] i];
cout<C<Cendl;
}
函数功能:
5.int f8(const char * strl > const char * str2)
(
int i = 0; while(strl[i] && str2[i]) { if(strl[i]= =str2[i]) i++; else if(strl[i]>str2[i]) return 1 ; else return 一1 ;
},
if(strl[i] = = str2[i]) return 0; else if(strl[i]〉str2[i]) return 1 ; else return — 1 ;
)
函数功能:
得分I评卷人 .
五、编程题(毎小题6分,共12分)
1.编写一个主函数,求出从键盘上输入的10个整数中的最大值并输出,要求输人变量用 x表示,存储最大值的变量用max表示。
2.根据下面类中Give函数的原型和注释写出它的类外定义。
class Strings {
public:
Strings(char * str); 〃构造函数,利用str字符串长度初始化n,
〃利用str字符串初始化s所指的字符串空间
Strings(Strings& str) ; //拷贝构造函数
Strings&- Give(Strings& str);
Strings Uion(Strings&- str); 〃实现str赋值给* this的功能并返回* this
〃实现* this和str中的字符串合并的
‘ 〃功能,把合并结果存入临时对象并返回
int Lenth() (return n;} 〃返回字符串长度
void PrintO (cout<<s<<endl;} 〃输出字符串
试卷代号:1008
中央广播电视大学2004-2005学年度第一学期“开放本科”期末考试
计算机专业面向对象程序设计试题答案及评分标准
(供参考) 2005年1月
一、单项选择题(毎小题1分,共16分)
1. B 2. C 3. B 4. B 5. C
6. A 7. B
1 8. D 9. C 10. A
11. B 12. D 13. B 14. C 15. C
16. D
二、填空题(毎空1分,共18分)
L cout
2.25 ,
3.true〈或 1)
4.常量
5.coutVVa;
6.文件包含
7.* (a+i)
8.double *pv=&v孑
9.重载 虚函数
10.类名
11.* this
12.〜AB() (}
13.AB(AB&)
14.2
15.0 1
16.2
三、 程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程 序后面的标号处。(每小题6分,共24分)
评分标准:每空2分。
1.(1) bV = O
(2)a = b
(3)b=r
2.(1) i<size
(2)table[j +1 ] = table[j]
(3)p
3.(1) A() {a=0;}或 A():a(0){}注:数据 0 可用 NULL 代替
(2)new char[strlen(aa) 4-1]
(3)〜A() {delete }
4.(1) return gd„name
(2)static int
(3)return totalweight
四、 理解问答题,写出前三小题的程序运行结果和指出后两小题的程序(或函数)所能实现的功 能。(毎小题6分,共30分)
评分标准:第1小题中每个数据占2分,第2、3小题中每行数据占2介,第4.5小题根据 叙述完整程度给分。
1.10 6 4
2.abcdef 30
shenyafen 95
3.Based ,2)
Next(10,15)
Base(5,7)
4.此函数用于把十进制整数x转换为十六进制数字串并输出。
5.实现strcmp函数的功能,比较两个字符串strl和str2的大小,若strl较大则返回1, 若str2较大则返回一 1,若两者相等则返回0。
五、编程题(每小题6分,共12分)
评分标准:按编程完整程度酌情给分。
1.include<iostream. h>
void mainO
(
int x,max;
cin>>x;
max=x;
for(int i = 0;i<9;i+ + ) ( cin>>x; if(x>max) max=x;
}
cout V V “max ;”VVmaxV Vendl;
}
2.Strings^- Strings: :Give(Strings&. str) (
delete 口方
n=str. n;
s=new charEn+1];
st【cpy(s,str. s);
return * this;
评论0