问题 问答题

试题五:阅读以下说明和C++代码,填充代码中的空缺,将解答填入答题纸的对应栏内。

[说明]下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图5-1所示的8个点中,点(1,1)与(2,0.5)是间距最近的点对。

[C++代码]

 

答案

参考答案:

(1) GPoint*

(2) ComputeDistance*

(3) numberOfPoints

(4) distance(points[i],points[j])

(5) shortestDistance> tmpDistance

解析:

本题考查C++语言程序设计的能力,涉及类、对象、函数的定义和相关操作。要求考生根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。 先考察题目说明。计算平面或空间中点之间的距离是目前很多应用中需要的,如GPS计算等。本题目简化了点之间距离的要求,其主要任务是计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。数轴上两点之间的距离等于相应两数差的绝对值,而平面坐标系中两点之间的距离等于相应两点的横坐标差和纵坐标差的平方和的算数平方根。假设平面左边系中的两点和,两者之间的距离

。如题中图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创建对象数据返回的是指针类型,此处需要C1assNane*。然后在对数组内存空间清零之后,输入相应个数的互异的点的坐标,存入点数组,然后通过计算每对点之间的距离,从而确定距离最近的点对。其计算方式是:预设定第一次参与运算的两个点之间的距离为最短距离,然后计算每一对点之间的距离,其计算过程为从第一个点开始依次和其后所有的点之间调用两点之间距离计算函数计算其他点之间距离,每次计算和设定的最短距离进行比较,如果比当前最短距离短,则更新最短距离并记录相应的点。最后输出所记录的最短距离和相应的点。 因此,空(1)需要指向GPoint类型的对象数组的指针,即为GPoint*;空(2)需要计算两点之间距离的对象,用new创建,所以ComputeDistance*;空(3)处判定是否所有与当前点还没有比较过的点之间的距离都计算完成,因为当前点和在数组前面的点的比较在前面计算时已经计算过,所以从和后一个点计算直到数组的最后一个点计算完成,即j<numberOfPoints,即空(3)为numberOfPoints;空(4)处调用computeDistance的distance函数,计算当前循环的两个点之间的距离,即distance(points[i],points[j]);空(5)处通过判定计算出的当前两个点之间的距离和当前最短距离,来判定是否需要更新当前最短距离,即shortestDistance>tmpDistance。

判断题
多项选择题