2017-02-15 82 views
0

我對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

如果您可以找到一種漸進式算法,它可以乘以併除以前一項,而不是嘗試拍攝具有階乘函數的月亮。或者,通過僅添加兩個先前的數組項來構建數組。 –

回答

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.