1997-c-二

#include <stdio.h>
#include <stdlib.h>
//向量
typedef struct Vector
{
  int x;
  int y;
}Vector;

//坐标点
typedef struct Point
{
  int x;
  int y;
}Point;

//判断两向量是否共线,不共线即可构成三角形
int triangle(Vector v[])
{
  if(v[0].x*v[1].y == v[1].x*v[0].y) return 0;//共线、不能构成三角形
  else return 1;
 }

//将三点坐标转换为两个向量的坐标
void change(Point p[],Vector v[])
{
  v[0].x = p[0].x-p[1].x;
  v[0].y = p[0].y-p[1].y;

  v[1].x = p[0].x-p[2].x;
  v[1].y = p[0].y-p[2].y;
}

int main()
{
  int n;//坐标点总数
  int i,j,k;//循环变量
  Point m[3];//三个点
  Vector l[2];//两个向量

  printf("请输入坐标点个数:\n");//输入坐标点个数
  scanf("%d",&n);

  Point *p = (Point*)malloc(sizeof(Point)*n);//分配点存储空间

  for(i=0;i<n;i++)
  {
      printf("请输入第%d个坐标:\n",i);
      scanf("%d,%d",&p[i].x,&p[i].y);
  }

  for(i=0;i<n;i++)
  {
    for(j=i+1;j<n;j++)
    {
      for(k=j+1;k<n;k++)
      {
        m[0].x = p[i].x;
        m[0].y = p[i].y;

        m[1].x = p[j].x;
        m[1].y = p[j].y;

        m[2].x = p[k].x;
        m[2].y = p[k].y;

        change(m,l);
        if(triangle(l)>0)
        {
          printf("构成三角形的点1:%d-%d\n",m[0].x,m[0].y);
          printf("构成三角形的点2:%d-%d\n",m[1].x,m[1].y);
          printf("构成三角形的点3:%d-%d\n\n",m[2].x,m[2].y);
        }

      }
    }
  }

}
//{
//  printf("构成三角形的点1:%d-%d\n",m[0].x,m[0].y);
//  printf("构成三角形的点2:%d-%d\n",m[1].x,m[1].y);
//  printf("构成三角形的点3:%d-%d\n\n",m[2].x,m[2].y);
//} else{
//  printf("不构成三角形的点1:%d-%d\n",m[0].x,m[0].y);
//  printf("不构成三角形的点2:%d-%d\n",m[1].x,m[1].y);
//  printf("不构成三角形的点3:%d-%d\n\n",m[2].x,m[2].y);
//}
/**
    测试数据:(3,4)(2,4) (1,4) (6,5)
**/