1008电大《面向对象程序设计》试题和答案200407

时间:2024-04-27 20:04:09 5A范文网 浏览: 复习资料 我要投稿
试卷代号:1008
中央广播电视大学2003-2004学年度第二学期"开放本科"期末考试
计科网络、计科应用、计科硬件专业 面向对象程序设计 试题
2004年7月
一、单项选择(每小题1分。共12分)
1.设x和y均为bool量,则x || y为假的条件是( )。
A.它们均为真 B.其中一个为真
C.它们均为假 D.其中一个为假
2.假定一个二维数组的定义语句为" int a [3][4]={{3,4),{2,8,6));",则元素a[1][2]
的值为( )。 ·
A.2 B.4
C.6 D.8
3.以下错误的描述是( )。
函数调用可以
A.出现在一个表达式中 B.出现在执行语句中
C.作为一个函数的实参 D.作为一个函数的形参
4.关于局部变量,下面说法正确的是( )。
A.定义该变量的程序文件中的函数都可以访问
B.定义该变量的函数中的定义处以下的任何语句都可以访问
C.定义该变量的复合语句中的定义处以下的任何语句都可以访问
D.定义该变量的函数中的定义处以上的任何语句都可以访问
5.假定p是具有int**类型的指针变量,则给p赋值的正确语句为( )。
A.p=new int; B.p=new int。;
C.p=new int**;D. p=new int[10];
6.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进
行相应的软件更新的难易程度叫做软件的( )。
A.可维护性 B.可复用性
C.兼容性 D.正确性
7.若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( .)放在
函数原型或函数头的前面。
A.in B.inline
C.inline D.InLiner
8.在一个用数组实现的队列类中,假定数组长度为MS,队酋元素位置为first,队列长度
为Length,则队尾的后一个位置为( )。
A.1ength+1 B.first + length
C.(first:十length~1)%MS D.(first,+ length)%MS
9.假定一个类的构造函数为"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
10.假定AB为一个类,则执行"AB*p=new AB(1,2);"语句时共调用该类构造函数的
次数为( )。
A.0 B.1
C.2 D.3
11.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( )。
A.籍加上类域的限定 B.不需加上类域的限定
  C.类域的限定可加可不加 D.不需要任何限定
  12.关于插入运算符<<的重载,下列说法不正确的是( )。
   A.运算符函数的返回值类型是ostream&。
   B.重载的运算符必须定义为类的成员函数。
   C.运算符函数的第一个参数的类型是ostream&。
   D.运算符函数有两个参数。
  二、填空(每空1分,共14分)
   1.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到--的开始位置。
   2.假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为--和
   3.执行switch语句时,在进行作为条件的表达式求值后,将从某个匹配的标号位置起向下执行,当碰到下一个标号位置时 执行。
   4.strlen("apple")的值为 ,strcmp("a'',"A")的值为 。
   5.C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和 区。
   6.假定a是一个一维指针数组,则a+i所指对象的地址比a大 字节。
   7.已知语句"cout<   。
   8.如果一个派生类只有一个唯一的基类,则这样的继承关系称为 。
   9.假定AA是一个类,"AA*abc()consl;"是该类中一个成员函数的原型,在该函数体中 向*this或其成员赋值。
   10.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为11.假定用户为类AB定义了一个构造函数"AB(int aa){a-aa;)",该构造函数实现对数
  据成员--的初始化。
   12.作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有 个操作数。
   三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号
   把合适的内容填写到程序下面相应标号的后面(每小题6分.共24分)。
  1.下面程序计算出"'署的值。
   # include< iostream . h>
   void main( )
   {
   double x,pl=1,p2=l,s-O;
   int i,j=1;
   cout <<"输入x的值:";
   cin>>x;
   for (i=l;i<=10;i++){
   pl*= (1) ;
   p2*= (2) ;
   s十一j*pl/p2; //j的值为(一1)
   j= (3) ;
   2.假定有定义为"struct NODE(int data;NODE*next;);",下面算法是依次显示输以L为表头指针的链表中各结点的值。
  void if(NODE*L)
  {
   for( (1) ;p!=NULL; (2) )
   '
   tout<< (3) <<'';
   cout<  )
       (1) (2) (3)
   3.假定有定义为"struct NODE(int data;NODE*next;};"。下面算法是把以L为表头
  指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。
   NODE* f8 (NODE*L)
   {
   if(L = = NULL)return NULL;
   NODE"p=NULL,'p=L,*t;
   while(q!= NULL){
   t = q;
   q= (1) ;
   t一>next= (2) ;
   P=t。
   )
   (3) ;
  4.已知一个利用数组实现栈的类定义如下:
  const int ARRAY-SIZE=10;
  class Stack {
  public:
  void Init()(top= -l;) //初始化栈为空
  void Push(int newElem); //向栈中压入一个元素
  int Pop(); //从栈顶弹出一个元素
  bool Empty(){ //判栈空
   if(top = = -1)return true;else return false;)
  int Depth()(return top+I;) //返回栈的深度
  void Print ();
   //按照后进先出原则依次输出栈中每个元素,直到栈空为止
  private;
   int elem[ARRAY_SIZE]; //用于保存堆栈元素的数组
   int top; //指明栈顶元素位置的指针
  };
   该类的Pop和Print函数的实现分别如下:
  -----------(1)----------{
   if(top = = -1){
   cout<<"栈空"<   exit(1); //中止运行
   }
   return--(2)--;
  }
  void Stack::Print(){
   while(!Empty())
   COUt<< (3) <<'';
   cout<  }
  (1) (2) (3)
  四、写出程序运行结果(每小题8分,共16分)
  1.#inctude
   int a[83={36,25,20,43,12,70,66,35);
   void main()
   {
   int sO,sl,s2;
   sO=sl=s2=O:
   for(int i=O;i<8;i++){
   switch(a[-i]%3)(
   case 0:sO+=a[i];break
   case 1:sl+=a[1];break;
   case 2:s2+=a[i];break
   }
   } .
   cout<   }
  2.#include
   #include
   class CD(
   char*a:
   int b;
   public:
   void Init(char*aa,int bb)
   {
   a=new charl-strlen(aa)十1];
   strcpy(a,aa):
   b=bb:
   }
   char*GetaO(return a;)
   iht Getb(){return b;)
   void Output(){cout<   };
   void main()
   {
   CD dx,dy;
   char a[20];
   dx.Init("abcdef",30);
   strcpy(a,dx.Geta());
   strcat(a,"xyz");
   dy.Init(a,dx.Getb()+20);
   dx.Output();
   dy.Output():
   }
  五、指出程序或函数的功能(每小题6分,共12分)
  1.#include<[ostream.h>
   #include
   #include
   void main()
   {
   int i=10,a;
   while(i>O){
   a=randO%90+10;
   int j,k=int(sqrt(a)+le一5); //sqrt(x)为求x的平方根函数
   for(j=2;j<=k:j++)
   if(a%j==O)break;
   if(j>k){cout<   )
   ) -
   2.void lnput(IntNode*&f)
   (
   int n;
   cout<<"从键盘给n输入一个整数;";
   do cin>>n;while(n   if(n= =0){f=NULL;return;)
   f=new IntNode;
   IntNode*p=f;
   cout<<"从键盘输入"<   whiIe(n一一){
   P=p-->next~new IntNode;
   cin>>p->data;
   }
   p->next=NULL;
   p=f;f=f-->next;delete p;
   }
   假定IntNode的类型定义为:
   struct IntNode{
   int data; //结点值域
   IntNode*next;//结点指针域
   };
  六、程序改错。请根据程序段或函数模块的功能改写个别地方的错误
   (6分)。
   假定要求下面程序的输出结果为"11/15",其主函数中存在着三行语句错误,请指出错误
  语句行的行号并改正错误行。
   #include
   class Franction(//定义分数类
   int nume; //定义分子 .
   int deno; //定义分母
   public:
   //把*this化简为最简分数,具体定义在另外文件中实现
   void FranSimpO;
   //返回两个分数*this和x之和,具体定义在另外文件中实现
   Franction FranAdd(const Franction&x);
   //置分数的分子和分母分别0和1
   void InitFranction(){nume=O}deno~-1;}
   //置分数的分子和分母分别n和d
   void InitFranction(int n,int d){nume=n;deno=d;}
   //输出一个分数
   void FranOutputO{cout<   };
   void main() //1行
   ( 11z行
   Franction fl,b,c, //3行
   f1.InitFranction(6,15); //4行
   b.1nitFranction(1); 115行
   c.InitFranction(); /16行
   c=FranAdd(a'b); //7行
   eout<  } //9行
  错误行的行号为 、 ; 。
  分别改正为 和 。
  七、编程(每小题8分,共16分l
   1.计算1+3+3。+...+3。。的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累
  加变量的标识符。
   2,根据下面类中Uion函数的原型和注释写出它的类外定义。
   class Arrayf
   int*a; //指向动态分配的整型数组空闯
   int n; //记录数组长度
   public:
   Array(im aaEJ,int nn); //构造函数,利用aa数组长度un初始化n,
   //利用aa数组初始化a所指向的数组空间
   Array(ArrayS.aa); //拷贝构造函数
   Array~Give(Array aa); //实现aa赋值给*this的功能并返回*this
   Array Uion(Array&aa); //实现*this和aa中的数组合并的功能,把合并
   //结果(其长度为两数组长度之和>存入临时对象并返回
   int LenthO{return n;) //返回数组长度
   void Print()( //输出数组
   for(int i=0;i   cout<   COIJt<   }
   };
  试卷代号:1008
   中央广播电视J<-9 2003--2004学年度第二学期"开放本科"期末考试
  计科网络、计科应用
  计科硬件
  专业
  面向对象程序设计试题答案及评分标准
  (供参考)
  一、单项选择(每小题1分。共12分)
  1.C 2.C 3.D 4.C
  5.B 6.A 7.B 8.D
  9.C 10.B 11.A 12.B
  二、填空(每空1分,共14分)
  1.下一行
  2.3 3.2
  3.不停止(或继续)
  4.5 1
  5.代码
  6.4*i
  7.H
  8.单继承
  9.不能够(不允许)
  lO.AB()(}
  11.a
  12.2
  三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序
   下面相应标号的后面(每小题6分,共24分)
  1.(1)X //2分
   (2)i 112分
   (3)--j 112分
   2.
   (1)NODE*p=L //z分
   (2)p=p-->next //2分
   (3)p--~>data //2分
   3.
   (1)q-->next //2分
   (2)p //2分
   (3)return P //z分
   4.
   (a)int Stack::Pop() 1/2分
   (b)elem[top--] //2分
   (c)PopO //2分
  四、写出程序运行结果(每小题8分,共16分)
   1.114 138 55 //每个数据占3分,全对给8分
   2.abedef 30 114分,每个数据2分
   abedefxyz 50 114分,每个数据2分
  五、指出程序或函数的功能(每小题6分,共12分)
   1.随机产生出lO个i0至ioo(~99)之间的素数并显示出来。
   2.首先从键盘上输入一个整数给n,然后依次输入n个整数建立以表头指针为f的链表。
   评分标准:根据叙述情况酌情给分。
  六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6分】。
   错误行的行号为5 7 8
   分别改正为b.InitFranction(1,3);c=a.FranAdd(b);c·FranOu。pu'()
   评分标准:共6个数据,每个数据1分。
  七、编程(每小题8分,共16分)
   评分标准:根据编程情况酌情给分。
   1.
   #include
   void main()
   {
   int i; //用i作为循环变量
   int p=1; //用P作为累乘变量
   int s=l; //用S作为累加循环变量
   for(i=l;i<=10;i十+)(P*=3;s+=P;}
   cout<   )
   2.
   Array Array::Uion(Array~aa){
   int k=n+aa,n;
   int*w=new int[k]:
   int i;
   for(i=O~i   for(i=O;i   Array r(w,k);
   return r;
   }
  

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

相关文章:

假如由你负责组织开展七一建党主题活动日,你策划了参观04-27

你是某市局办公室主任,办公室还有副主任老王,科员小李,今04-27

为了深化“放管服”改革,江苏省推出“好差评”微信小程04-27

你是信访局的,有人打来电话说有群众打电话举报,你说:“这04-27

疫情期间,身处国门战“疫”一线的海关人勇敢“逆行”留04-27

最近防疫工作不断升级,市级部门要求延缓休假,所有基层岗04-27

你是科长,手下有副科长老李和刚进入单位一年的小王,今天04-27

鸵鸟总是认为自己比別人都聪明。一天,它在沙滩上散步,突04-27

为了精准防控新型冠状病毒感染的肺炎疫情,现需要对入境04-27

2020年1月26日海关总署凌晨发布公告,宣布重新启动出入04-27

热搜文章
最新文章