帕斯卡的三角计划不起作用

时间:2017-02-15 23:27:52

标签: c

我是C的新手,尽管之前我已经做了大量的Java。我正在制作一个基本的Pascal三角形程序,我一直在试着让它运行一小时。所有的逻辑对我来说都是正确的,但在我意识到错误之前我可能会死。这是该计划:

#include <stdio.h>
#include <stdlib.h>
double fact(int num);

int main()
{
    int row_index = 0;
    printf("Enter the row index : ");
    scanf("%d",&row_index);
    printf("\n");
    int i;
    double output1 = 0;
    double output2 = 0;
    double output3 = 0;
    double output4 = 0;
    double output5 = 0;
    int output6 = 0;
    for(i = 0; i <= (row_index + 1); i++)
    {
        output1 = fact(row_index);
        output2 = fact(i);
        output3 = row_index - i;
        output4 = fact(output3);
        output5 = output1 / (output2 * output4);
        output6 = (int)(output5);
        printf("%i ",output6);
    }
    return 0;
}

double fact(int num)
{
    double result;
    int i;
    for(i = 1; i <= num; ++i)
        {
            result = result * i;
        }
    return result;
}

编译器没有给我任何错误,每次我输入一个数字时都会将其作为输出:

Enter the row index : 6

-2147483648 -2147483648 -2147483648 -2147483648 -2147483648 -2147483648 -2147483648 -2147483648

2 个答案:

答案 0 :(得分:0)

double fact(int num)中,应明确初始化变量result。另外,我建议你定义函数的返回值和变量resultint类型。

请参阅(Why) is using an uninitialized variable undefined behavior?

答案 1 :(得分:0)

乍一看,似乎有几个问题。

首先:

double fact(int num)
{
    double result;
    int i;
    for(i = 1; i <= num; ++i)
    {
    result = result * i;
    }
    return result;
}

结果未初始化为任何内容。也许你需要将它初始化为1?

for(i = 0; i <= (row_index + 1); i++)
{
    output2 = fact(i);
    output3 = row_index - i;
    output4 = fact(output3);
    output5 = output1 / (output2 * output4);
}

第一次,i == 0;这意味着output2最好为0(假设它自动初始化为0)。如果output2 == 0,则output5可能未定义。我说可能因为双精度数字,它实际上可能不完全是0。