霍纳在C中的统治

时间:2014-01-05 18:47:22

标签: c

所以我正在编写一个使用Horner规则计算多项式的程序。

但在输入第一个系数后,程序崩溃了。我做错了什么?我找不到错误。

编辑:我刚注意到我正在向后阅读论据。

int main() {

    int degree;
    float x;
    float px = 0;
    float p = 0;
    float *a;
    int i;

    a = malloc((degree+1)*sizeof(float));

    printf("Enter the degree:");
    scanf("%d", &degree);
    printf("Enter the argument:");
    scanf("%f", &x);

    for (i = 0; i < degree+1; i++)
    {
    printf("Enter the coefficient Nr%d:", i+1);
    scanf("%f", *(a+i));
    }   
    for (i = degree; i > -1; i--)
    {
    p = *(a+i) * pow(x, i);
    px + p;
    }

    printf("%f", px);

    return 0;
}

2 个答案:

答案 0 :(得分:3)

a分配内存时,degree尚未初始化。

另外,从scanf("%f", *(a+i));中删除星号。您需要a[i]地址,而不是

答案 1 :(得分:1)

在您的代码a = malloc((degree+1)*sizeof(float));中,您使用degree的值而不初始化它。初始化变量可以包含 ANY 值,最有可能无效,并将带您进入名为未定义行为的方案。这就是崩溃的原因。

第二件事,每次在malloc() [或一般来说,库函数或系统调用]之后,检查返回值的有效性是一个非常好的主意。您可以在NULL之后使用a检查malloc()变量。

第三,将scanf("%f", *(a+i));更改为scanf("%f", &a[i]);

也许如果你按照以下方式编写代码,它应该可以工作。

int main() {

    int degree;
    float x;
    float px = 0;
    float p = 0;
    float *a;
    int i;

    printf("Enter the degree:");
    scanf("%d", &degree);
    printf("Enter the argument:");
    scanf("%f", &x);

    a = malloc((degree+1)*sizeof(float));

    for (i = 0; i < degree+1; i++)
    {
    printf("Enter the coefficient Nr%d:", i+1);
    scanf("%f", &a[i]);
    }   
    for (i = degree; i > -1; i--)
    {
    p = *(a+i) * pow(x, i);
    px + p;
    }

    printf("%f", px);

    return 0;
}