C语言 直线问题 求大神给个代码!

C语言 直线问题

小明上来中学,开始学习直线方程,老师有一天要看看小明学的如何,于是问了他一个问题。给出两个坐标(x1, y1)和(x2, y2)可以唯一确定一条直线,那么,任意给你一个点,你是否可以判断这个点在该直线上吗?
输入:
x1, y1
x2, y2
n
n个坐标x1,y1 x2,y2 .....xn,yn
输出:在直线上的点坐标
包括延长线哦(按照原来的输入顺序),如果没有属于直线上的点,则输出"NoOut.”

如果问题得到解决,请点下采纳

#include <stdio.h>
#include <stdlib.h>
#define epsilon 0.00001
#define equ(a,b) ((a)-(b)<epsilon&&(b)-(a)<epsilon)

int foo(float x1, float x2, float y1, float y2, float x, float y)
{
    if (equ(y1, y2)) return equ(y1, y);
    float a = (y1 - y2) / (x1 - x2);
    float b = y1 - x1 * a;
    return equ(x * a + b, y);
}

int main()
{
    float x1, x2, y1, y2;
    scanf("%f,%f", &x1, &y1);
    scanf("%f,%f", &x2, &y2);
    int n;
    scanf("%d", &n);
    float * x = (float *)malloc(sizeof(float) * n);
    float * y = (float *)malloc(sizeof(float) * n);
    int * r = (int *)malloc(sizeof(int) * n);
    int exist = 0;
    for (int i = 0; i < n; i++)
    {
        scanf("%f,%f", &x[i], &y[i]);
        r[i] = foo(x1, x2, y1, y2, x[i], y[i]);
        if (r[i]) exist = 1;
    }
    for (int i = 0; i < n; i++)
    {
        if (r[i]) printf("%f,%f\n", x[i], y[i]);
    }
    if (!exist)
        printf("NoOut.\n");
    return 0;
}

有1个结果:
图片说明

有多个结果:
图片说明

直线垂直(无法求斜率)
图片说明

无结果
图片说明

特别注意,因为浮点数有误差,千万不要直接用==比较

图片说明
这是效果图

#include<stdio.h>
#include<malloc.h>
int main()
{
    int n,i,c=0;
    float A,B;
    printf("请输入a,b(y=ax+b)\n");
    printf("a=");
    scanf("%f",&A);
    printf("\nb=");
    scanf("%f",&B);


    printf("请输入n:");
    printf("\n");
    scanf("%d",&n);
    float *a=(float*)malloc(sizeof(float)*n);
    float *b=(float*)malloc(sizeof(float)*n);
    for (i=0;i<n;i++)
    {
        printf("请输入%d号点x坐标:",i+1);
        scanf("%f",a+i);
        printf("请输入%d号点y坐标:",i+1);
        scanf("%f",b+i);
        printf("\n"); 
    }

    for (i=0;i<n;i++)
    {

        if (*(a+i)*A+B==*(b+i))
        {
            printf("x%d=%.2f    ",i+1,*(a+i));
            printf("y%d=%.2f\n",i+1,*(b+i));
            c+=1;
        }
    }
    if(c==0)
    {
        printf("NoOut");
     } 
    return 0;
}