面向对象程序设计课程作业及答案.docx

上传人:b****1 文档编号:10598311 上传时间:2023-05-26 格式:DOCX 页数:27 大小:25.41KB
下载 相关 举报
面向对象程序设计课程作业及答案.docx_第1页
第1页 / 共27页
面向对象程序设计课程作业及答案.docx_第2页
第2页 / 共27页
面向对象程序设计课程作业及答案.docx_第3页
第3页 / 共27页
面向对象程序设计课程作业及答案.docx_第4页
第4页 / 共27页
面向对象程序设计课程作业及答案.docx_第5页
第5页 / 共27页
面向对象程序设计课程作业及答案.docx_第6页
第6页 / 共27页
面向对象程序设计课程作业及答案.docx_第7页
第7页 / 共27页
面向对象程序设计课程作业及答案.docx_第8页
第8页 / 共27页
面向对象程序设计课程作业及答案.docx_第9页
第9页 / 共27页
面向对象程序设计课程作业及答案.docx_第10页
第10页 / 共27页
面向对象程序设计课程作业及答案.docx_第11页
第11页 / 共27页
面向对象程序设计课程作业及答案.docx_第12页
第12页 / 共27页
面向对象程序设计课程作业及答案.docx_第13页
第13页 / 共27页
面向对象程序设计课程作业及答案.docx_第14页
第14页 / 共27页
面向对象程序设计课程作业及答案.docx_第15页
第15页 / 共27页
面向对象程序设计课程作业及答案.docx_第16页
第16页 / 共27页
面向对象程序设计课程作业及答案.docx_第17页
第17页 / 共27页
面向对象程序设计课程作业及答案.docx_第18页
第18页 / 共27页
面向对象程序设计课程作业及答案.docx_第19页
第19页 / 共27页
面向对象程序设计课程作业及答案.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

面向对象程序设计课程作业及答案.docx

《面向对象程序设计课程作业及答案.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计课程作业及答案.docx(27页珍藏版)》请在冰点文库上搜索。

面向对象程序设计课程作业及答案.docx

面向对象程序设计课程作业及答案

《面向对象程序设计》课程作业及答案

中央电大理工部计算机教研室

作业1:

是非题

1.头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。

1.错

2.程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。

4.对

填空题

下面是一个求数组元素之和的程序。

主程序中定义并初始化了一个数组,然后计算该数组各元素的和,并输出结果。

函数sum计算数组元素之和。

填充程序中不完整的部分。

________A__________

intsum(int[],int);

voidmain()

{

intia[5]={2,3,6,8,10};

B;

sumOfArray=sum(ia,5);

cout<<"Sumofarray:

"<

}

intsum(intarray[],intlen)

{

intiSum=0;

for(inti=0;C;D)

E;

returniSum;

}

答案:

A#include

BintsumOfArray;

Ci

Di++

EiSum+=array[i];

阅读理解题

写出下列程序的运行结果:

//file1.cpp

staticinti=20;

intx;

staticintg(intp)

{

returni+p;

}

voidf(intv)

1

{

x=g(v);

}

//file2.cpp

#include

externintx;

voidf(int);

voidmain()

{

inti=5;

f(i);

cout<

}

回答以下问题:

1.程序的运行结果是什么样的?

2.为什么文件file2.cpp中要包含头文件

3.在函数main()中是否可以直接调用函数g()?

为什么?

4.如果把文件file1.cpp中的两个函数定义的位置换一下,程序是否正确?

为什么?

5.文件file1.cpp和file2.cpp中的变量i的作用域分别是怎样的?

在程序中直接标出

两个变量各自的作用域。

答案:

1.程序的运行结果:

25

因为程序中需要利用cout对象进行输出,而cout是在C++标准I/O库iostream中定义的类ostream的一个对象。

2在函数main()中不可以直接调用函数g(),因为g()是静态函数,只在它所在的文件内可见。

3如果把文件file1.cpp中的两个函数定义的位置换一下,程序不正确,因为C++规定所有使用的变量和函数需要先声明,后使用。

在函数f中用到了函数g,所以函数f不能出现在函数g的定义或声明之前。

文件file1.cpp中的变量i的作用域从它的定义开始到文件结束。

File2.cpp中的变量i的作用域从它的定义开始到main函数结束。

编程题

写一个函数,完成在链表末尾增加一个节点的操作。

函数的原型为:

Node*AddNode(Node*&head,intnewData);

其中,链表节点的定义如下:

structNode{

intdata;//存放数据

Node*next;//指向链表中的下一个节点

};

函数参数:

函数的第一个参数head指向链表的第一个节点,如果链表为空,则head的值为NULL。

第二个参数newData为要插入的新节点中存放的数据。

函数返回值:

当成功地插入新的节点时,函数返回指向新节点的指针,否则,如果不能申请到内存空间,则返回NULL。

Node*AddNode(Node*&head,intnewData)

{

//在这里写出函数的实现

2

}

答案:

Node*AddNode(Node*&head,intnewData)

{

//申请新的节点空间

Node*newNode=newNode;

if(newNode==NULL)

returnNULL;

//填充新节点的内容

newNode->data=newData;

newNode->next=NULL;

//插入到链表的结尾

if(head==NULL)

head=newNode;

else

{

//寻找链表的最后一个节点

Node*tail=head;

while(tail->next!

=NULL)

tail=tail->next;

//将新节点插入到最后

tail->next=newNode;

}

returnnewNode;

}

作业2:

是非题

1.在不同作用域中的变量可以同名。

2.派生类的成员函数可以直接访问基类的所有成员。

2.错

填空题

#include

___________A_____________;

voidmain()

{

inta[6]={2,4,8,6,9,14};

intx1=____B______;//调用f1函数求出a中前4各元素之和。

intx2=f1(a,6);

cout<

}

intf1(inta[],intn)

{

inti,s=0;

3

for(i=0;i

returns;

}

答案:

Aintf1(inta[],intn);

Bf1(a,4)

改错题

1.下面的函数将浮点型指针参数para所指向的值赋给一个局部指针变量pFloat所指向的空间,然后输出*pFloat的值。

#include

voidfunc(float*para)

{

float*pFloat;

pFloat=para;

cout<

}

错误为:

______________________________________________________

改正方法为:

__________________________________________________

______________________________________________________________

答案

错误为:

没有给指针申请空间,就直接赋值

改正的方法为:

先为pFloat申请空间,再赋值。

2.下列程序片段对二维数组的每个元素赋值

unsignedshortSomeArray[5][4];

for(inti=1;i<=5;i++)

for(intj=1;j<=4;j++)

SomeArray[i][j]=i+j;

错误为:

______________________________________________________

改正方法为:

__________________________________________________

______________________________________________________________

答案

错误为:

访问数组元素的下标不对

改正的方法为:

将两个for循环的循环初始值改为0,循环结束条件分别改为i<5和j<4。

编程题

写一个函数,找出给定字符串中小写字母字符的个数。

函数的原型为:

intCalcAlpha(char*str);

函数参数:

str为所要处理的字符串;

4

函数返回值:

所给字符串中小写字母字符的个数

intCalcAlpha(char*str)

{//在这里写上程序的实现

}

答案:

intCalcAlpha(char*str)

{

//判断字符指针是否为空

if(str==NULL)return0;

//记录小写字母字符个数的变量

intnum=0;

//依次检查各个字符,如果是小写字母,则总数加1

for(inti=0;str[i]!

=0x0;i++)

if(str[i])>='a'&&str[i]<='z')

num++;

//返回数字字符个数

returnnum;

}

作业3:

是非题

1.函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。

3.错

2.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。

5.对

填空题

#include

________A___________;

intf2(int*a,intn)

{

______B___________;

for(i=1;i

if(max

returnmax;

}

voidmain()

{

intb[MM]={3,12,6,20,9,7,34,50,25,66};

_______C__________;//求出b[4]至b[8]之间的最大值并赋给x1_______D___________;//求出b[0]至b[5]之间的最大值并赋给x2cout<

5

}

答案:

AconstintMM=10;

Binti,max=a[0];

Cintx1=f2(b+4,5);

Dintx2=f2(b,6);

阅读理解题

二、valarray是C++的标准模板库中的一个类模板,类模板的每个实例类实现了某个具体的数据类型的数组,如valarray是一个整型的数组类。

该类的使用和一般的数组非常类似,可以通过’[]’运算符来访问数组中的每个元素。

C++的标准模板库中还有一个模板函数abs(),其函数原型为:

template

valarrayabs(constvalarray&x);

该函数的作用是将作为参数的数组x的每个元素的值取绝对值,并返回得到的新的数组。

如原来的数组为:

4-1-30-34

将这个数组作为参数传递给函数abs后,函数返回的数组就变成:

413034

要求:

阅读下列程序,回答后面的问题。

/********************************************************************/

#include

#include//该头文件中定义了模板类valarray和模板函数abs()

#defineARRAY_SIZE10

typedefvalarrayINTVALARRAY;

voidmain()

{

INTVALARRAYval_array(ARRAY_SIZE);

//定义一长度为ARRAY_SIZE的数组对象

//赋初始值

for(inti=0;i

val_array[i]=-i;

cout<<"Sizeofval_array="<

cout<<"Thevaluesofval_arraybeforecallingabs():

\n";

for(i=0;i

cout<

cout<<"\n";

INTVALARRAYabs_array=abs(val_array);

cout<<"Theresultofval_arrayaftercallingabs():

\n";

for(i=0;i

cout<

6

cout<<"\n";

}

/*********************************************************************/

问题1:

写出程序的输出结果

问题2:

关于程序中的语句:

INTVALARRAYval_array(ARRAY_SIZE);

下列说法哪些是正确的,哪些是错误的?

在下表相应的位置写上“对”或“错”

题号

A

B

C

D

E

对/错

(A)该语句定义了一个对象val_array,这个对象是类valarray的实例

(B)该语句说明了一个函数原型,函数的名字为val_array,参数为ARRAY_SIZE,函数的返回值类型为INTVALARRAY

(C)板类valarray一定有一个只带一个参数的构造函数

(D)模板类valarray一定有一个只带两个参数的构造函数

(E)ARRAY_SIZE将作为参数传递给val_array的构造函数,初始化val_array对象问题3:

(本小题共12分)下面是模板函数abs()的实现。

这个实现中有错误,指出错误

并写出正确的实现。

注意:

函数头是正确的,不要改变,所有的错误出现在函数体中。

template

valarrayabs(constvalarray&x)

{

for(inti=0;i

returnx;

}

这个函数实现中有以下错误:

(1)_____________________________________________________________________

(2)_____________________________________________________________________

(3)_____________________________________________________________________

正确的函数实现应为:

template

valarrayabs(constvalarray&x)

{

}

问题4:

(本小题3分)从上面的程序中,你可以推断出,valarray模板类中至少重载了哪个或哪些C++的运算符?

答:

重载了________________________________运算符

7

答案:

问题1:

程序的输出结果为:

Sizeofval_array=10

Thevaluesofval_arraybeforecallingabs():

0-1-2-3-4-5-6-7-8-9

Theresultofval_arrayaftercallingabs():

0123456789

问题2.

题号

A

B

C

D

E

对/错

问题3.答案:

该函数实现有以下错误:

(1)函数的参数x为const参数,不能在函数体中被改变

(2)在函数中应该创建一个临时对象,这个对象的内容由参数x的内容运算而来(3)函数返回的应是临时对象,而不是参数

正确的函数实现为:

template

valarrayabs(constvalarray&x)

{

INTVALARRAYret_array(x);//利用拷贝构造函数构造临时对象for(inti=0;i

{

if(ret_array[i]<0)

ret_array[i]*=-1;//取绝对值

}

returnret_array;//返回临时对象

}

或者

template

valarrayabs1(constvalarray&x)

{

INTVALARRAYret_array(x.size());//构造一个与x长度相同的对象for(inti=0;i

{

if(x[i]<0)

ret_array[i]=x[i]*(-1);//取绝对值

else

ret_array[i]=x[i];

}

returnret_array;//返回临时对象

}

8

问题4.答案:

重载了取数组下标的运算符’[]’

编程题

2.(本每小题15分)写一个函数,找出给定字符串中具有最大ASCII码的字符。

如字符串“world”中字符‘w’具有最大的ASCII码。

函数的原型为:

charMaxCharacter(char*str);

函数参数:

str指向所要处理的字符串;

函数返回值:

如果str不空,则返回具有最大ASCII码的字符,否则返回空字符0x0或’\0’。

charMaxCharacter(char*str)

{

}

答案:

程序可以有多种写法,下面是其中的四种第一种:

charMaxCharacter(char*str)

{

if(str==NULL)

return0x0;

charmaxChar=0x0;

for(inti=0;str[i]!

=0x0;i++){

if(str[i]>maxChar)

maxChar=str[i];

}

returnmaxChar;

}

第二种:

charMaxCharacter(char*str)

{

if(str==NULL)

return0x0;

charmaxChar=0x0;

for(inti=0;i

if(str[i]>maxChar)

maxChar=str[i];

}

returnmaxChar;

}

第三种:

9

charMaxCharacter(char*str)

{

if(str==NULL||str[0]==0x0)

return0x0;

charmaxChar=str[0];

for(inti=1;str[i]!

=0x0;i++)

{

if(str[i]>maxChar)

maxChar=str[i];

}

returnmaxChar;

}

第四种:

charMaxCharacter(char*str)

{

if(str==NULL||str[0]==0x0)

return0x0;

charmaxChar=str[0];

inti=1;

while(str[i]!

=0x0)

{

if(str[i]>maxChar)

maxChar=str[i];

i++;

}

returnmaxChar;

}

作业4:

是非题

1.函数重载既要求两函数参数对应的类型不同又要求参数个数不同。

2.在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态的特征。

填空题

#include

classAA{

private:

inta;

intb;

public:

AA(intaa,intbb=10)

{

_____A_____;//将aa的值赋给a

10

_____B_____;//将bb的值赋给b

}

______C________;

______D________;

};

intAA:

:

f1(){

returna+b;

}

intAA:

:

f2(){

returna*b;

}

voidmain()

{

AAx(2,3),y(8);

cout<

}

答案:

Aa=aa;

Bb=bb;

Cintf1();

Dintf2();

阅读理解题

三、下面的文件queue.h是一个队列类模板Queue的完整实现。

在这个文件中首先定义了一个队列元素类模板QueueItem,然后在这个类的基础上定义了队列类模板Queue。

在Queue中使用链表存放队列的各个元素,front指针指向链表的第一个节点元素,back指针指向链表的最后一个节点元素,成员函数add()将一个新节点元素加入到队列结尾,remove()从队列开头删除一个节点元素。

为方便起见,程序中加上了行号。

阅读程序,根据程序后面的问题作出相应解答。

/*------------------------------------------------------------------------------

------/

/*********************文件queue.h***********************//*------------------------------------------------------------------------------

------/

template

classQueue;

/*****************定义模板类QueueItem************/

template

classQueueItem

{

public:

QueueItem(constType&elem):

item(elem){}

QueueItem(){}

private:

Typeitem;

11

QueueItem*nextItem;

friendclassQueue;

};

/*****************定义模板类Queue************/template

classQueue{

public:

Queue():

front(NULL),____(A)_____{}

~Queue();

Typeremove();

voidadd(constType&);

boolis_empty()const{return____(B)______;}private:

QueueItem*front;

Que

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2