软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷15

0
收藏   分享
  • 卷面总分:75分
  • 试卷类型:模拟考试
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:12次
  • 作答时间:150分钟
试卷简介
试卷预览
1

阅读下列程序说明和C++代码,将应填入(n)处。

  【说明】

 源程序中定义了Circle类与Money类,Circle类可对半径为r的圆进行周长与面积的计算,而Money类用于计算一圆形游泳池的造价。游泳池四周有原形过道,过道外围上栅栏,过道宽度为3米,根据键入的游泳池半径,每米栅栏价格及每平方米过道价格,即可计算出游泳池的造价。请按要求完成下列操作,将程序补充完整。

 ①定义符号常量PI(值为3.14159f)与WIDTH(值为3.00f),分别用于表示圆周率与过道的固定宽度。

 ②定义Circle类默认构造函数,把私有成员radius初始化为参数r的值。

 ③完成Money类默认构造函数的定义,把私有成员FencePrice(每米栅栏的价格)、ConcretePrice(每平方米过道的价格)初始化为参数f,c的值。

 ④完成Money类成员函数float Money::TotalMoney(float fencelen,float conarea)的定义,根据参数fencelen(栅栏的长度)和conarea(过道的面积),返回栅栏与过道的总造价。

 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

 源程序文件test4.cpp清单如下:

 #include<iostream.h>

  (1) 

 class Circle

 {

 private:

  float radius;

 public:

   (2) 

  float Circumference(){return 2 * P| * radius;}

  float Area(){return P|*radius * radius;}

 };

 class Money

 {

 private:

  float FencePrice;

  float ConcretePrice;

 public:

  Money(float f,float c);

  float Tota|Money(float fencelen, float conarea);

 };

 Money::Money(float f,float c)

 {

   (3) 

 }

 float Money::Tota|Money(float fencelen, float conarea)

 {

   (4) 

 }

 void main( )

 {

   float radius, fence, concrete;

   cout. setf(ios:: fixed);

   cout. setf(ios:: showpoint);

   cout. precision (2);

   cout << "Enter the radius of the pool:";

   cin > > radius;

   cout << "Enter the FencePrice:";

   cin > > fence;

   cout << "Enter the ConcretePrice: ";

   cin > > concrete;

   Circle Pool(radius);

   Circle PoolRim(radius + WIDTH);

   Money mon( fence, concrete);

   float totalmoney = mon. TotalMoney( PoolRim. Circumference( ), ( PoolRim. Area ( ) - Pool.

   Area ( ) ) );

   cout << "The total money is RMB" << totalmoney << end|;

 }

1

阅读下列函数说明和C函数,将应填入(n)处。

  【函数3说明】

 函数DeleteNode(Bitree * r,int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:

 typedef struct Tnode{

 int data;  /*结点的键值*/

 struct Tnode * Lchild,*Rchild;   /*指向左、右子树的指针*/

 } * Bitree;

 在二叉查找树上删除一个结点时,要考虑三种情况:

 ①若待删除的结点p是叶子结点,则直接删除该结点;

 ②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点P;

 ③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。

 【函数3】

 int DeleteNode(Bitree * r,int e){

  Bitree p=*r,pp,s,c;

  while((1)){  /*从树根结点出发查找键值为e的结点*/

   pp=p;

   if(e<p->data)p=p->Lchild;

   else p=p->Rchild;

  {

  if(!p)return-1;      /*查找失败*/

  if(p->Lchild &&p->Rchild){/*处理情况③*/

   s=(2); pp=p;

   while((3)){pp=s;s=s->Rchild;}

   p->data=s->data;p=s;

  }

  /*处理情况①、②*/

  if((4))c=p->Lchild;

  else c=p->Rchild;

  if(p==*r)*r=c;

  else if((5))pp->Lchild=c;

   else pp->Rchild=c;

  free(p);

  return 0;

 }

1

阅读下列程序说明和C代码,将应填入(n)处。

  【程序5说明】

 设M叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分(设为一个字符)和用“()”括起来的各子树的列表(如有子树的话),各子列表间用“,”分隔。例如下面的三叉树可用列表a(b(c,d),e,f(g,h,i))表示。

 本程序输入列表,生成一棵M叉树,并由M叉树输出列表。假定输入无错误。

 【程序5】

 #include<Stdio.h>

 #include<Stdlib.h>

 #define M 3

 typedef struct node{char val;

            struct node,subTree[M];

 }NODE;

   char buf[255],*Str=buf;

   NODE * d=NULL

   NODE*makeTree()/*由列表生成M叉树*/

   {int k;NODE*s;

    s=(1);

    s->val= *Str++;

    for(k=0;k<M;k++)s->subTree[k]=NULL;

    if(* str='('){

       k=0;

       do{str++;

        s->sub Tree[k]=(2);

        if(*Str==')'){Str++;break;}

        k=k+1;

       }while((3));

      }

    return s;

   }

   void walkTree(NODE*t)/*由M又树输出列表*/

     {int i;

      if(t!=NULL){

       (4) 

      if(t->subTree[0]==NULL)return;

      putchar('(');

      for(i=0;i<M;i++){

      (5);

       if(i!=M-1&&t->subTree[i+1]!=NULL)

       putchar(',');

      }

      putchar(')');

   }

 }

 void main()

 {printf("Enter exp:");

  scanf("%s",str);

  d=makeTree();

  walkTree(d);putchar('\n");

 }