c语言简单题目

如题所述

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
#define N 20
#define Max 20 
#define Min 1
#define swap(x,y) x^=y;y^=x;x^=y
#define random(x,y) rand()%(x-y)+y
#define Sq(x) ((x)*(x))
#define L(x,y) sqrt(Sq(x)+Sq(y))
//#define PRINT
typedef struct P{
    int x,y;
}Point,*pPoint;

void main(){
    srand((unsigned int)time(NULL));
    Point a[N];
    //生成N个坐标
    int i,j;
    for(i=0;i<N;i++){
        a[i].x = random(Max,Min);
        a[i].y = random(Max,Min);
        printf("x=%d,y=%d\n",a[i].x,a[i].y);
    }
    //坐标排序
    for(i=0;i<N;i++){
        for(j=i+1;j<N;j++)
            if(a[i].y>a[j].y){
                swap(a[i].y,a[j].y);
                swap(a[i].x,a[j].x);
            }
    }
    for(i=0;i<N;i++)
        for(j=i+1;j<N;j++)
            if((a[i].y==a[j].y)&&(a[i].x>a[j].x)){
                swap(a[i].x,a[j].x);
            }
    
    //计算中心,以及半径
    float avex,avey,aver;
    avex=avey=0;
    for(i=0;i<N;i++){
        avex+=a[i].x;
        avey+=a[i].y;
    }
    avex = avex/N;
    avey = avey/N;
    for(i=0;i<N;i++)
        aver += L(a[i].x-avex,a[i].y-avey);
    aver/=N;

    printf("\n");
    printf("%f,%f,%f\n",avex,avey,aver);
    


    int t,tt;
    t = tt = 0;
    for(i=0;i<N;i++)
    {
        if(t!=a[i].y){
            for(j=1;j<a[i].y-t;j++)
                j+t<10?printf("\n0%d",j+t):printf("\n%d",j+t);
            t = a[i].y;
            t<10?printf("\n0%d ",t):printf("\n%d ",t);
            for(j=1;j<a[i].x;j++)
                printf(" ");
            if(L(a[i].x-avex,a[i].y-avey)>aver)
                printf("#");
            else
                printf("*");
        }else{
            for(j=1;j<a[i].x-tt;j++)
                printf(" ");
                if(tt!=a[i].x)
                    if(L(a[i].x-avex,a[i].y-avey)>aver)
                        printf("#");
                    else
                        printf("*");
        }
        tt = a[i].x;
        t = a[i].y;
    }
    printf("\n");    
}

温馨提示:答案为网友推荐,仅供参考