Pascal的三角形程序不起作用

问题描述:

我对C很陌生,虽然我之前做过很多Java。我正在制作一个基本的Pascal三角形程序,我一直在寻找它一小时试图让它工作。所有的逻辑对我来说似乎都是正确的,但在我意识到错误之前,我可能会死去。这里的程序: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 
+0

如果您可以找到一种渐进式算法,它可以乘以并除以前一项,而不是尝试拍摄具有阶乘函数的月亮。或者,通过仅添加两个先前的数组项来构建数组。 –

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

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

+0

32位'int'只能保存12个结果! – interjay

+0

至少使用'uint64_t' –

一眼就可以看出几个问题。

第一:

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.