试卷代号1008
座位号
中央广播电视大学1999-2000学年度第二学期“开放教育(本科比期末考试(开)
计算机科学与技术专业面向对象程序设计试题
2000年7月
一、简单问答题,(共25“分)
(1)下列程序是否是一个正确的C++程序?为什么?「(5分)
(2)下面的程序共有17行,程序的每行前面加上了行号,程序中变量num. !.厘mp」对象,
silt和函数funcO的作用域范围分别是什么?在程序的下面用行号来回答。(20分)
1.# include<iostream. h>
2.intnum;
3.void func();
.4. void rnain()
5.{
6.char name[2o了;
7.int i;
8.for (i==0; i<20; i++)
9.{
10.char temp;
11.temp name[i];
12.cout<<temp;
13.}
14.}
15. void func()
16.{
17. cout<<“A function !”;
18.}
回答:
num的作用域为从第__行到第__行。
i的作用域为从第__行到第___行。
temp的作用域为从第____行到第_____行。
cout的作用域为从第____行到第____行。
func的作用域为从第____行到第_____行。
得分|评卷人
二、下面程序的功能为:从键盘读入若干整数,计算并输出所读入数中正整数的平均值,忽略输入数中的负数。当输入的值为0时,结束输入。
比如从键盘输入以下数
1· -4 -2 3 4 6 0
则输出内容为:
The average of non-negative number is 3.5
仔细阅读程序,填充其中没有完成的部分。注意以下几点:
(1)输入数中的负数被忽略
(⑵输出的平均值不能省略小数部分.
(每个填空4分,共20分)
/*******计算输人数中的正整数的和,直到读人一个0为止。*******
**************输出这些正整数的平均值*******/
A
.void main(
int iValue;!/当前输入的整数值·
int sum=0;/输人的正整数的和
__B_;`Ⅱ/统计输人的正整数的个数.
while (1)
cin>>iValue;
if (__C_)
continue;
if (iValue ==0) .
__D_
: sum+=iValue//l计算和
‘num十十;
}
cout<<“\nThe average of non-negative number is”<<__E__;
·在下面写出答案:
A__________________
B__________________
C__________________
D__________________
E__________________
三、下面是一个类Circle的定义,它有一个整型成员变量radius,有一个无参构造函数`迷包括存取radius ‘的两个函数GetRadius()和 SetRadius(),程序中己经为Circle定义了大多数成员函数。仔细阅读类的定`文梦然后完成后面的四个小题
(每小题5分,共15分)
class Circle.
public:
Circle();radius(5){}.
void SetRadius(int r) { radius=r;}
int GetRadius() {return radius ;}
private:
int radius;//圆的半径
};
.(1)为上面的类增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数。
在下面写出在类的定义体中增加构造函数定义的语句:
在下面写出构造函数的实现:
(2)为类增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序
Circle c;
c. SetRadius(5);
c.Print();
将输出:·
The circle has radius ot 5!
在下面写出在类的定义体中增加的成员函数定义的语句:
在下面写出函数的实现:
(3)为炎里载猫人还舁付,便得它完成的工作和上面Print函数类似。例如’下面的序片没:·
Circle c;
c. SetRadius(5);
cout<<c
将产生输出:
The circle has radius of 5! .
在下面写出在类的定义体中增加的成员函数定义的语句:
在下面写出函数的实现:
四、找错题。(共.20分)·
(1)下列程序中包含三个错误,找出它们并说明错误原因。(程序的每一行前加上了行号,你可以通过说明行号来指出错误位置。(12分)∶
1. class TV
2.{
3 pubic:
4.. void SetStation (int Station ) { itsStation=Station; }
5.int GetStation()const freturn itsStation; }
6____private:.
7. int itsStation;
8.};
9.
10. void main()
11.{
12.TVmyTV;
13.myTV.itsStation=9;
14.TV.SetStation(10);
15.. TV rmyOtherTv(2);
16.}
错误1:__________________
错误2:__________________
错误3:__________________
(2)传递给main 函数的参数表argv,是一个字符数组,数组的每一个元素是程序的名字
下面的代码从argv[0]中取出程序的名字;并将它赋给一个字符指针。(4分). #include<iostream.h>
include<string.h>
void main(int argc,char ” argv[])
{
char “. program _ name;
strcpy(program _ name,argv[o]);
cout<<“Program name:”program ‘_name;
错误为:________________
改正的方法为(写出一种改正方法):·
________________________________________________
(3)下面的程序定义了一-个交换两个浮点数的函数swap,并在主函数中调用这个函数进·行两个浮点数的交换。(4分)
void swap(float &a,float &b);
void main()
{
float a =1, b=2;
swap(&a,&.b);
}
void swap(float & a,. float&b)
{
float temp=a;
a=b;
b=temp;
}
错误为_________________________________________________
改正方法为:________________________________________________
五、下面的两个文件完成了类File的定义。文件file.h中定义了File类,文件file.cpp 实现了类的一部分成员函数。还有一些成员函数需要由你去完成。仔细阅读所给的程序,按照后面的要求,一步步完善类File的定义。(每小题5分,共20分)
.
************************************************************************
文件 file, h
《ass File { >
private:
char file namet64j ; 〃文件名
t
char * contents ; 〃文件内容
public:
. • ‘
J I.
File (char * filename);
•〜File();
.
・ ‘气
〃将文件source的内容复制到文件target中
•* 了「.
friend bool copy (File & source, File & target); “
〃设置文件内容为new _contents指向的内容
V
bool set contents (char * new contents);
. +
};/*********************************************£****************************/
/***************%*********************************关*****************朴*****/
〃文件 filexpp
# include Vstring. h> # include “file.h”
〃功能:设置文件内容为new . contents指向的内容
〃返回值:true:正常设置,返回false:内存空间不够
bool File:: set contents (char * new contents). … ・・ ‘・ ‘ 、•
• >3
delete 口 contents;* 〃释放现有空间
contents—new char[(strlen(new _contents) + l)];・
‘ • • •
.
if (contents — NULL)
*
• ”
• ;
t
return false ;
, A A □
‘ p ‘ “ • , ‘ n –
strcpy(contents, new contents);
— – :;n’
w
a
return true;
• *
.
} ‘
.、 。
r e ・
-〃还有一些函数没有实现 *
・ ‘ ‘ ・ –
.
/**必**************************************************************切********/
. °
* @ •
(1)利用函数set contents.实现copy函数。
V)
(2)为了保证文件对象在开始生命期时保持正确的状态,应该正确地定义构造函数。在下
* ・ •
面补足类File的构造函数的实现。 ―
File:: File (char * name) … . ….
* * f ‘
(3)为了保证文件对象退出生命期前正确释放空向,应该正确地定义析构函数。写出类,
File的析构函数的定义。
(4)如果想要为类File定义一个派生类Executable,表示可执行文件,在Executable的成
员函数中想直接访问File的成员contents和file name,应该如何修改类File的定义?(不需
要写出修改后的类定义,只要说明如何修改)
试卷代号:1008
中央广播电视大学1999-—2000学年度第二学期“开放教育(本科)”期末考试(开)
计算机科学与技术专业面向对象程序设计” .
试题答案及评分标准
(供参考)
2000年7月
1)每小题的得分都有语法分和语义分。
2)语法错误不影响语义分的取得;但语义的完全错误可能导致整个程序的不正确,因此当
*
语义完全错误时了语法分也得不到亍 一 、*;: 3)语法错误指的是一些不影响程序结构和程序意义的小的错误,如…
•标识符的误写,如:将void写成viod, float写成flaot等,“
•括号的不匹配,如忘了写,尸或者’)‘等
•将::写成”或者将:写成::等
4) 语法错误一般每个错误扣“0;5芬;怎巽折海芬数次超莊庭不筋盲味窥是商奮法航
5) 语义错误可能有很多种,要根据具体情况具体分析f可能是产山*哉”d…
a
•数据类型选择的错误,如变量或函数的参数或函数的返回值
念关甦符丕倉歩豊枣顼噢忠竪讎member?呼卷风顶笑嚙
答案和评分标准,
一、简单问答题
(1)是正确的C+ +程序。因为它具有必须的main函数,并且函数语法正确。
・;t*A二 nn xx- f—5 r-t “,&、,・,,.• . -*-*
评分标准:本小题共5分
1)答不是正确的C+ +程序,不给分
2)答是正确的C++惠序j给'”芬漏藉原囱罡福,给3芬;”T : EK.
(2)作用域范围分别为:
num的作用域为从第…2.行到第摂8行。
i 的作用域为从第7行到第14行。
temp的作用域为从第空—行到第13行厂..
coat的作用域为从第-1..行到第・1私行。二<
F用域为从第3行到第18-行….一
评分标准:本小题共20分,每写对一个填空得2分。 “d —”
二、答案:
A # include Viostream. h> ‘
B int num=0
C iValue<0
D break
E 1. 0* sum/num 或者 (float)sum/num 或者 (double)sum/num ,
评分标准:本题共20分,每个填空答对得4分。
1)小的语法错误每个扣0.5分。
• .芸 \ —
(1)在类的定义体中增加构造函数定叉曲语句;J
Circle(int rad);
或者:
Circle(int);
J (,二5 * SO ・S :Hb^7 r
Circle:: Circle (int rad) : radius (rad)
I)
Circle::Circle(int rad)
radius == rad;
评分标准:本小题共5分
1)函数原型正确给2分,函数实现正确绐斐分;含
2) 构造函数的参数名可以由学生自己滨定熊必赣碌确缺麻浪糖;
.
3) 成员radius的赋值可以在函数体中进行;也瞰茬歳员初始化参薮羨中进行了少
° “,七 ** / f 二一八 l i
-(2)在类的定义体中增加成员函数定义的语句:
void Print();
函数的实现:
void Circle::Print()
cout«uThe circle has radius oP’WrSdius W”! \n”;
评分标准’本小题共5分
1)函数原型正确给2分,函数实现正确给3分;
;H
2)语法占2分。
3)参数和返回值类型错误,每处扣1分。
(3)在类的定义体中增加的语句为:
V
friend ostream & operatorVV(ostream & os. Circle & c); 函数的实现为:
«
ostream & operatorVV(ostream & os^ Circle & c)
coutVV”The circle has radius of “VVc. radiusVV”! \n”; return os;
}
评分标准:本小题共5分
孫翌擊愿繆嘯誉組憩箸臍整踱
2) 每少-導”^洗籍格擊”知篦卄
3) 函数体中return语句错误,扣2分。
^ 郭蒔任耆延家蓉鲤茴
4) 其他小错误,每个扣0.5分。
法夹:扮J
(1)答案:
e &叉点怎女去;法亦不貢会击阳心小、m £ 世提糅的何flfq捋麒料勢y:邛蝦喜感矗瓣戛彗邮
bE@
2)第14行有错误。不能通过类名来访问SetStation函数,必须通过•对象来访问W
3)第15行有错误事类’TV没有定义具有二不参薮嗣遜爾数,只肴系统弟供葩默认构造
函数,所以不能这样构疯薮
X’ ‘ ” 三-丁―淫. L 评分标准;本小题共12分,每找出一个错误,并正确说明原因,给4分。
*:qM;空三定…宛、’
1) 正确地找出错误的行号,给2分,正确地说明错误原因,给&允….
;二萼 刁宀另?■茶心口二三八―—”:、臨卩f %1 -・‘j必$
2) 原因只需要指出要点,要点在答案中已经用粗体给出孔心””,”;=;負:
(2)答案
1** *
错误为:program _ name是一个字符指针,区没有指咼合法的空间,不能直接赋值。
改正的方法为:将program _ nanie定义为字符数组
或者:先从堆中为program _name申请需要的字符空间,然后再使用°
评分标准:本小题共4分。找出错误给2分.说明改正的方法给2分。只需要说明一种改
正方法。
•・
(3)错误为:main函数中调用syrap函數时,参数传递的方式不对一
改正的方式为:将调用swap(&a, &b)改成swap (a, b)
评分标准:本小题共4分。找出错误给2分,说明改正的方法给2分。’・
五、
XDcopy函数的实现为:
• • , – •
bool copy (File & source, File & target)
return target* set contents (source, contents);
)
或者
a a s
r : –
• <
bool copy (File & sourcet File & target)
{
<
bool result=target. set contents (source, contents);
return result ;
评分标准:本小题5分。,’;
* ・ •
1)不使用set contents实现copy函数的,不给分 2)语法错误最多扣2分 3)不返回结果的,扣2分
4)调用set contents方式不正确的,扣2分
(2)在构造函数体中’增加下面两句*
strcpy (file name 9 name ) ; •
contents=NULL ; 评分标准:本小题5分。.
1)每写对一个语句,给2.5分。
2)语法错误最多扣2分 3)可以不使用strcpy,自己实现字符数组的复制”
(3)析构函数的定义为:
File: :-File()
r”
6
(
£a
7
delete [ , J contents;
}
评分标准:本小题5分。
1) 析构函数头正确,给2分,函数仲止佛,缩3硏
.
2) 语法错误最多扣2分
(4)修改方法为:将类File的私有成员file _ name和contents变成保护成员。
a
c
评分标准:本小题5分。答对给分,答错不给分。 :
评论0