newgooooal 2021-04-17 21:32 采纳率: 83.3%
浏览 228
已采纳

C++ 对象指针问题,如何对对象的元素按顺序输出

#include<iostream>
#include <cmath>
using namespace std;
class Point{
	public:
		Point();//缺省构造函数
		Point(int x,int y):x(x),y(y){}//构造函数
		~Point(){};//析构函数
		int getX() const {return x;}
		int getY() const {return y;}
		double distance(int x,int y);
	private:
		int x,y; 
};
Point::Point(){
	x=y=0;
}
double Point::distance(int x,int y){
	return sqrt(x*x+y*y);
}

int Ascending(double a[]){
	int temp;
	for(int i=0;i<10-1;i++){
		for(int j=0;j<10-1-i;j++){
			if(a[j]>a[j+1]){
				temp=a[j+1];
				a[j+1]=a[j];
				a[j]=temp;
			}
		}
	}
	for(int i=0;i<10;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

int main(){
	double b[10];
	Point a[10]={Point(-1,-3),Point(-2,-4),Point(1,3),Point(-2,5),Point(3,-4),Point(5,3),Point(1,7),Point(6,3),Point(4,4),Point(7,8)};
	for(int i=0;i<10;i++){
		b[i]=a[i].distance(a[i].getX(),a[i].getY());
	}
	
	
	Ascending(b);
	return 0; 
	
}

题目要求:

创建点的对象数组,包含10个点,编写函数使得点按照距离原点的远近排列,在主函数中输出排序后的点及其距离值(30分)。10个点的坐标分别为:

(-1,-3),(-2,-4),(1,3),(-2,5),(3,-4),(5,3),(1,7),(6,3),(4,4),(7,8)

 

如题,加粗的功能未实现,求教

  • 写回答

2条回答 默认 最新

  • 猫叔大鸭梨 2021-04-17 23:19
    关注
    #include<iostream>
    #include <cmath>
    using namespace std;
    class Point {
    public:
    	Point();//缺省构造函数
    	Point(int x, int y) :x(x), y(y) {}//构造函数
    	~Point() {};//析构函数
    	int getX() const { return x; }
    	int getY() const { return y; }
    	double distance(int x, int y);
    
    	double dis;
    private:
    	int x, y;
    	
    };
    Point::Point() {
    	x = y = 0;
    	dis = 0;
    }
    double Point::distance(int x, int y) {
    	return sqrt(x*x + y * y);
    }
    int Ascending( Point (&a)[10]) {
    	Point temp;
    	for (int i = 0; i < 10 - 1; i++) {
    		for (int j = 0; j < 10 - 1 - i; j++) {
    			if (a[j].dis > a[j + 1].dis) {
    				temp = a[j + 1];
    				a[j + 1] = a[j];
    				a[j] = temp;
    			}
    		}
    	}
    	for (int i = 0; i < 10; i++) {
    		//cout << a[i].getX()  << " ";
    		printf("x=%d y=%d distance=%f \n", a[i].getX(), a[i].getY(), a[i].dis);
    	}
    	cout << endl;
    
    	return 0;
    }
    int main() {
    	//double b[10];
    	Point a[10] = { Point(-1,-3),Point(-2,-4),Point(1,3),Point(-2,5),Point(3,-4),Point(5,3),Point(1,7),Point(6,3),Point(4,4),Point(7,8) };
    	for (int i = 0; i < 10; i++) {
    		a[i].dis = a[i].distance(a[i].getX(), a[i].getY());
    	}
    
    
    	Ascending(a);
    	system("pause");
    	return 0;
    
    }

    做了一些修改,Point里新增了dis变量用于存储计算距离的结果,直接用Point (&a)[]数组来排序,方便后续的结果打印。

    在第18行做了xy点和distance的输出。

    还有问题的话可以再在评论区交流,望采纳谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料