列表

详情


阅读以下说明和c++代码,填充代码中的空缺,将解答填入答题纸的对应栏内。
【说明】
下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图 5-1 所示的8个点中,点(1,1) 与(2,0.5)是间距最近的点对。
【C++代码】
#include 
#include
using  namespace  std;
class  GPoint  {
private:
       double  x ,y;
public:
       void  setX(double  x)   {  this->x  =  x;   }
       void  setY(double  y)   {  this->y  =  y;  }
       double  getX()   {  return  this->x;   }
       double  getY()   {  return  this->y;   }
}
 
class ComputeDistance  {
public:
       double  distance(GPoint   a ,GPoint  b)    {
           return sqrt((a.getX() - b.getX())*(a .getX() - b.getX())
               + (a.getY() - b.getY())*(a.getY() - b.getY()));
       }
};
 
int main ()
{
       int i ,j ,numberOfPoints  =  0;
       cout << "输入点的个数:";
       cin  >>  numberOfpoints;
       (1)points = new GPoint[numberOfPoints]; //创建保存点坐标的数组
         memset(points ,0 ,sizeof(points));
         cout <<  "输入" <<   numberOfPoints<<  "个点的坐标 :";
         for  (i  =  0;  i <  numberOfPoints;   i++)  {
             double tmpx ,tmpy;
             cin>>tmpx>>tmpy;
             points[i]  .setX(tmpx);
             points[i]  .setY(tmpy);
      }
      (2)computeDistance = new ComputeDistance();
      int p1 = 0 ,p2=1; //p1 和 p2 用于表示距离最近的点对在数组中的下标
      double    shortestDistance    =    computeDistance->distance(points[p1] ,points[p2]);
      //计算每一对点之间的距离
      for (i = 0; i < numberOfPoints; i++)  {
      for (j = i+1; j  <(3); j++)   { 
            double tmpDistance = computeDistance->(4);
             if (       (5)   )      {
                p1 =  i; p2 =  j;
                shortestDistance  = tmpDistance;
            }
       }
  }
  cout << "距离最近的点对是: (" ;
   cout << points[p1] .getX() << "," << points[pl] .gety()<<")和("  ;
  cout << points [p2].getX () << "," << points [p2].gety () << ")" << endl;
  delete computeDistance;
  return 0;
}

参考答案: (1)GPoint *
(2)ComputeDistance*
(3)numberOfPoints
(4)distance(points[i],points[j])
(5)shortestDistance > tmpDistance

详细解析:

本题考查 C++语言程序设计的能力,涉及类、对象、函数的定义和相关操作。要求考生根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。
先考察题目说明。计算平面或空间中点之间的距离是目前很多应用中需要的,如 GPS 计算等。本题目简化了点之间距离的要求,其主要任务是计算井寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。数轴上两点之间的距离等于相应两数差的绝对值,而平面坐标系中两点之间的距离等于相应两点的横坐标差和纵坐标差的平方和的算数平方根。假设平面左边系中的两点P1(X1,Yl)和P2(X2 ,Y2) ,两者之间的距离
如题中图 5-1 所示的 8 个点中,点 (1,1)和(2,0.5) 之间的距离为
根据说明,点是一种类型,设计为类GPoint,点之间的距离设计为类ComputeDistance ,整体主逻辑代码在main函数中实现。类设计时,一般将属性设置为private,而对其的获取和更改等操作通过其中public方法进行。因此,在GPoint设计时,将x和y坐标设计为 private属性,将读取和设置 x 和 y 坐标的值设计为相应的get和set函数;在设计点之间的距离类ComputeDistance时,将两个 GPoint类的对象作为distance函数的参数传递。
main函数中实现控制流程,在程序运行时,先输入点的个数,创建相应大小的数组,再输入相应个数的一组互异的点的坐标,将点保存在一个数组中。C++中定义指向对象数组的指针的创建方式为
ClassName  * varName = new ClassName[numberOfArray];
用new创建对象数据返回的是指针类型,此处需要ClassName*。然后在对数组内存空间清零之后,输入相应个数的互异的点的坐标,存入点数组,然后通过计算每对点之间的距离,从而确定距离最近的点对。其计算方式是:预设定第一次参与运算的两个点之间的距离为最短距离,然后计算每一对点之间的距离,其计算过程为从第一个点开始依次和其后所有的点之间调用两点之间距离计算函数计算其他点之间距离,每次计算和设定的最短距离进行比较,如果比当前最短距离短,则更新最短距离并记录相应的点。最后输出所记录的最短距离和相应的点。
因此,空(1)需要指向 GPoint 类型的对象数组的指针,即为 GPoint*;空(2)需要计算两点之间距离的对象,用new创建,所以 ComputeDistance *;空(3)处判定是否所有与当前点还没有比较过的点之间的距离都计算完成,因为当前点和在数组前面的点的比较在前面计算时已经计算过,所以从和后一个点计算直到数组的最后一个点计算完成,即j<numberOfPoints,即空(3)为numberOfPoints; 空(4)处调用computeDistance的distance函数,计算当前循环的两个点之间的距离,即 distance(points[i],points [j]);空(5)处通过判定计算出的当前两个点之间的距离和当前最短距离,来判定是否需要更新当前最短距离,即 shortestDistance > tmpDistance 。

上一题