面向对象程序设计课程作业及答案_精品文档文档格式.doc
《面向对象程序设计课程作业及答案_精品文档文档格式.doc》由会员分享,可在线阅读,更多相关《面向对象程序设计课程作业及答案_精品文档文档格式.doc(16页珍藏版)》请在冰豆网上搜索。
"
<
sumOfArray<
endl;
}
intsum(intarray[],intlen)
intiSum=0;
for(inti=0;
C;
D)
E;
returniSum;
答案:
A #include<
iostream.h>
B intsumOfArray;
C i<
len
D i++
E iSum+=array[i];
阅读理解题
写出下列程序的运行结果:
//file1.cpp
staticinti=20;
intx;
staticintg(intp)
{
returni+p;
}
voidf(intv)
x=g(v);
//file2.cpp
#include<
externintx;
voidf(int);
voidmain()
inti=5;
f(i);
cout<
x;
回答以下问题:
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)
//在这里写出函数的实现
Node*AddNode(Node*&
head,intnewData)
//申请新的节点空间
Node*newNode=newNode;
if(newNode==NULL)
returnNULL;
//填充新节点的内容
newNode->
data=newData;
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<
x1<
'
'
x2<
endl;
}
intf1(inta[],intn)
inti,s=0;
for(i=0;
i<
n;
i++)s+=a[i];
returns;
Aintf1(inta[],intn);
Bf1(a,4)
改错题
1.下面的函数将浮点型指针参数para所指向的值赋给一个局部指针变量pFloat所指向的空间,然后输出*pFloat的值。
#include<
voidfunc(float*para)
float*pFloat;
pFloat=para;
cout<
pFloat;
错误为:
______________________________________________________
改正方法为:
__________________________________________________
______________________________________________________________
答案
没有给指针申请空间,就直接赋值
改正的方法为:
先为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为所要处理的字符串;
所给字符串中小写字母字符的个数
intCalcAlpha(char*str)
{ //在这里写上程序的实现
}
intCalcAlpha(char*str)
//判断字符指针是否为空
if(str==NULL)return0;
//记录小写字母字符个数的变量
intnum=0;
//依次检查各个字符,如果是小写字母,则总数加1
for(inti=0;
str[i]!
=0x0;
if(str[i])>
='
a'
&
&
str[i]<
z'
)
num++;
//返回数字字符个数
returnnum;
作业3:
1.函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。
3.错
2.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。
5.对
________A___________;
intf2(int*a,intn)
______B___________;
for(i=1;
i++)
if(max<
a[i])max=a[i];
returnmax;
intb[MM]={3,12,6,20,9,7,34,50,25,66};
_______C__________;
//求出b[4]至b[8]之间的最大值并赋给x1
_______D___________;
//求出b[0]至b[5]之间的最大值并赋给x2
AconstintMM=10;
Binti,max=a[0];
Cintx1=f