程序崩溃 - 分区为零

Program crashes - Division by zero

本文关键字:分区 崩溃 程序      更新时间:2023-10-16

我的代码像这样:

if (x[b] != x[c] && x[a] != x[b])
{
    if(x[a] != x[b] != x[c] != x[d])
    {
        if(y[a] != y[b] != y[c] != y[d])
        {
            int m = (y[a] - y[b])/(x[a] - x[b]);
            int b = y[a] - x[a] * m;
            if((y[c] - x[c]*m > b && y[d] - x[d]*m > b)|| (y[c] - x[c]*m < b && y[d] - x[d]*m < b)){
                m = (y[b] - y[c])/(x[b] - x[c]);
                b = y[b] - x[b] * m;
                if((y[a] - x[a]*m > b && y[d] - x[d]*m > b)|| (y[a] - x[a]*m < b && y[d] - x[d]*m < b))
                {
                    int xx[4];
                    int yy[4];
                    xx[0] = x[a];
                    xx[1] = x[b];
                    xx[2] = x[c];
                    xx[3] = x[d];
                    yy[0] = y[a];
                    yy[1] = y[b];
                    yy[2] = y[c];
                    yy[3] = y[d];
                    if(c == 1)
                    {
                        c = 0;
                        pt = povrsina(xx, yy);
                            pc = p - pt;
                    }
                    pv = povrsina(xx, yy);
                    pr = p - pv;
                    if(pr < pc)
                    {
                        pc = pr;
                        pt = pv;
                    }
                    else if(pr == pc)
                    {
                        pt = max(pt, pv);
                    }
                }
            }
        }
    }
}

我尝试的输入是:

5
30
0  0
10 0
0  10
10 10
7  3

我的程序在第174行中使用Division by zero的错误代码崩溃:

m = (y[b] - y[c])/(x[b] - x[c]);

所以我添加了第一个if语句检查

if x[b] != x[c] 

,但由于某种原因,它仍然以相同的错误代码和同一行崩溃。

以下作用正确。

int n = 0;
double p  = 0;
scanf("%dn%lf", &n, &p);
int *x = (int *) malloc(sizeof(int) * n);
int *y = (int *) malloc(sizeof(int) * n);
for(int i = 0; i < n; i++){
    scanf("%d %d", &x[i], &y[i]);
}
for(int i = 0; i < n; i++){
    printf("%d %dn", x[i], y[i]);
}

请参阅 demo

更新

由于以下行,您的代码正在崩溃。

int m = (y[a] - y[b])/(x[a] - x[b]);

考虑a, b, c, d的值是0, 2, 3, 4,则分母项 (x[a] - x[b])表示(x[0] - x[2])等于零,对吗?因为第一和第三输入是0 00 10

如果将值除以零,则将变为无穷大,当时您的程序将崩溃。在使用Division Operation编写语句时,请确保除数不是零。