2015春电大《面向对象程序设计》综合习题(3)

时间:2024-04-30 10:27:50 5A范文网 浏览: 平时作业 我要投稿
面向对象程序设计综合习题(3)及答案

一、填空题
1. 关于面向对象系统分析,下列说法中不正确的是()。
A. 术语“面向对象分析”可以用缩写OOA表示
B. 面向对象分析阶段对问题域的描述比实现阶段更详细
C. 面向对象分析包括问题域分析和应用分析两个步骤
D. 面向对象分析需要识别对象的内部和外部特征
2. 在关键字public后面定义的成员为类的(   )成员。
A. 私有  B. 公用  C. 保护  D. 任何
3. 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(   )。
A. x.a  B. x.a()  C. x->a  D. x->a()
4. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(   )。
A. int AA::a()  B. int AA:a()
C. AA::a()  D. AA::int a()
5. 在多文件结构的程序中,通常把类的定义单独存放于(   )中。
A. 主文件  B. 实现文件  C. 库文件  D. 头文件
6. 一个C++程序文件的扩展名为(   )。
A. .h  B. .c  C. .cpp  D. .cp
7. 假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为(   )。
A. int  B. char  C. AA  D. AA*
8. 假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值(   )。
A. 已经被改变   B. 可能被改变
C. 不变 D. 受到函数调用的影响
9. 当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为(   )。
A. n  B. n+1  C. n-1  D. n-2
10. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾(即最后一个)元素的位置为(   )。
A. length+1  B. first+length
C. (first+length-1)%MS   D. (first+length)%MS
11. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结点的地址赋给(   )。
A. elemHead  B. elemTail
C. elemHead->next和elemHead D. elemTail->next和elemTail
12. 对于一个类的构造函数,其函数名与类名()。
A. 完全相同  B. 基本相同  C. 不相同  D. 无关系
13. 类的析构函数是一个对象被()时自动调用的。
A. 建立  B. 撤消  C. 赋值D. 引用
14. 假定AB为一个类,则执行 “AB x;”语句时将自动调用该类的()。
A. 带参构造函数  B. 无参构造函数   C. 拷贝构造函数   D. 赋值重载函数
15. 假定AB为一个类,则执行 “AB r1=r2;”语句时将自动调用该类的()。
A. 无参构造函数  B. 带参构造函数   C. 赋值重载函数   D. 拷贝构造函数
16. 假定一个类的构造函数为 “A(int aa, int bb) {a=aa; b=aa*bb;}”,则执行 “A  x(4,5);”语句后,x.a和x.b的值分别为()。
A. 4和5 B. 5和4  C. 4和20  D. 20和5
17. 假定一个类的构造函数为 “B(int ax, int bx): a(ax), b(bx) {}”,执行 “B x(1,2),y(3,4);x=y;”语句序列后x.a的值为()。
A. 1  B. 2  C. 3  D. 4
18. 对于任一个类,用户所能定义的构造函数的个数至多为()。
A. 0  B. 1  C. 2  D. 任意个
二、填空题
1. 若p指向x,则________与x的表示是等价的。
2. 假定p为指向二维数组int d[4][6]的指针,则p的类型为________。
3. 若y是x的引用,则对y的操作就是对_______的操作。
4. 执行char *p=new char(’a’)操作后,p所指向的数据对象的值为________。
5. 执行________操作将释放由p所指向的动态分配的数据空间。
6. 已知语句“cout<<s;”的输出是“apple”,则执行语句“cout<<s+2;”的输出结果为__________。
7. 与结构成员访问表达式p->name等价的表达式是____________。
8. 已知有定义“int x, a[]={5,7,9}, *pa=a;”,在执行“x=++*pa;”语句后,x的值是________。
9. 以面向对象方法构造的系统,其基本单位是__________。
10. 复杂对象可以由简单对象构成,这种现象称为__________。
11. 如果一个派生类的基类不止一个,则这种继承称为____________。
12. 面向对象软件开发的生命周期分为三个阶段,即分析、__________和__________。
13. 类中的数据成员的访问属性通常被指明为________。
14. 为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义为________。
15. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个________分隔符。
16. 成员函数的参数表在类作用域中,成员函数的返回值类型________类作用域中。
17. 若采用x.abc(y)表达式调用一个成员函数,在成员函数中使用的________就代表了类外的x对象。
18.在一个用数组实现的队列类中,包含有两个数据成员,一个指明队首元素位置,另一个指明____________。
19. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则删除一个元素后队首的位置为__________。
三、程序填空:
1. 已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[ ]要对下标是否越界进行检查。
class ARRAY{  
int *v;   //指向存放数组数据的空间
int s;//数组大小 
public:  
ARRAY(int a[], int n);
~ ARRAY(){delete []v;}
int size(){ return s;}
int& operator[](int n);
};
___(1)___ operator[](int n)  //[ ]的运算符成员函数定义
{
if(n<0 || ___(2)___) {cerr<<"下标越界!"; exit(1);}
return ___(3)___;
}

(1)(2)   (3)
2. 已知一个类的定义如下:
#include<iostream.h>
class AA {
int a[10];
int n;
public:
void SetA(int aa[], int nn); //用数组aa初始化数据成员a,
  //用nn初始化数据成员n
int MaxA();  //从数组a中前n个元素中查找最大值
void SortA();  //采用选择排序的方法对数组a中前n个元素
   //进行从小到大排序
void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
void PrintA();  //依次输出数组a中的前n个元素
};

该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。
int ____(1)_____
{
int x=a[0];
for(int i=1; i<n; i++)
  if(a[i]>x) ___(2)___;
___(3)___;
}

(1)   (2)   (3)
3. 已知一个类的定义如下:
#include<iostream.h>
class AA {
int a[10];
int n;
public:
void SetA(int aa[], int nn); //用数组aa初始化数据成员a,
  //用nn初始化数据成员n
int MaxA();  //从数组a中前n个元素中查找最大值
void SortA();  //采用选择排序的方法对数组a中前n个元素
   //进行从小到大排序
void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
void PrintA();  //依次输出数组a中的前n个元素
//最后输出一个换行
};

使用该类的主函数如下:
void main()
{
int a[10]={23,78,46,55,62,76,90,25,38,42};
AA x; 
___(1)___;
int m=___(2)___;
___(3)___;
cout<<m<<endl;
}
该程序运行结果为:
23 78 46 55 62 76
78

(1) (2)   (3)
四、写出程序运行结果
1. #include<iostream.h>
void main() {
int a[10]={76,83,54,62,40,75,90,92,77,84};
int b[4]={60,70,90,101};
int c[4]={0};
for(int i=0;i<10;i++) {
  int j=0;
  while(a[i]>=b[j]) j++;
  c[j]++;
}
for(i=0;i<4;i++) cout<<c[i]<<’ ’;
cout<<endl;
}
2. #include<iostream.h>
void main()
{
    char s[3][5]={"1234","abcd","+-*/"}; 
char *p[3];
for(int I=0;I<3;I++) p[I]=s[I];
for(I=2;I>=0;I--) cout<<p[I]<<' ';
cout<<endl;
}
3. #include<iostream.h>
class CE {
  private:
int a,b;
int getmax() {return (a>b? a:b);}
  public:
int c;
void SetValue(int x1,int x2, int x3) {
a=x1; b=x2; c=x3;
}
int GetMax();
};
int CE::GetMax() {
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);
cout<<ep->GetMax()<<endl;
}
五、指出程序或函数的功能
1. void f4(char a[M][N])
{
int c1,c2,c3;
c1=c2=c3=0;
for(int i=0;i<M;i++)
  if(strlen(a[i])<5) c1++;
  else if(strlen(a[i])>=5 && strlen(a[i])<15) c2++;
  else c3++;
cout<<c1<<’ ’<<c2<<’ ’<<c3<<endl;
}
2. char* f8(char* str1, const char* str2)
{
int i=0,j=0;
while(str1[i]) i++;
while(str2[j]) str1[i++]=str2[j++] ;
str1[i]='/0';
return str1;
}
六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误。
1. 下面程序段第10-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。
  class A {//1行
int a;//2行 
  public:  //3行
A(int aa=0):a(aa){}   //4行
  };   //5行
  class B {//6行
int a,b;  //7行
const int c;  //8行
A d;  //9行
   public: //10行
B():c(0) {a=b=0;} //11行
B(int aa, int bb):d(aa+bb) {  //12行
a=aa; b=bb; c=aa-bb;   //13行
} //14行
   }   //15行
   B a,b(1,2); //16行
   B x=a,y(b),z(1,2,3),;   //17行  

错误行的行号为______、________和________。
错误原因分别为_____________________、______________________
和_____________________。
七、编程:
1. 根据下面类中CompareBig 函数成员的原型和注释写出它的类外定义。
class AA {
int* a;
int n;
int MS;
public:
void InitAA(int aa[], int nn, int ms) {
  if(nn>ms) {cout<<"Error!"<<endl; exit(1);}
  MS=ms;
  n=nn;
  a=new int[MS];
  for(int i=0; i<MS; i++) a[i]=aa[i];
}
int CompareBig(AA b);  //比较*this与b的大小,从前向后按两数组
   //中的对应元素比较,若*this中元素值大则返回1,若b中
   //元素值大则返回-1,若相等则继续比较下一个元素,直到
   //一个数组中无元素比较,此时若两者的n值相同则返回0,
   //否则若*this中的n值大则返回1,若b中的n值大则返回-1。
};

   2. 根据下面类中构造函数的原型和注释写出它的类外定义。
class Array {
int *a;  //指向动态分配的整型数组空间
int n;//记录数组长度
public:
Array(int aa[], int nn);  //构造函数,利用aa数组长度nn初始化n,
   //利用aa数组初始化a所指向的数组空间
Array(Array& aa);   //拷贝构造函数
Array& Give(Array& aa);  //实现aa赋值给*this的功能并返回*this
Array Uion(Array& aa);   //实现*this和aa中的数组合并的
  //功能,把合并结果存入临时对象并返回
int Lenth() {return n;}  //返回数组长度
void Print() {   //输出数组
  for(int i=0; i<n; i++)
   cout<<a[i]<<' ';
cout<<endl;
}
};

来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。

相关文章:

五字加一笔能写出多少字04-30

come的反义词04-30

跟牛谐音的词语,成语04-30

“庖丁解牛”这个成语的起源?04-30

2015春黑龙江电大《行政领导学A》单元练习四04-30

2015春黑龙江电大《行政领导学A》单元练习三04-30

敢作敢当和敢做敢当的区别04-30

引狼入室是指谁04-30

at table的同义词04-30

荔枝谱的作者是谁04-30

热搜文章
最新文章