一起答
主观

试题出自试卷《2013年上半年软考《程序员》下午模拟试卷二》
参考答案
查看试卷详情
相关试题
  1. 已知类SubClass的getSum方法返回其父类成员i与类SubClass成员i的和,类SuperClass中的getSum为纯虚拟函数,程序中的第23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第15行且尚未执行第15行的语句时成员变量j的值,最后给出程序运行后的输出结果。

     [C++代码]

       01 #inclUde<iostream>

     02 using namespace std;

     03 class SuperClass {

     04 private:

     05  int i;

     06 publiC:

     07  SuperClass()(i=5;)

     08  virtual iht getValueO(return i ;)

     09 virtual int getSum()=0;

     10 };

     11 class SubClass:public SuperClass{

     12 int J ;

     13 public:

     14 SubClass(int j):j(0){

     15  (1) =j;  //用参数j的值更新数据成员

     16  };

     17 int getValue(){return j;)

     18  int getSum(){

     19  return (2) getValue()+j;

     20  }

     21 };

     22 void main(void){

     23  SuperClass s=new SubClass(-3);

     24 cout<<s->getValue()<<"";

     25 tout<<s->getSum()<<endl;

     26 delete s;

     27 }

  2. 已知类SubClass的getSum方法返回其父类成员i与类SubClass成员j的和;类SuperClass中的getSum为抽象函数,程序中的第14行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第22行且尚未执行第22行语句时成员变量i的值,最后给出程序运行后的输出结果。

     [Java代码]

     行号  代码

     01  public class UainJava{

     02 public static void main(String[]args){

     03  SuperClass s=new SubClass();

     04  System.out.printin(s.getValue());

     05  System.out.printIn(s.getSum()):

     06  }

     07 }

     08 abstract class SuperClass {

     09 private int i;

     10 public SuperClass(){i=5;}

     11 public int getValue(){

     12  return i:

     13 }

     14 public final abstract int getSum():

     15 }

     16 class SubClass extends SuperClass{

     17  int j;

     18  public SubClass(){

     19  this(-3);

     20 }

     21 public SubClass(int j){

     22   (1) .j=j;

     23 }

     24 publiC int getValue()(return j;}

     25 public int getSum(){

     26  return (2) .getValue()+j;

     27 }

     28

  3. 设一个环上有编号为0~n-1的n粒颜色不尽相同的珠子(每粒珠子颜色用字母表示,n粒珠子的颜色由输入的字符串表示)。从环上的某两粒珠子问剪开,则环上珠子形成一个序列然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续的同色珠子;然后从序列右端在剩下的珠子中取走所有连续的同色珠子,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子也不尽相同。

     本程序所求的是在环上哪个位置剪开,按上述规则可取走的珠子粒数最多。程序中用数组存储字符串。例如,10粒珠子颜色对应字符串为aaabbbadcc,在0号珠子前剪开,序列为aaabbbadcc,从左端取走3粒a色珠子,从右端取走2粒c色珠子,共取走5粒珠子。若在3号珠子前剪开,即bbbadccaaa,共取走6粒珠子。

     [C函数]

     int count(char *s,int start,int end)

     { int i,c=0,color:s[start],step=(start>end)?-1:1;

       for(i=Start;s[i]==color;i+=step){

        if(step>0 && i>end || (1) ) break;

         (2) ;

      }

      return c;

     }

     void main()

     { char t,s[120];

       int i,k,c,len,maxc,cut=0;

       printf("请输入环上代表不同颜色珠子字符串:");

       scanf("%s”,s);

       len=strlen(s);

       for(i=maxc=0; i<len;i++)(  /*尝试不同的剪开方式*/

        c=count(s,0,len-1);

        if(c<len) c+=count( (3) );

        if(c>maxc) { cut=i;maxc=c;)

        /*数组s的元素循环向左移动一个位置*/

        t=s[0];

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

        (5) ;

      }

      printf("在第%d号珠子前面剪开,可以取走%d个珠子.\n",cut,maxc);

     }

  4.  函数int factors(int n)的功能是判断整数n(n>=2)是否为完全数。如果n是完全数,则函数返回0,否则返回-1。

     所谓“完全数”是指整数n的所有因子(不包括n)之和等于n自身。例如,28的因子为1,2,4,7,14,而28=1+2+4+7+14,因此28是“完全数”。

     [C函数1]

     int factors(int n)

     { int i,s;

         for(i=1,s=0;i<=n/2;i++)

       if(n%i=0) (1)______;

       if( (2)______ )return 0;

       rerurn-1;

     }

     [说明2]

     函数int maxint(int a[],int k)的功能是用递归方法求指定数组中前k个元素的最大值,并作为函数值返回。

     [C函数2]

     int maxint(int a[],int k)

     { int t;

       if( (3)_____ ) return (4)_______;

       t=maxint(a+1, (5)______ );

       return(a[0]>t)?a[0]:t;

     }

  5. 已知一棵二叉树用二叉链表存储,t指向根节点,P指向树中任一节点。下列算法为输出从t到P之问路径上的节点。

     [C程序]

     #define MaxSize 1000

     typedef struct node {

       TelemType data ;

       struct node *ichiid,*rchiid;

     }BiNode,*BiTree;

     void Path(BiTree t,BiNode *P)

     {BiTree *stack[Maxsize],*stackl[Maxsize],*q;

      int tag[Maxsize],top=0,topl;

      q=t;

       /*通过先序遍历发现P*/

      do{while(q!=NULL &&q!=p)

       /*扫描左孩子,_日.相应的节点不为P*/

        { (1) ;

        stack[top]=q;

        tag[top]=0;

          (2) ;

        }

        if(top>0)

        { if(stack[top]=P) break;  /*找到P,栈底到栈顶为t到P*/

          if(tag[top]==1)top--;

           else { q=stack[top];

              q=q->rchiid;

              tag[top]=1;

             }

        }

     } (3) ;

     top--;topl=0;

     while(top>0) {

        q=stack[top];  /*反向打印准备*/

        topl++;

        (4) ;

        top--;

     }

     while( (5) ){  /*打印栈的内容*/

       q=stackl[topl]j

       printf(q->data);

       topl--;

     }

    }

  6. 阅读以下说明和流程图,回答问题1~3,将解答填入答题纸的对应栏内。

    说明:信息处理过程中经常需要将图片或汉字点阵作旋转处理。一个矩阵以顺时针方向旋转90°后可以形成另一个矩阵,如下图所示。

    在上述流程图a和b所示的算法中:

     (1) 矩阵A第i行第j列的元素A(i,j)被复制到矩阵B中的哪个位置?

     (2) A(i,j)后来又被复制到矩阵C中的哪个位置?

     (3) 填补流程图b中的空缺。