题目:平面上有n个点,坐标均为整数。请按与坐标原点(0,0)距离的远近将所有点排序输出。可以自己写排序函数,也可以用qsort库函数排序。

输入:输入有两行,第一行是整数n(1<=n<=10),接下来有n行,每行一对整数(每对整数对应一个点)。

输出:输出排序后的所有点,格式为(u,v),每个点后有一个空格。测试数据保证每个点到原点的距离都不同。

Exemple:

样例输入:4
           1 3 
           2 5 
           1 4 
   4 2

样例输出:(1,3) (1,4) (4,2) (2,5) 

解题思路:这道题要用结构体做,然后在结构体中除了有横坐标x,纵坐标y,还要定义一个到原点的距离d, 然后通过比较距离d的值来判断要不要交换2个坐标来进行排序。 然后这里交换俩坐标的时候也有一个小技巧,就是整体交换,定义一个t(t也是一个结构体,就是t里面包括了x和y两个东东),然后t作为2坐标交换的中间变量。

My Daima: 

#include<stdio.h>
#include<math.h>
struct point  //这是定义一个结构体
{
    double x,y,d;
};
int main()
{
    int i,j,n;
    struct point a[11],t;  //这里的t也是个结构体,到时候交换俩坐标时你就会发现特方便
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%lf%lf",&a[i].x,&a[i].y);
        a[i].d=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);  //这是计算每个点到原点的距离
    }
    for(i=1;i<n;i++)  //这是进行排序的操作,和数组排序一样一样的
    {
        for(j=0;j<n-i;j++)
        {
            if(a[j].d>a[j+1].d)  //比较每个点到原点的距离来判断是否交换坐标
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(i=0;i<n;i++)
        printf("(%.0lf,%.0lf) ",a[i].x,a[i].y);  //输出排序后的坐标,注意每个坐标后都有空格
    return 0;
}