用C语言编‘写用二维数组判断五个坐标是否在同一直线上’

用C语言二维数组判断(2,3)(3,4)(5,5)(6,5)(8,5)这五个坐标是否在同一直线上,是的输出“在同一直线”不是输出“不在同一直线上”急求!

 #include <stdio.h>
int main()
{
    float point[5][2]={{0,0},{3,3},{5,5},{6,6},{8,8}};
    float k;
int i;
float ki;
    k=(point[0][1]-point[1][1])/(point[0][0]-point[1][0]);
    for(i=2;i<5;i++)
    {
        ki=(point[0][1]-point[i][1])/(point[0][0]-point[i][0]);
        if (ki!=k)
        {
            printf("这5个点不在同一直线上\n");
            break;
        }
    }
    if(i>=5) printf("这5个点在同一直线上\n");
    return 0;

我是雷锋!!!!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-07
#include <stdio.h>
int main ()
{
int points[5][2] = { 2 , 3 , 3 , 4 , 5 , 5 , 6 , 5 , 8 , 5 };
int x = points[1][0]-points[0][0];       //向量横坐标
int y = points[1][1]-points[0][1];       //向量纵坐标
int i = 1;
int xtemp , ytemp;
for (i = 2; i<5; i++)
{
xtemp = points[i][0]-points[0][0];   //向量横坐标
ytemp = points[i][1]-points[0][1];   //向量纵坐标
if (xtemp*y!=ytemp*x)    //向量不共线
break;
}
if(i>5)
printf("在同一直线\n");
else
printf("不在同一直线上\n");
return 0;
}

追问

但是我无论换什么坐标它输出的全是不在同一直线啊

追答#include <stdio.h>
int main ()
{
    int points[5][2] = { 2 , 3 , 3 , 4 , 5 , 5 , 6 , 5 , 8 , 5 };
    int x = points[1][0]-points[0][0];       //向量横坐标
    int y = points[1][1]-points[0][1];       //向量纵坐标
    int i = 1;
    int xtemp , ytemp;
    for (i = 2; i<5; i++)
    {
        xtemp = points[i][0]-points[0][0];   //向量横坐标
        ytemp = points[i][1]-points[0][1];   //向量纵坐标
        if (xtemp*y!=ytemp*x)    //向量不共线
            break;
    }
        if(i==5)   //这里应该是i==5
            printf("在同一直线\n");
        else
            printf("不在同一直线上\n");
    return 0;
}

第2个回答  2014-07-08
采纳的答案存在除数为0的情况,如果各点x坐标相同,则程序运行会出错,楼主自己优化吧。
相似回答