/* * 作 者: 霍雨佳 * 完成日期:2014 年4月1日 * 版 本 号:v1.0 * 问题描述:设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等。 * 样例输入: * 样例输出: * 问题分析:在设计中,由于求距离、求对称点等操作对原对象不能造成任何改变。 */ #include <iostream> #include <cmath> using namespace std; class CPoint { private: double x; // 横坐标 double y; // 纵坐标 public: CPoint(double xx=0,double yy=0):x(xx),y(yy) {}; double Distance1(CPoint p) const; // 两点之间的距离(一点是当前点,另一点为参数p) double Distance0() const; // 到原点的距离 CPoint SymmetricAxis(char style) const;//style取'x','y'和'o'分别表示按x轴, y轴, 原点对称 void input(); //以x,y 形式输入坐标点 void output(); //以(x,y) 形式输出坐标点 }; void CPoint::input() //以x,y 形式输入坐标点 { char c; while(1) { cin>>x>>c>>y; if(c!=',') { cout<<"输入格式有误,请重新输入"<<endl; } else break; } x=x; y=y; } void CPoint::output() //以(x,y) 形式输出坐标点 { cout<<"("<<x<<","<<y<<")"<<endl; } double CPoint::Distance0() const // 到原点的距离 { int d; d=sqrt(x*x+y*y); return d; } CPoint CPoint::SymmetricAxis(char style) const//style取'x','y'和'o'分别表示按x轴, y轴, 原点对称 { switch(style) { case 'x': cout<<"关于x轴对称的坐标为:("<<x<<","<<-y<<")"<<endl; break; case 'y': cout<<"关于y轴对称的坐标为:("<<-x<<","<<y<<")"<<endl; break; case 'o': cout<<"关于原点对称的坐标为:("<<-x<<","<<-y<<")"<<endl; break; } } double CPoint::Distance1(CPoint p) const // 两点之间的距离(一点是当前点,另一点为参数p) { double l; l=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y)); return l; } int main() { double m=0; char x,y,o; CPoint p,q; cout<<"请输入p的坐标x,y:"<<endl; p.input(); cout<<"p的坐标为:"; p.output(); p.SymmetricAxis('x'); p.SymmetricAxis('y'); p.SymmetricAxis('o'); cout<<"请输入q的坐标x,y:"<<endl; q.input(); cout<<"q的坐标为:"; q.output(); m=q.Distance1(p); cout<<"两点间的距离为:"<<m<<endl; cout<<endl; return 0; }
运行结果:
加油!!!